配置 ACK 权限 - Amazon EKS
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

帮助改进此页面

要帮助改进本用户指南,请选择位于每个页面右侧窗格中的在 GitHub 上编辑此页面链接。

配置 ACK 权限

ACK 需要 IAM 权限才能代表您创建和管理 Amazon 资源。本主题将介绍 IAM 如何与 ACK 结合使用,并提供有关为不同使用案例配置权限的指导。

IAM 如何与 ACK 结合使用

ACK 使用 IAM 角色向 Amazon 进行身份验证并对资源执行操作。向 ACK 提供权限有两种方式:

功能角色:您在创建 ACK 功能时提供的 IAM 角色。默认情况下,所有 ACK 操作都使用此角色。

IAM 角色选择器:可映射到特定命名空间或资源的其他 IAM 角色。这些角色会覆盖其作用域内资源的功能角色。

当 ACK 需要创建或管理资源时,它会决定使用哪个 IAM 角色:

  1. 检查 IAMRoleSelector 是否与资源所在的命名空间相匹配

  2. 如果找到匹配项,则代入该 IAM 角色

  3. 否则,请使用功能角色

这种方式可以实现灵活的权限管理,从简单的单角色设置到复杂的多账户、多团队配置均适用。

入门:简单权限设置

适用于开发、测试或简单使用案例,您可以将所有必要的服务权限直接添加到功能角色。

此方式适用于以下情况:

  • 您刚开始使用 ACK

  • 所有资源都在同一 Amazon 账户中

  • 由单个团队管理所有 ACK 资源

  • 您信任所有 ACK 用户拥有相同的权限

生产最佳实践:IAM 角色选择器

对于生产环境,请使用 IAM 角色选择器来实现最低权限访问和命名空间级隔离。

使用 IAM 角色选择器时,功能角色只需要 sts:AssumeRole 权限即可代入服务特定角色。您无需向功能角色本身添加任何 Amazon 服务权限(如 S3 或 RDS),系统会向功能角色所代入的各个 IAM 角色授予这些权限。

选择权限模式

在以下情况下,使用直接权限(将服务权限添加到功能角色):

  • 您刚开始使用并希望最简单的设置

  • 所有资源与集群位于同一账户

  • 您有集群范围的管理权限要求

  • 所有团队都可以共享相同的权限

在以下情况下,使用 IAM 角色选择器

  • 跨多个 Amazon 账户管理资源

  • 不同的团队或命名空间需要不同的权限

  • 您需要按命名空间进行精细访问控制

  • 您希望遵循最低权限安全实践

您可以从直接权限开始,随着需求的增长,再迁移到 IAM 角色选择器。

为什么要在生产环境中使用 IAM 角色选择器:

  • 最低权限:每个命名空间仅获得其所需的权限

  • 团队隔离:团队 A 不会意外使用团队 B 的权限

  • 更易审计:清晰映射哪个命名空间使用哪个角色

  • 跨账户支持:在多个账户中管理资源所必需的功能

  • 关注点分离:不同的服务或环境使用不同的角色

基本 IAM 角色选择器设置

步骤 1:创建服务特定的 IAM 角色

创建具有特定 Amazon 服务权限的 IAM 角色:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:*" ], "Resource": "*" } ] }

配置信任策略,以允许功能角色代入该策略:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/ACKCapabilityRole" }, "Action": "sts:AssumeRole" } ] }

步骤 2:向功能角色授予 AssumeRole 权限

向功能角色添加代入该服务特定角色的权限:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "arn:aws:iam::111122223333:role/ACK-S3-Role" } ] }

步骤 3:创建 IAMRoleSelector

将 IAM 角色映射到命名空间:

apiVersion: services.k8s.aws/v1alpha1 kind: IAMRoleSelector metadata: name: s3-namespace-config spec: arn: arn:aws:iam::111122223333:role/ACK-S3-Role namespaceSelector: names: - s3-resources

步骤 4:在映射的命名空间中创建资源

s3-resources 命名空间中的资源会自动使用指定的角色:

apiVersion: s3.services.k8s.aws/v1alpha1 kind: Bucket metadata: name: my-bucket namespace: s3-resources spec: name: my-production-bucket

多账户管理

使用 IAM 角色选择器跨多个 Amazon 账户管理资源。

步骤 1:创建跨账户 IAM 角色

在目标账户(444455556666)中,创建一个信任源账户功能角色的角色:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/ACKCapabilityRole" }, "Action": "sts:AssumeRole" } ] }

将服务特定权限附加到此角色。

步骤 2:授予 AssumeRole 权限

在源账户(111122223333)中,允许功能角色代入目标账户角色:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "arn:aws:iam::444455556666:role/ACKTargetAccountRole" } ] }

步骤 3:创建 IAMRoleSelector

将跨账户角色映射到命名空间:

apiVersion: services.k8s.aws/v1alpha1 kind: IAMRoleSelector metadata: name: production-account-config spec: arn: arn:aws:iam::444455556666:role/ACKTargetAccountRole namespaceSelector: names: - production

步骤 4:创建资源

production 命名空间中的资源将在目标账户中创建:

apiVersion: s3.services.k8s.aws/v1alpha1 kind: Bucket metadata: name: my-bucket namespace: production spec: name: my-cross-account-bucket

高级 IAM 角色选择器模式

有关高级配置,例如标签选择器、资源特定角色映射及其他示例,请参阅 ACK IRSA 文档

后续步骤