面向部署在 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 新建。
在左侧导航栏单击M2M应用管理。
单击添加应用,选择OIDC with M2M应用类型。
填写应用名称等基本信息,完成创建并记录
client_id。进入登录 > 认证配置 > 联邦信任源管理。如果已存在与当前阿里云账号匹配的 PKCS#7 联邦信任源,可直接选择使用,无需为每个 M2M Client 新建;仅在不存在可用联邦信任源时,按下表新增。
配置项 | 值 |
联邦信任源类型 | PKCS#7 |
信任来源 | 阿里云 |
签名有效期 | 按控制台默认值配置。 |
填写验签证书 | 选择信任来源后,单击获取云厂商证书。 |
云账户 ID | 部署 ECS 的阿里云账号 ID。 |
打开 M2M Client 的通用配置 > 认证管理,选择 PKCS#7 并新增应用联邦凭证。
配置项 | 值 |
联邦信任源 | 选择上一步创建或已有的 PKCS#7 联邦信任源。 |
联邦凭证名称 | 自定义,例如 |
校验条件模式 | 指定云服务器实例模式。 |
云服务器实例 ID | 运行应用的 ECS 实例 ID。 |
记录联邦凭证名称;该名称创建后不可修改,且必须与步骤 7 中 applicationFederatedCredentialName 的值完全一致。
步骤 4:授予 PAM 功能权限
在左侧导航栏单击权限中心,再选择功能权限管理。
在功能权限管理页面搜索
Privileged Access Management应用,单击授权管理。选择应用授权;在被授权应用中选择刚创建的 M2M Client,在选择权限中搜索并授予“获取云角色访问凭证(
cloud_account_role:obtain_access_credential)”。
步骤 5:授予云角色数据权限
在左侧导航栏单击权限中心,再选择数据权限管理。
添加授权规则,填写授权规则基础信息后完成创建。
选择刚创建的授权规则,单击权限管理。
在关联身份页签选择应用,选择刚创建的 M2M Client。
在资产管理页签选择云角色,单击添加资产,选择最终获取 STS Token 的目标云角色。
步骤 6:下载并引入 IDaaS SDK
在 GitHub 上获取最新版 IDaaS SDK;当前支持 Java 和 Python。
按 SDK README 完成依赖配置。
步骤 7:录入 SDK 配置文件
创建
client-config.json,默认可放在~/.cloud_idaas/client-config.json。在 GitHub 上找到
IDaaS Core SDK。在对应的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
}
}配置项 | 值 | 说明 |
|
| 对应 IDaaS 实例 ID。 |
|
| 步骤 3 创建的 M2M Client 的 |
|
| xxx换成IDaaS 用户门户地址,可在IDaaS实例列表页面查看; |
|
| |
| 固定值,见上方 JSON 配置。 | PAM 获取云角色访问凭证的 scope。 |
|
| region_id换成IDaaS实例对应的地域ID。例如:cn-hangzhou |
|
| |
| ||
└ |
| 固定值。 |
└ |
| 固定值;使用 PKCS#7 联邦认证。 |
└ |
| 步骤 3 创建的应用联邦凭证名称。 |
└ |
| 固定值;SDK 据此从 ECS 元数据服务获取 PKCS#7 证明材料。 |
| ||
└ | 5000 | 建立连接的最长等待时间,单位:毫秒(ms) |
└ | 10000 | 连接建立后等待服务端响应的最长时间,单位:毫秒(ms) |
步骤 8:代码接入
按 SDK 快速开始完成以下操作:
初始化 IDaaS Core SDK。
传入目标云角色 ARN,创建阿里云凭证提供器。
获取 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());
}验证顺序
将步骤 7 的配置文件放在默认路径
~/.cloud_idaas/client-config.json。在步骤 3 指定的 ECS 实例中运行应用。
确认输出
AccessKeyId、AccessKeySecret、SecurityToken和Expiration。使用临时凭证调用已被目标云角色权限策略允许的云产品 API。