帮助改进此页面
要帮助改进本用户指南,请选择位于每个页面右侧窗格中的在 GitHub 上编辑此页面链接。
配置 ACK 权限
ACK 需要 IAM 权限才能代表您创建和管理 Amazon 资源。本主题将介绍 IAM 如何与 ACK 结合使用,并提供有关为不同使用案例配置权限的指导。
IAM 如何与 ACK 结合使用
ACK 使用 IAM 角色向 Amazon 进行身份验证并对资源执行操作。向 ACK 提供权限有两种方式:
功能角色:您在创建 ACK 功能时提供的 IAM 角色。默认情况下,所有 ACK 操作都使用此角色。
IAM 角色选择器:可映射到特定命名空间或资源的其他 IAM 角色。这些角色会覆盖其作用域内资源的功能角色。
当 ACK 需要创建或管理资源时,它会决定使用哪个 IAM 角色:
-
检查 IAMRoleSelector 是否与资源所在的命名空间相匹配
-
如果找到匹配项,则代入该 IAM 角色
-
否则,请使用功能角色
这种方式可以实现灵活的权限管理,从简单的单角色设置到复杂的多账户、多团队配置均适用。
入门:简单权限设置
适用于开发、测试或简单使用案例,您可以将所有必要的服务权限直接添加到功能角色。
此方式适用于以下情况:
-
您刚开始使用 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 文档
后续步骤
-
ACK 概念:了解 ACK 概念和资源生命周期
-
ACK 概念:了解资源接管和删除策略
-
EKS 功能的安全注意事项:了解针对功能的安全最佳实践