如何允许代入角色从 EC2 连接到 AWS 上的 EKS?
How to allow an assume role connect from EC2 to EKS on AWS?
我在同一个 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 中,它们都遇到了同样的问题。当我在 EC2 上 运行 kubectl
命令时:
$ 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 assume role
但我尝试创建一个新的 AWS
类型的承担角色并将其设置为 Kubernetes 的 aws-auth
配置映射,仍然是同样的问题。
如何使用?我需要创建一个新的 IAM 用户才能使用吗?
- 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
我在同一个 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 中,它们都遇到了同样的问题。当我在 EC2 上 运行 kubectl
命令时:
$ 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 assume role
但我尝试创建一个新的 AWS
类型的承担角色并将其设置为 Kubernetes 的 aws-auth
配置映射,仍然是同样的问题。
如何使用?我需要创建一个新的 IAM 用户才能使用吗?
- 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