每当我使用创建 eks 集群的角色运行以下命令时...
aws eks update-kubeconfig --name eks-cluster --role-arn arn:aws:iam::999999999999:role/eksServiceRole
...我收到以下错误:
An error occurred (AccessDeniedException) when calling the DescribeCluster operation: User: arn:aws:iam::111111111111:user/username is not authorized to perform: eks:DescribeCluster on resource: arn:aws:eks:us-east-1:561353845098:cluster/eks-cluster
有人对如何诊断和纠正这个错误有什么建议吗?
答案1
以下几条建议可能有帮助,也可能没用:
您可以将命令添加
--verbose
到命令中,以便更好地了解失败的原因。可能是您被认证为的用户无法承担指定的角色?在 aws-cli 手册中,
--role-arn
它是作为字符串传递的,您应该尝试用双引号将其括起来:
aws eks update-kubeconfig --name eks-cluster --role-arn "arn:aws:iam::999999999999:role/eksServiceRole"
尝试通过 aws-cli 手动承担该角色。
验证您当前的已验证会话:
aws sts get-caller-identity
尝试承担角色:
aws sts assume-role --role-arn "arn:aws:iam::999999999999:role/eksServiceRole" --role-session-name test-eks-role
答案2
--role-arn
aws-iam-authenticator
是您运行获取令牌时使用的角色kubectl
,仅注入到生成的配置中;它不会以任何方式通过命令用于获取 EKS 资源。
您遇到的错误是因为您用于运行update-kubeconfig
命令的 AWS 凭证没有描述该集群的权限。
答案3
我不是那熟悉 EKS,但我猜测您以该aws eks
命令身份运行的用户需要权限来描述集群。
这能成功运行吗?
~ $ aws eks describe-cluster --name eks-cluster
如果没有,你需要检查你的aws-cli 权限并首先使其发挥作用。
这只是一个猜测,但希望有所帮助:)
答案4
使用 sts 假定角色方法,然后从那里重新分配凭证值
#!/bin/bash
export AWS_ACCESS_KEY_ID=xxx
export AWS_SECRET_ACCESS_KEY=xxx
ROLE_ARN="arn:aws:iam::xxx:role/Administrator"
CRED=$(aws sts assume-role --role-arn "${ROLE_ARN}" --role-session-name AWSCLI-Session)
export AWS_ACCESS_KEY_ID=$(echo "${CRED}"| jq -r '.Credentials.AccessKeyId')
export AWS_SECRET_ACCESS_KEY=$(echo "${CRED}"| jq -r '.Credentials.SecretAccessKey')
export AWS_SESSION_TOKEN=$(echo "${CRED}"| jq -r '.Credentials.SessionToken')
aws sts get-caller-identity
aws eks update-kubeconfig --name my-cluster --region region