全部产品
Search
文档中心

应用身份服务:最佳实践:ACK 无静态凭据获取 STS Token

更新时间:Oct 22, 2026

面向部署在 ACK 集群中的应用,基于 ACK RRSA 注入的 OIDC Token 完成联邦认证并结合 PAM 授权,实现免静态凭据访问,自动换取指定 RAM 云角色的 STS 临时凭证。

原理介绍

部署在 ACK Pod 中的 M2M Client 应用调用 IDaaS SDK。SDK 从 ACK RRSA 注入的 Kubernetes ServiceAccount OIDC Token 完成该 M2M Client 应用的联邦认证;随后使用认证 Token 调用 PAM,获取目标云角色的 STS 临时凭证。应用无需保存 Client Secret 或长期 AccessKey。

使用前提

  • 已开通 IDaaS EIAM 的机器身份管理和特权管理能力。

  • 已具备 RAM 管理权限,并已确定目标 RAM 角色需要访问的最小权限。

  • 已创建 ACK 托管集群(版本 1.22 及以上)且具备 ACK 管理权限。

  • 业务 Pod 可访问 EIAM 实例的公网域名。

参考资料

配置步骤

步骤 1:在资产管理中添加云账号和系统云角色

进入 IDaaS EIAM 控制台的资产管理 > 云身份,添加目标阿里云账号。按照控制台引导完成身份提供商、系统云角色和检测项配置,确认云账号和系统云角色均处于“可用”状态。

步骤 2:添加最终获取 STS 的目标云角色

在已托管云账号的云角色管理中添加目标 RAM 角色。确认该云角色处于“启用”和“可用”状态;RAM 侧的角色信任策略按 IDaaS 控制台引导信任对应身份提供商,角色权限策略仅授予业务所需资源权限。

步骤 3:创建 M2M Client 并配置 ACK OIDC 联邦凭证

说明

已有 ACK联邦信任源时,可直接在创建应用联邦凭证的时候选用,不需要为每个 M2M Client 新建。

  1. 在左侧导航栏单击M2M应用管理。

  2. 单击添加应用,选择OIDC with M2M应用类型。

  3. 填写应用名称等基本信息,完成创建并记录 client_id。

3.1 启用 ACK RRSA 并为 Pod 注入 OIDC Token

  1. 在 ACK 集群详情的 基本信息 页签,进入 安全与审计,开启 RRSA OIDC,等待集群状态恢复为运行中。

  2. 在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择组件管理。

  3. 在组件管理页面,找到ack-pod-identity-webhook组件,单击组件右下方的立即安装。

  4. 创建或配置 RRSA RAM 角色:该角色信任集群的 OIDC 身份提供商,并将 oidc:sub 限制为 system:serviceaccount:<namespace>:<serviceaccount>。该角色仅用于触发 RRSA 注入,不替代 PAM 中的目标云角色。

  5. 为业务 namespace 添加标签 pod-identity.alibabacloud.com/injection: 'on';在业务 ServiceAccount 上添加注解 pod-identity.alibabacloud.com/role-name: <rrsa-ram-role-name>。

  6. 部署业务 Pod 后,执行 kubectl -n <namespace> get pod <pod-name> -o yaml,确认已注入 ALIBABA_CLOUD_OIDC_TOKEN_FILE 环境变量和 rrsa-oidc-token 挂载。

详细操作请参考通过RRSA配置ServiceAccount的RAM权限实现Pod权限隔离。

3.2 创建或选择 ACK OIDC 联邦信任源

  1. 进入 登录 > 认证配置 > 联邦信任源管理,新增 OIDC 类型的联邦信任源。

  2. 单击新增联邦信任源,选择 OIDC 选项。

  3. 填写配置参数:

    1. 联邦信任源名称:本文档设置为aliyun_ack。

    2. 网络端点:本文档中选择共享端点。IDaaS 将使用网络端点地址访问“Issuer”地址,按照 OIDC 协议获取公钥。

    3. 信任来源:本文档中选择Issuer地址解析。

    4. Issuer:身份提供方标识。从 ACK 集群信息中获取“提供商 URL”后填入。

    5. 受众标识:sts.aliyuncs.com(ACK 固定值)。

    6. 信任条件:使用条件表达式对 ACK 做进一步认证。可选,本文档中不使用。如有需要,可参考联邦凭证表达式的使用进行填写。

  4. 完成配置。

3.3 为 M2M Client 创建 OIDC 应用联邦凭证

  1. 导航至应用管理 > M2M应用管理。

  2. 找到 M2M Client 应用,单击管理。

  3. 在通用配置 > 认证管理中选择 OIDC 认证类型。

  4. 单击新增联邦凭证,填写配置:

    1. 联邦信任源:选择aliyun_ack。

    2. 联邦凭证名称:本文档设置为 ack-oidc-credential。应用在获取 M2M Token 时需要传入该名称;必须与 client-config.json 的 applicationFederatedCredentialName 完全一致。

    3. 校验条件模式:选择kubernetes模式。

    4. 命名空间:容器 Pod 部署的命名空间。本文档中使用default。Kubernetes 中默认命名空间为default,可以根据实际情况填写。

    5. 服务账号:部署应用的容器 Pod 使用的服务账号(ServiceAccount)。本例中使用default。Kubernetes 中默认服务账号为 default,可以根据容器 Pod 实际情况填写。

  5. 完成配置。

