全部产品
Search
文档中心

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

更新时间:Oct 22, 2026

面向部署在 ECS 上的应用,基于 ECS 元数据的 PKCS#7 联邦认证与 PAM 授权实现免静态凭据访问,自动换取指定 RAM 云角色的 STS 临时凭证。

原理介绍

部署在 ECS 上的 M2M Client 应用调用 IDaaS SDK。SDK 自动从 ECS 元数据服务获取 PKCS#7 证明材料,完成该 M2M Client 应用的联邦认证;随后使用认证 Token 调用 PAM,获取目标云角色的 STS 临时凭证。应用无需保存 Client Secret 或长期 AccessKey。

使用前提

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

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

  • 具备 ECS 实例及相关配置的管理权限,且 ECS 实例可访问 EIAM 实例的公网域名。

参考资料

配置步骤

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

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

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

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

步骤 3:创建 M2M Client 并配置 PKCS#7 联邦凭证

说明

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

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

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

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

  4. 进入登录 > 认证配置 > 联邦信任源管理。如果已存在与当前阿里云账号匹配的 PKCS#7 联邦信任源,可直接选择使用,无需为每个 M2M Client 新建;仅在不存在可用联邦信任源时,按下表新增。

配置项

值

联邦信任源类型

PKCS#7

信任来源

阿里云

签名有效期

按控制台默认值配置。

填写验签证书

选择信任来源后,单击获取云厂商证书。

云账户 ID

部署 ECS 的阿里云账号 ID。

  1. 打开 M2M Client 的通用配置 > 认证管理,选择 PKCS#7 并新增应用联邦凭证。

配置项

值

联邦信任源

选择上一步创建或已有的 PKCS#7 联邦信任源。

联邦凭证名称

自定义,例如 ecs-pkcs7-credential。

校验条件模式

指定云服务器实例模式。

云服务器实例 ID

运行应用的 ECS 实例 ID。

说明

记录联邦凭证名称;该名称创建后不可修改,且必须与步骤 7 中 applicationFederatedCredentialName 的值完全一致。

步骤 4:授予 PAM 功能权限

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

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

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

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

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

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

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

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

  5. 在资产管理页签选择云角色,单击添加资产,选择最终获取 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文件,在文件中找到PKCS#7 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": "PKCS7",
    "applicationFederatedCredentialName": "ecs-pkcs7-credential",
    "clientDeployEnvironment": "ALIBABA_CLOUD_ECS"
  },
  "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 用户门户地址,可在IDaaS实例列表页面查看;

tokenEndpoint

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

scope

固定值,见上方 JSON 配置。

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

openApiEndpoint

eiam.[region_id].aliyuncs.com

region_id换成IDaaS实例对应的地域ID。例如:cn-hangzhou

developerApiEndpoint

eiam-developerapi.[region_id].aliyuncs.com

authnConfiguration

└identityType

CLIENT

固定值。

└authnMethod

PKCS7

固定值;使用 PKCS#7 联邦认证。

└applicationFederatedCredentialName

ecs-pkcs7-credential

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

└clientDeployEnvironment

ALIBABA_CLOUD_ECS

固定值;SDK 据此从 ECS 元数据服务获取 PKCS#7 证明材料。

httpConfiguration

└connectTimeout

5000

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

└readTimeout

10000

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

步骤 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. 将步骤 7 的配置文件放在默认路径 ~/.cloud_idaas/client-config.json。

  2. 在步骤 3 指定的 ECS 实例中运行应用。

  3. 确认输出 AccessKeyId、AccessKeySecret、SecurityToken 和 Expiration。

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