获取STS Token
本文为您介绍通过 Agent Identity 获取 STS Token 以访问阿里云服务(如 ECS、OSS、VPC 等)的认证流程和代码配置方式。
工作流程
完成入站认证。Agent 通过 Agent Identity SDK 调用 Agent Identity 服务的
GetWorkloadAccessToken*系列接口获取 Workload Access Token。常见的入站认证方式是使用外部身份提供商签发的 JWT Token。获取 STS Token。Agent Identity SDK 使用获取的 Workload Access Token,调用 Agent Identity 服务的
AssumeRoleForWorkloadIdentity接口进行角色扮演,获取临时安全令牌 STS Token(包含 AccessKeyId、AccessKeySecret 和 SecurityToken)。访问阿里云资源。Agent 使用获取的 STS Token 调用阿里云 OpenAPI,以 Workload Identity 关联的运行时 RAM 角色身份安全地访问 ECS、OSS、VPC 等阿里云服务。
前提条件
在调用 Agent Identity 获取 STS Token 前,需要完成 Workload Identity 的创建及其运行时 RAM 角色的授权配置:
通过 Agent Identity 控制台或 Agent Identity CLI 创建 Workload Identity。使用 CLI 创建时会自动生成同名的运行时 RAM 角色(命名格式为
agentidentityrole-${workloadIdentityName})。在 RAM 控制台为该运行时 RAM 角色授予访问目标阿里云服务所需的权限策略(例如访问 VPC 时授予
AliyunVPCFullAccess系统策略)。
使用方式
完成上述前置配置后,即可在 Agent 中使用 Agent Identity SDK 获取 STS Token。在需要使用 STS Token 调用阿里云 OpenAPI 的函数前,添加@requires_sts_token注解。Agent Identity SDK 会自动完成入站认证、获取 Workload Access Token,并以此请求 STS Token,最终将 STS Token 注入到目标函数的指定参数中。
以下示例代码(Python)演示了在 Agent 中使用 STS Token 调用阿里云 VPC OpenAPI 创建 VPC:
from typing import Optional
from agent_identity_python_sdk.core.decorators import get_region, requires_sts_token
from agent_identity_python_sdk.model import STSCredential
from alibabacloud_vpc20160428.client import Client as Vpc20160428Client
from alibabacloud_tea_openapi import models as open_api_models
from alibabacloud_vpc20160428 import models as vpc_20160428_models
@requires_sts_token(
inject_param_name="sts_credential"
)
def create_vpc(
name: str,
region_id: str,
cidr_block: str,
sts_credential: Optional[STSCredential] = None,
):
# Initialize Alibaba Cloud OpenAPI client by using STS credential
config = open_api_models.Config(
access_key_id=sts_credential.access_key_id,
access_key_secret=sts_credential.access_key_secret,
security_token=sts_credential.security_token,
)
config.endpoint = f'vpc.{region_id}.aliyuncs.com'
client = Vpc20160428Client(config)
# Call OpenAPI to create VPC
request = vpc_20160428_models.CreateVpcRequest(
region_id=region_id,
cidr_block=cidr_block,
vpc_name=name,
description='This is a test VPC.'
)
response = client.create_vpc(request)更多内容,请参考获取STS Token示例。
常见问题
如何区分STS Token是否为Agent Identity颁发?
与普通由阿里云 STS 服务颁发的 STS Token(例如 RAM 用户调用 AssumeRole 接口获取的 STS Token)不同,Agent Identity 颁发的 STS Token 会携带调用方 Agent 的身份信息(如 Workload Identity 与入站认证用户身份)用于权限控制及操作审计。
当 Agent 使用 Agent Identity 颁发的 STS Token 调用阿里云 OpenAPI(例如创建 VPC)时,操作审计事件的 userIdentity 字段会包含 externalIdentityContext,记录 Workload Identity ARN、入站用户身份等信息。例如:
{
...
"userIdentity": {
"type": "assumed-role",
...
"sessionContext": {
"externalIdentityContext": {
"agentidentityWorkloadIdentityArn": "acs:agentidentity:cn-beijing:<account_id>:workloadidentitydirectory/default/workloadidentity/<workload-identity-name>",
"agentidentityInboundJwtClaimIss": "https://<oauth.yourcompany.com>",
"agentidentityInboundJwtClaimSub": "iiCsOvhjNZX/hK0x1jl9****"
}
}
}
...
"eventName": "CreateVpc"
}