AWS 无法获取令牌:AccessDenied:用户:ARN 无权对资源执行:sts:AssumeRole:Role:ARN

AWS 无法获取令牌:AccessDenied:用户:ARN 无权对资源执行:sts:AssumeRole:Role:ARN

我正在按照分步指南在 AWS 上设置 kubernetes 环境。

https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html#role-create

它已经有一些 gochchas.. 并且已经得到部分解答。

  1. https://stackoverflow.com/questions/51135795/error-the-server-doesnt-have-resource-type-svc
  2. https://stackoverflow.com/questions/50791303/kubectl-error-you-must-be-logged-in-to-the-server-unauthorized-when-accessing

出于某种原因,人们能够使用这些答案中提供的指导方针来解决问题,而我仍然无法解决它。

could not get token: AccessDenied: User: arn:aws:iam::sssssss:user/testprofileUser is not authorized to perform: sts:AssumeRole on resource: arn:aws:iam::sssssssss:role/eksServiceRole

我做了什么:

  1. 我创建了一个具有管理员权限的 IAM 用户。(servicesDev)。
  2. 为 EKS 服务创建 IAM 角色 (amazonEKSServiceRole)

amazonEKSServiceRole 具有以下信任关系,

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "eks.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

这是我的 kubeconfig 文件,

apiVersion: v1
clusters:
- cluster:
    server: https://7F30ANNSDSDMDCE1.ylq.us-east-1.eks.amazonaws.com
    certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUN5RENDQWJDZ0F3SUJBZ0lCQURB...
  name: clouddev
contexts:
- context:
    cluster: clouddev
    user: aws
  name: aws
current-context: aws
kind: Config
preferences: {}
users:
- name: aws
  user:
    exec:
      apiVersion: client.authentication.k8s.io/v1alpha1
      command: aws-iam-authenticator
      args:
        - "token"
        - "-i"
        - "clouddev"
        - "-r"
        - "arn:aws:iam::xxxxx:role/amazonEKSServiceRole"
      env:
        - name: AWS_PROFILE
          value: "testprofile"

为了清楚起见,我已经testprofile正确设置了~/.aws/credentials

如果有人能够阐明这一点,我将不胜感激。

答案1

您还需要为 AWSServiceRoleForAmazonEKS 角色设置“信任关系”,以允许 EKS 承担该角色。

此链接底部附近将提供有关如何操作的详细信息:

Amazon EKS 服务 IAM 角色

答案2

我能够让它工作的唯一方法是使用 CLI 创建集群:

aws eks create-cluster --name <cluster name> 
   --role-arn <EKS Service Role> 
   --resources-vpc-config subnetIds=<subnet ids>,securityGroupIds=<security group id>

这是多个 AWS 资源和指南中建议的;运行它的确切命令来自这个 SO 答案:https://stackoverflow.com/a/53002925/8749874

答案3

我的情况是,我使用 root 用户创建了 VPC,并使用其他用户创建了其余的基础设施(eks 控制平面和工作节点)。当我使用同一用户(但不是 root 用户)重新创建所有内容时,事情变得顺利,并且能够使用 aws 文档创建集群。

相关内容