AWS EKS update-kubeconfig 不尊重 --role-arn 标志

AWS EKS update-kubeconfig 不尊重 --role-arn 标志

每当我使用创建 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 手动承担该角色。

    1. 验证您当前的已验证会话: aws sts get-caller-identity

    2. 尝试承担角色:aws sts assume-role --role-arn "arn:aws:iam::999999999999:role/eksServiceRole" --role-session-name test-eks-role

答案2

--role-arnaws-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

相关内容