步骤 4:授予 PAM 功能权限

  1. 在左侧导航栏单击权限中心,再选择功能权限管理。

  2. 在功能权限管理页面搜索 Privileged Access Management 应用,单击授权管理。

  3. 选择应用授权;在被授权应用中选择步骤 3 创建的 M2M Client,在选择权限中搜索并授予“获取云角色访问凭证(cloud_account_role:obtain_access_credential)”。

步骤 5:授予云角色数据权限

  1. 在左侧导航栏单击权限中心,再选择数据权限管理。

  2. 添加授权规则,填写授权规则基础信息后完成创建。

  3. 选择刚创建的授权规则,单击权限管理。

  4. 在关联身份页签选择应用,选择步骤 3 创建的 M2M Client。

  5. 在资产管理页签选择云角色,单击添加资产,选择步骤 2 中最终获取 STS Token 的目标云角色。

步骤 6:下载并引入 IDaaS SDK

  1. 在 GitHub 上获取最新版 IDaaS SDK;当前支持 Java 和 Python。

  2. 按 SDK README 完成依赖配置。

步骤 7:录入 SDK 配置文件

  1. 创建 client-config.json,默认可放在 ~/.cloud_idaas/client-config.json。

  2. 在 GitHub 上找到 IDaaS Core SDK。

  3. 在对应的SDK Github 中,查看对应README.md 或 README_zh.md文件,在文件中找到OIDC client-config.json 示例,复制示例配置到刚创建的client-config.json中;示例如下:

{
  "idaasInstanceId": "idaas_xxx",
  "clientId": "app_xxx",
  "issuer": "https://xxx/api/v2/iauths_system/oauth2",
  "tokenEndpoint": "https://xxx/api/v2/iauths_system/oauth2/token",
  "scope": "urn:cloud:idaas:pam|cloud_account_role:obtain_access_credential",
  "openApiEndpoint": "eiam.[region_id].aliyuncs.com",
  "developerApiEndpoint": "eiam-developerapi.[region_id].aliyuncs.com",
  "authnConfiguration": {
    "identityType": "CLIENT",
    "authnMethod": "OIDC",
    "applicationFederatedCredentialName": "ack-oidc-credential",
    "clientDeployEnvironment": "KUBERNETES",
    "oidcTokenFilePathEnvVarName": "ALIBABA_CLOUD_OIDC_TOKEN_FILE"
  },
  "httpConfiguration": {
    "connectTimeout": 5000,
    "readTimeout": 10000
  }
}

配置项

值

说明

idaasInstanceId

idaas_xxx

对应 IDaaS 实例 ID。

clientId

app_xxx

步骤 3 创建的 M2M Client 的 client_id。

issuer

https://xxx/api/v2/iauths_system/oauth2

将 xxx 替换为 IDaaS 用户门户地址。

tokenEndpoint

https://xxx/api/v2/iauths_system/oauth2/token

IDaaS Token 端点。

scope

固定值,见上方 JSON 配置。

PAM 获取云角色访问凭证的 scope。

openApiEndpoint

eiam.[region_id].aliyuncs.com

可选;region_id 为 IDaaS 实例地域,例如 cn-hangzhou。

developerApiEndpoint

eiam-developerapi.[region_id].aliyuncs.com

必填;region_id 为 IDaaS 实例地域,例如 cn-hangzhou。

authnConfiguration

└identityType

CLIENT

固定值。

└authnMethod

OIDC

固定值;使用 OIDC 联邦认证。

└applicationFederatedCredentialName

ack-oidc-credential

步骤 3.3 创建的应用联邦凭证名称。

└clientDeployEnvironment

KUBERNETES

固定值;表示应用部署在 Kubernetes Pod 中。

└oidcTokenFilePathEnvVarName

ALIBABA_CLOUD_OIDC_TOKEN_FILE

固定值;SDK 从该环境变量指定的实际 Token 文件路径读取 OIDC Token。

httpConfiguration

└connectTimeout

5000

建立连接的最长等待时间,单位:毫秒。

└readTimeout

10000

连接建立后等待服务端响应的最长时间,单位:毫秒。

步骤 8:代码接入

按 SDK 快速开始完成以下操作:

  1. 初始化 IDaaS Core SDK。

  2. 传入目标云角色 ARN,创建阿里云凭证提供器。

  3. 获取 STS 临时凭证。

    public static void main(String[] args) {
        // 1. 初始化 IDaaS Core SDK
        IDaaSCredentialProviderFactory.init();
        // 2. 创建阿里云凭证提供器
        AlibabaCloudCredentialsProvider credentialsProvider =
                IDaaSPamAklessCredentialFactory.getAlibabaCloudCredentialsProvider(
                        "acs:ram::123456789:role/your-role-name"
                );
        // 3. 获取凭证
        CredentialModel credentials = credentialsProvider.getCredentials();
        System.out.println(credentials.getAccessKeyId());
        System.out.println(credentials.getAccessKeySecret());
        System.out.println(credentials.getSecurityToken());
    }

验证顺序

  1. 确认 RRSA 已向业务 Pod 注入 ALIBABA_CLOUD_OIDC_TOKEN_FILE 和 rrsa-oidc-token 挂载。

  2. 将步骤 7 的配置文件放在默认路径 ~/.cloud_idaas/client-config.json。

  3. 部署使用步骤 3.3 中 namespace 和 ServiceAccount 的业务 Pod。

  4. 在 Pod 中运行应用,确认可以获取 STS 临时凭证。

  5. 使用临时凭证调用已被目标云角色权限策略允许的云产品 API。