帮助改进此页面
要帮助改进本用户指南,请选择位于每个页面右侧窗格中的在 GitHub 上编辑此页面链接。
Amazon EKS 功能 IAM 角色
EKS 功能需要配置功能 IAM 角色(或功能角色)。EKS 功能使用此角色对 Amazon 服务执行操作,并通过自动创建的访问条目访问集群中的 Kubernetes 资源。
在功能创建期间指定功能角色之前,您必须创建具有相应信任策略和相应功能类型的权限的 IAM 角色。创建此 IAM 角色后,可以将其重用于任意数量的功能资源。
功能角色要求
功能角色必须满足以下要求:
-
该角色必须与集群和功能资源位于同一 Amazon 账户中
-
该角色必须拥有信任策略,以允许 EKS 功能服务代入该角色
-
该角色必须拥有与功能类型和使用案例要求相适应的权限(请参阅按功能类型划分的权限)
功能角色的信任策略
所有功能角色必须包含以下信任策略:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "capabilities.eks.amazonaws.com" }, "Action": [ "sts:AssumeRole", "sts:TagSession" ] } ] }
此信任策略允许 EKS 执行以下操作:
-
担任该角色,以执行 Amazon API 操作
-
标记会话以进行审计和跟踪
按功能类型划分的权限
所需的 IAM 权限取决于您使用的功能和部署模式。
注意
对于搭配使用 IAM 角色选择器与 ACK 的生产部署,或者在没有 Amazon 服务集成的情况下使用 kro 或 Argo CD 时,功能角色可能不需要信任策略之外的任何 IAM 权限。
- kro(Kube Resource Orchestrator)
-
不需要 IAM 权限。您可以创建没有附加策略的功能角色。kro 只需要 Kubernetes RBAC 权限即可创建和管理 Kubernetes 资源。
- Amazon Controllers for Kubernetes(ACK)
-
ACK 支持两种权限模型:
-
简单设置(开发/测试):直接向功能角色添加 Amazon 服务权限。这非常适合入门级的单账户部署或所有用户都需要相同权限的情况。
-
生产最佳实践:使用 IAM 角色选择器,实施最低权限访问。使用这种方法,功能角色只需要获得
sts:AssumeRole权限即可代入服务特定角色。您无需向功能角色本身添加 Amazon 服务权限(如 S3 或 RDS),系统会将这些权限授予映射到特定命名空间的各个 IAM 角色。IAM 角色选择器可启用以下功能:
-
命名空间级别权限隔离
-
跨账户资源管理
-
团队特定 IAM 角色
-
最低权限安全模型
IAM 角色选择器方法的功能角色策略示例:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": [ "arn:aws:iam::111122223333:role/ACK-S3-Role", "arn:aws:iam::111122223333:role/ACK-RDS-Role", "arn:aws:iam::444455556666:role/ACKCrossAccountRole" ] } ] }有关包括 IAM 角色选择器在内的 ACK 权限配置的详细信息,请参阅配置 ACK 权限。
-
-
- Argo CD
-
默认情况下,不需要 IAM 权限。以下功能可能需要可选权限:
-
Amazon Secrets Manager:如果使用 Secrets Manager 来存储 Git 存储库凭证
-
Amazon CodeConnections:如果使用 CodeConnections 进行 Git 存储库身份验证
Secrets Manager 和 CodeConnections 策略示例:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "secretsmanager:GetSecretValue", "secretsmanager:DescribeSecret" ], "Resource": "arn:aws:secretsmanager:region:account-id:secret:argocd/*" }, { "Effect": "Allow", "Action": [ "codeconnections:UseConnection", "codeconnections:GetConnection" ], "Resource": "arn:aws:codeconnections:region:account-id:connection/*" } ] }有关 Argo CD 权限要求的详细信息,请参阅 Argo CD 注意事项。
-
检查现有功能角色
您可使用以下过程来检查账户是否已具有适合您使用案例的功能 IAM 角色。
-
通过 https://console.aws.amazon.com/iam/
打开 IAM 控制台。 -
在左侧导航窗格中,选择 角色。
-
在角色列表中搜索功能角色名称(例如,
ACKCapabilityRole或ArgoCDCapabilityRole)。 -
如果存在角色,请选择该角色,查看附加策略和信任关系。
-
选择 Trust relationships(信任关系),然后选择 Edit trust policy(编辑信任策略)。
-
验证信任关系是否与功能信任策略相匹配。如果不匹配,请更新信任策略。
-
选择权限并验证该角色是否具有适用于您的功能类型和使用案例的权限。
创建功能 IAM 角色
要创建功能角色,您可以使用 Amazon Web Services 管理控制台 或 Amazon CLI。
- Amazon Web Services 管理控制台
-
-
通过 https://console.aws.amazon.com/iam/
打开 IAM 控制台。 -
选择 Roles,然后选择 Create role。
-
对于可信实体类型,选择自定义信任策略。
-
将功能信任策略复制并粘贴到信任策略编辑器中。
-
选择下一步。
-
在添加权限选项卡上,选择或创建适合您的功能类型的策略(请参阅按功能类型划分的权限)。对于 kro,您可以跳过此步骤。
-
选择下一步。
-
对于角色名称,请为角色输入唯一名称,例如
ACKCapabilityRole、ArgoCDCapabilityRole或kroCapabilityRole。 -
对于 Description(说明),请输入描述性文本,例如
Amazon EKS - ACK capability role。 -
选择创建角色。
-
- AmazonCLI
-
-
将功能信任策略复制到名为
capability-trust-policy.json的文件中。 -
创建角色。将
ACKCapabilityRole替换为您所需的角色名称。aws iam create-role \ --role-name ACKCapabilityRole \ --assume-role-policy-document file://capability-trust-policy.json -
将所需的 IAM 策略附加到角色。对于 ACK,请为要管理的 Amazon 服务附加策略。对于 Argo CD,请根据需要为 Secrets Manager 或 CodeConnections 附加策略。对于 kro,您可以跳过此步骤。
具有 S3 权限的 ACK 示例:
aws iam put-role-policy \ --role-name ACKCapabilityRole \ --policy-name S3Management \ --policy-document file://s3-policy.json
-
对功能角色问题进行问题排查
- 功能创建失败,并显示“IAM 角色无效”
-
验证:
-
该角色与集群位于同一账户中
-
信任策略与功能信任策略相匹配
-
您拥有该角色的
iam:PassRole权限
-
- 功能显示权限错误
-
验证:
-
该角色具有此功能类型所需的 IAM 权限
-
该角色的访问条目存在于集群上
-
如有需要,还可配置其他 Kubernetes 权限(请参阅其他 Kubernetes 权限)
-
- ACK 资源失败并出现“权限被拒绝”错误
-
验证:
-
此角色具有您的使用案例所需的 IAM 权限
-
对于引用密钥的 ACK 控制器,请确保已将范围限定为相应命名空间的
AmazonEKSSecretReaderPolicy访问条目策略进行了关联。
-
有关更多问题排查指导,请参阅EKS 功能的安全注意事项。