基于适用于服务账户的RAM角色(RAM Roles for Service Accounts,简称RRSA)功能,可以在集群内实现Pod维度的OpenAPI权限隔离。本文主要介绍RRSA功能的使用方法。
前提条件
RRSA功能目前只支持1.22及以上版本的集群(即ACK标准版、ACK Pro版、ASK标准版和ASK Pro版)。
背景信息
ECS实例元数据包含了ECS实例在阿里云系统中的信息,您可以在运行中的实例内查看实例元数据,并基于实例元数据配置或管理实例。基于这个特性,Kubernetes集群内应用也可以通过实例元数据来获取节点RAM角色策略所生成的STS临时凭证,然后通过该临时凭证访问云资源OpenAPI。更多信息,请参见ECS实例元数据概述。

ECS实例元数据无法满足多租场景下集群内应用Pod间的云资源访问权限隔离需求。对此,阿里云容器服务ACK联合RAM访问控制服务推出了适用于服务账户的RAM角色功能,旨在实现多租场景下集群内应用Pod间云资源访问权限的细粒度隔离。
阿里云容器服务ACK联合RAM访问控制服务一起推出了适用于服务账户的RAM角色功能。基于RRSA功能,您可以在集群内实现应用隔离的RAM角色功能。各个应用扮演独立的RAM角色并使用获取的临时凭证去访问云资源,以实现应用RAM权限最小化以及多租等场景下集群内应用Pod间云资源访问权限的细粒度隔离的需求。
关于ACK如何实现RRSA功能,请参见部署服务账户令牌卷投影和OIDC角色SSO概览。

- 用户提交使用了服务账户令牌卷投影功能的应用Pod。
- 集群将为该应用Pod创建和挂载相应的服务账户OIDC Token文件。
- Pod内程序使用挂载的OIDC Token文件访问STS服务的AssumeRoleWithOIDC接口获取扮演指定RAM角色的临时凭证(需要事先创建OIDC身份提供商以及修改RAM角色配置允许Pod使用的服务账户扮演该RAM角色)。更多信息,请参见AssumeRoleWithOIDC。
- Pod内程序使用获取到的临时凭证访问云资源OpenAPI。
启用RRSA功能
方式一:通过容器服务控制台开启
方式二:通过命令行工具ack-ram-tool开启
您也可以使用命令行工具ack-ram-tool来启用RRSA功能,更多信息,请参见ack-ram-tool。
当您为集群开启RRSA功能时,ACK将在后台执行如下操作:
- 自动创建一个集群专用的OIDC Issuer服务(这个服务托管在ACK侧,不需要您来运维)。更多信息,请参见OIDC Issuer。
- 为您的集群开启服务账户令牌卷投影功能(如果您的集群在之前已开启服务账户令牌卷投影功能,此操作将使用上一步创建的OIDC Issuer配置覆盖您之前设置的service-account-issuer参数的值)。更多信息,请参见部署服务账户令牌卷投影。
- 同时会在您的账号下创建一个使用该OIDC Issuer的RAM角色SSO身份提供商(名称为ack-rrsa-<cluster_id>,其中 <cluster_id>是您的集群ID)。更多信息,请参见管理OIDC身份提供商。
使用RRSA功能
集群开启RRSA功能后,按照以下步骤来赋予集群内应用通过RRSA功能获取访问云资源OpenAPI的临时凭证的能力。
支持使用RRSA OIDC Token认证的阿里云官方SDK
目前部分阿里云官方SDK已经内置了对于使用RRSA OIDC Token进行OpenAPI认证的支持,支持此功能的SDK版本信息如下:
编程语言 | 支持认证的SDK版本 | 使用示例 |
---|---|---|
Go | Alibaba Cloud Credentials for Go 1.2.2及以上版本 | GO SDK使用示例 |
Java | Alibaba Cloud Credentials for Java 0.2.8及以上版本 | Java SDK使用示例 |
Node.js和TypeScript | Alibaba Cloud Credentials for TypeScript/Node.js 2.2.1及以上版本 | Node.js和TypeScript使用示例 |