无法授予其他 AWS 角色与我的集群交互的能力

无法授予其他 AWS 角色与我的集群交互的能力

我正在尝试学习 AWS EKS 并关注开始使用 Amazon EKS – AWS 管理控制台和 AWS CLI除了我已将区域更改为 us-east-1 之外,请逐步指导。

我可以创建集群 -my-cluster但是当我尝试配置我的计算机(即 EC2 实例 (T2.Micro))以与集群通信时,出现error: You must be logged in to the server (Unauthorized)错误。深入研究后,我发现 EC2 角色 (ARN - arn:aws:iam::123456789012:role/ec2-admin) 需要承担创建集群的角色 (ARN - arn:aws:iam::123456789012:role/myAmazonEKSClusterRole)。我也在角色定义中进行了这些修改,方法是修改myAmazonEKSClusterRole获取中的信任关系arn:aws:sts::123456789012:assumed-role/myAmazonEKSClusterRole/test-session。在此之后,我可以执行aws eks命令,但kubectl命令仍然无法执行。

为了执行kubectl命令,我尝试按照管理集群的用户或 IAM 角色。但是,他们要求我更改aws-auth-cm.yamlconfigMap 文件,但我无法执行此操作,因为我无法执行kubectl apply命令。

我的kubeconfig档案 -

apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: <cert>
  name: arn:aws:eks:us-east-1:123456789012:cluster/my-cluster
contexts:
- context:
    cluster: arn:aws:eks:us-east-1:123456789012:cluster/my-cluster
    user: arn:aws:eks:us-east-1:123456789012:cluster/my-cluster
  name: arn:aws:eks:us-east-1:123456789012:cluster/my-cluster
current-context: arn:aws:eks:us-east-1:123456789012:cluster/my-cluster
kind: Config
preferences: {}
users:
- name: arn:aws:eks:us-east-1:123456789012:cluster/my-cluster
  user:
    exec:
      apiVersion: client.authentication.k8s.io/v1alpha1
      args:
      - --region
      - us-east-1
      - eks
      - get-token
      - --cluster-name
      - my-cluster
      command: aws

我进行更改后,aws-auth-cm.yaml 文件的内容如下

apiVersion: v1
kind: ConfigMap
metadata:
  name: aws-auth
  namespace: kube-system
data:
  mapRoles: |
          #    - rolearn: <ARN of instance role (not instance profile)>
          #      username: system:node:{{EC2PrivateDNSName}}
          #      groups:
          #        - system:bootstrappers
          #        - system:nodes
    - rolearn: arn:aws:iam::375712918983:role/myAmazonEKSClusterRole
      username: myAmazonEKSClusterRole
      groups:
        - system:masters

您能帮忙或者给出一些指点吗?

请让我知道,如果你有任何问题。

答案1

您将需要以下三件事之一:

  • 假设arn:aws:iam::123456789012:role/myAmazonEKSClusterRole在终端会话中,这样aws eks get-token运行kubectl将正确运行
  • 创建一个承担该角色的 awscli 配置文件arn:aws:iam::123456789012:role/myAmazonEKSClusterRole并更新args:以包含[..., "--profile", "whatever-you-call-that-profile",...]
  • 或者在终端中承担角色,运行aws eks get-token,并将该静态凭证放入您的 kubeconfig 中,因为您似乎不需要凭证很长时间来更新该 ConfigMap

对于第一个,我的意思是aws sts assume-role --role-arn arn:aws:iam::123456789012:role/myAmazonEKSClusterRole ... | tee sts-creds.json,然后export AWS_ACCESS_KEY_ID= AWS_SECRET_KEY= AWS_SESSION_TOKEN=根据该 json 的内容

对于第二个,我的意思是:

$ cat >> $HOME/.aws/config <<FOO
[profile my-cluster]
assume_role = arn:aws:iam::123456789012:role/myAmazonEKSClusterRole
source_profile = whatever
; or credential_source = whatever
FOO

根据本文档

相关内容