首页 > 解决方案 > 如何允许代入角色从 EC2 连接到 AWS 上的 EKS?

问题描述

在此处输入图像描述

我在同一个 AWS 账户中创建了一个 EC2 实例和一个 EKS 集群。为了从 EC2 使用 EKS 集群,我必须授予它必要的权限。

我添加了一个具有一些 EKS 操作权限的实例配置文件角色。它的角色 arn 是arn:aws:iam::11111111:role/ec2-instance-profile-role仪表板上的 (A)。但在 EC2 实例中,可以找到arn:aws:sts::11111111:assumed-role/ec2-instance-profile-role/i-00000000(B)。

$ aws sts get-caller-identity
{
    "Account": "11111111",
    "UserId": "AAAAAAAAAAAAAAA:i-000000000000",
    "Arn": "arn:aws:sts::11111111:assumed-role/ec2-instance-profile-role/i-00000000"
}

我还创建了一个aws-auth配置映射以设置到 EKS 中的 Kubernetes 系统配置中,以允许注册和访问 EC2 实例配置文件角色。我尝试将 A 和 B 都设置到 mapRoles 中,他们都遇到了同样的问题。当我kubectl在 EC2 上运行命令时:

$ aws eks --region aws-region update-kubeconfig --name eks-cluster-name

$ kubectl config view --minify
apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: DATA+OMITTED
    server: https://xxxxxxxxxxxxxxxxxxxxxxxxxxxx.aw1.aws-region.eks.amazonaws.com
  name: arn:aws:eks:aws-region:11111111:cluster/eks-cluster-name
contexts:
- context:
    cluster: arn:aws:eks:aws-region:11111111:cluster/eks-cluster-name
    user: arn:aws:eks:aws-region:11111111:cluster/eks-cluster-name
  name: arn:aws:eks:aws-region:11111111:cluster/eks-cluster-name
current-context: arn:aws:eks:aws-region:11111111:cluster/eks-cluster-name
kind: Config
preferences: {}
users:
- name: arn:aws:eks:aws-region:11111111:cluster/eks-cluster-name
  user:
    exec:
      apiVersion: client.authentication.k8s.io/v1alpha1
      args:
      - --region
      - aws-region
      - eks
      - get-token
      - --cluster-name
      - eks-cluster-name
      - --role
      - arn:aws:sts::11111111:assumed-role/ec2-instance-profile-role/i-00000000
      command: aws
      env: null
      provideClusterInfo: false

$kubectl get svc
error: You must be logged in to the server (Unauthorized)

我还检查了假定角色的类型。是Service但不是AWS

看来这种类型是必要的。

{
    "Version": "2012-10-17",
    "Statement": {
        "Effect": "Allow",
        "Principal": { "AWS": "arn:aws:iam:: 333333333333:root" },
        "Action": "sts:AssumeRole"
    }
}

Terraform aws 承担角色

但是我尝试使用AWS类型创建一个新的假设角色并将其设置为 Kubernetes 的aws-auth配置映射,仍然是同样的问题。

如何使用它?我是否需要创建一个新的 IAM 用户才能使用?

标签: amazon-web-serviceskubernetesamazon-ec2amazon-iamamazon-eks

解决方案


- name: external-staging
  user:
    exec:
      apiVersion: client.authentication.k8s.io/v1alpha1
      args:
      - exec
      - test-dev
      - --
      - aws
      - eks
      - get-token
      - --cluster-name
      - eksCluster-1234
      - --role-arn
      - arn:aws:iam::3456789002:role/eks-cluster-admin-role-e65f32f
      command: aws-vault
      env: null

这个配置文件为我工作。它应该是role-arn&command: aws-vault


推荐阅读