You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Amazon EKS中IAM角色与Kubernetes RBAC的关联及权限控制疑问

IAM角色与Kubernetes RBAC的关系及权限控制方法

核心关系说明

AWS IAM角色与Kubernetes RBAC是两个独立但协同的权限体系:

  • IAM权限:负责控制AWS云服务(如ECR、EC2、S3等)的访问,比如你看到的myAmazonEKSNodeRole的ECR权限,是用来让EKS节点拉取镜像的,和K8s集群内部资源权限无关。
  • Kubernetes RBAC:负责控制K8s集群内资源(Pod、Deployment、ConfigMap等)的访问,通过Role/ClusterRole定义权限规则,RoleBinding/ClusterRoleBinding将规则绑定到K8s身份(User/Group)。

你看到的myAmazonEKSNodeRole在IAM中没有RBAC相关内容是完全正常的——它的K8s权限是由EKS默认的集群绑定实现的:EKS会自动将节点身份(system:nodes组)绑定到system:node ClusterRole,这个Role包含了节点运行所需的K8s权限(比如上报节点状态、管理Pod),这些配置都在K8s集群内部,不会出现在IAM控制台中。

而aws-auth ConfigMap的作用是映射IAM身份到K8s身份:它把IAM角色/用户转换成K8s能识别的User或Group,之后K8s再通过RBAC给这些身份分配权限。


控制特定IAM角色在K8s集群中的权限

要实现这一点,需要完成两个关键步骤:

1. 在aws-auth ConfigMap中映射IAM角色到K8s身份

首先编辑kube-system命名空间下的aws-auth ConfigMap:

kubectl edit configmap/aws-auth -n kube-system

在mapRoles字段中添加目标IAM角色的映射规则,示例如下:

mapRoles:
- rolearn: arn:aws:iam::123456789012:role/YourTargetIAMRole
  username: k8s-user/your-custom-username
  groups:
    - k8s:dev-team  # 自定义K8s组,推荐用组来批量管理权限

说明:groups字段是核心,后续RBAC会基于这个组分配权限,比单个用户更易维护。

2. 通过K8s RBAC分配权限

根据需求选择集群级或命名空间级权限配置:

集群级权限(全集群生效)

先创建一个定义权限规则的ClusterRole:

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: cluster-pod-reader
rules:
- apiGroups: [""]
  resources: ["pods"]
  verbs: ["get", "list", "watch"]

然后创建ClusterRoleBinding,将上面的ClusterRole绑定到aws-auth中定义的K8s组:

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: cluster-pod-reader-binding
subjects:
- kind: Group
  name: k8s:dev-team  # 与aws-auth中的组名一致
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: ClusterRole
  name: cluster-pod-reader
  apiGroup: rbac.authorization.k8s.io

命名空间级权限(仅指定命名空间生效)

先在目标命名空间创建Role:

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: default
  name: ns-deployment-manager
rules:
- apiGroups: ["apps"]
  resources: ["deployments"]
  verbs: ["get", "list", "create", "update", "delete"]

再创建RoleBinding绑定到目标组:

apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  namespace: default
  name: ns-deployment-manager-binding
subjects:
- kind: Group
  name: k8s:dev-team
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: Role
  name: ns-deployment-manager
  apiGroup: rbac.authorization.k8s.io

权限验证

配置完成后,可用以下命令测试权限是否生效:

kubectl auth can-i get pods --as=k8s-user/your-custom-username
kubectl auth can-i create deployments -n default --as=k8s-user/your-custom-username

内容的提问来源于stack exchange,提问作者Jenia Be Nice Please

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 01:09:55