容器服务集群支持启用 IRSA (IAM Role for Service Account) 能力。基于 IRSA 功能,您可以在集群内实现 Pod 维度的 OpenAPI 权限隔离,从而实现云资源访问权限的细粒度隔离,降低安全风险。本文介绍如何在集群中使用 IRSA。
使用限制
- 目前仅托管版且已创建好的集群支持开启 IRSA 能力,创建集群时不支持开启。
- 集群中开启 IRSA 能力后不支持关闭。建议您先在测试集群中进行充分测试验证,再使用到生产集群中。
- 启用 IRSA 会导致 kube-apiserver 的短暂重启,请在业务低峰期操作。
- 仅支持在 Kubernetes v1.24 及以上版本集群中使用 IRSA 能力。
- 若需要为 VKE 集群中的 Pod 自动注入 IRSA 相关配置,则依赖 VKE 提供的 pod-identity-webhook 组件。
前提条件
请确保目标集群处于 运行中 状态。
操作步骤
步骤一:集群开启 IRSA 能力
- 在左侧导航栏中选择 集群,单击目标集群名称,进入集群管理页面。
- 在集群的 总览 页面 概览 页签,开启 IRSA OIDC。
-
- 集群开启 IRSA 能力后,控制台上显示 提供商 URL 和 提供商 TRN。请确认 提供商 TRN 信息中的身份提供商名称。
-
步骤二:(可选)安装 pod-identity-webhook 组件
需要为 Pod 自动注入 IRSA 配置时,安装 pod-identity-webhook 组件。
- 在 组件管理 页面的 安全 页签,找到 pod-identity-webhook 组件并在组件右上角选择 ... > 安装。
步骤三:新建 OIDC 身份提供商类型的 IAM 角色
集群开启 IRSA 能力后,您需要自行在 IAM 控制台配置信任身份为 OIDC 类型的身份提供商的 IAM 角色。
- 在左侧导航栏选择 角色管理,然后单击 新建角色。
-
- 参考 IAM 文档:角色管理 中的说明,结合您的实际情况自主配置。
- 参考 IAM 文档:角色管理 中的说明,结合您的实际情况自主配置。
步骤四:编辑角色信任关系
授权 VKE 集群(已开启 IRSA 的集群)内指定命名空间(NameSpace)下的服务账号(Service Account),允许扮演上述创建的 IAM 角色。
- 在 IAM 控制台 的 角色管理 页面,搜索 步骤三 中创建的角色名称。
-
说明
IAM 信任策略支持添加多个Statement。
步骤五:创建工作负载
本文以创建 Pod 的同时创建 步骤四 中配置的 NameSpace、Service Account 为例。
- 通过 kubectl 连接已开启了 IRSA 的集群。详细操作,请参见 连接集群。
- 创建对应的 NameSpace 和 Service Account 的 YAML 文件,示例文件demo-1.yaml的内容如下:
- 执行如下命令,创建 NameSpace 和 Service Account。
- 创建工作负载(以 Pod 为例)的 YAML 文件,示例文件demo-2.yaml的内容如下:
- 已安装 pod-identity-webhook 组件,为 Pod 自动注入 IRSA 配置时:
说明
- 您提交的业务 Pod 无需做任何调整,即可使用 IRSA 能力,由 pod-identity-webhook 组件自动为 Pod 注入相应配置。
- 未安装 pod-identity-webhook 组件,手动为 Pod 注入 IRSA 配置时:
完成工作负载创建后,可在 Pod 内调用安全令牌服务(Security Token Service,STS)的 AssumeRoleWithOIDC 接口,验证 Pod 是否能够使用注入的 OIDC Token 扮演指定的 IAM 角色并获取临时安全凭证。脚本示例如下:
预期结果如下,当返回结果中包含Result.Credentials字段(含AccessKeyId、SecretAccessKey、SessionToken)时,表示 Pod 已成功扮演 IAM 角色并获取临时安全凭证,IRSA 配置验证成功。