了解令牌声明
当您调用 GetWebIdentityToken API 时,AWS Security Token Service 会返回一个已签名的 JSON Web 令牌(JWT),其中包含一组代表 IAM 主体身份的声明。这些令牌均符合 RFC 7519
JWT 包含标准 OpenID Connect(OIDC)声明,例如主题(“sub”)、受众(“aud”)、发布者(“iss”),以便于实现不同外部服务之间的互操作性。在适用的情况下,AWS STS 会使用 AWS 身份特定的声明(如 AWS 账户 ID 和主体标签)和会话上下文声明(如 EC2 实例 ARN)填充令牌。您还可以通过将自定义声明作为请求标签传递给 GetWebIdentityToken API 将其添加到令牌。AWS 身份特定的声明、会话上下文声明和自定义声明嵌套在令牌中的“https://sts.amazonaws.com/”命名空间下。
有关令牌中包含的声明列表,请参阅下面的示例令牌。请注意,所有这些声明可能不会同时出现在令牌中。
{ "iss": "https://abc123-def456-ghi789-jkl012.tokens.sts.global.api.aws", "aud": "https://api.example.com", "sub": "arn:aws:iam::123456789012:role/DataProcessingRole", "iat": 1700000000, "exp": 1700000900, "jti": "xyz123-def456-ghi789-jkl012", "https://sts.amazonaws.com/": { "aws_account": "123456789012", "source_region": "us-east-1", "org_id": "o-abc1234567", "ou_path": "o-a1b2c3d4e5/r-ab12/ou-ab12-11111111/ou-ab12-22222222/", "principal_tags": { "environment": "production", "team": "data-engineering", "cost-center": "engineering" }, "lambda_source_function_arn": "arn:aws:lambda:us-east-1:123456789012:function:process-data", "request_tags": { "job-id": "job-2024-001", "priority": "high", "data-classification": "sensitive" } } }
标准声明
令牌中存在的标准 OIDC 声明有助于实现与各种外部服务的互操作性。这些声明可以使用大多数 JWT 库进行验证。
| 声明 | 名称 | 描述 | 示例值 |
|---|---|---|---|
| iss | Issuer | 账户特定的发布者 URL。外部服务会验证此声明,以确保其匹配可信发布者。 | https://abc123-def456-ghi789-jkl012.tokens.sts.global.api.aws |
| aud | 受众 | GetWebIdentityToken 请求中指定的令牌的预期接收者。 | https://api.example.com |
| sub | 主题 | 请求令牌的 IAM 主体的 ARN。 | arn:aws:iam::123456789012:role/DataProcessingRole |
| iat | 发布时间 | 标识 JWT 发布时间的 NumericDate 值。 | 1700000000 |
| EXP | 过期 | 标识过期时间的 NumericDate 值,在该时间或之后不得接受 JWT 进行处理。 | 1700000900 |
| jti | JWT ID | 此令牌实例的唯一标识符。 | xyz123-def456-ghi789-jkl012 |
自定义声明
除了标准 OIDC 声明外,AWS STS 还会添加关于身份和会话上下文的声明(如果适用)。您还可以通过将自有声明作为请求标签传递来将其添加到令牌。自定义声明嵌套在 https://sts.amazonaws.com/ 命名空间下。
AWS 身份声明
这些声明提供有关您的 AWS 账户、组织结构和 IAM 主体的详细信息。
| 声明 | 说明 | 条件键映射 | 示例值 |
|---|---|---|---|
| aws_account | 您的 AWS 账户 ID | aws:PrincipalAccount | 123456789012 |
| source_region | 请求令牌的 AWS 区域 | aws:RequestedRegion | us-east-1 |
| org_id | 您的 AWS Organizations ID(如果您的账户是组织的成员) | aws:PrincipalOrgID | o-abc1234567 |
| ou_path | 您的组织单位路径(如果适用) | aws:PrincipalOrgPaths | o-a1b2c3d4e5/r-ab12/ou-ab12-11111111/ou-ab12-22222222/ |
| principal_tags | 附加到 IAM 主体或代入角色会话的标签。请求令牌时,如果请求的 IAM 主体同时有主体标签和会话标签,则会话标签将出现在 JWT 中。 | aws:PrincipalTag/<tag-key> | {"environment": "production", "team": "data-engineering", "cost-center":"engineering"} |
会话上下文声明
这些声明提供有关发起令牌请求的计算环境和会话的信息。AWS AWS STS 会根据请求主体的会话上下文自动包含这些声明(如果适用)。
| 声明 | 说明 | 条件键映射 | 示例值 |
|---|---|---|---|
| original_session_exp | 原始角色会话凭证过期时间(适用于代入的角色) | 不适用 | 2024-01-15T10:00:00Z |
| federated_provider | 联合身份验证会话的身份提供商名称 | aws:FederatedProvider | arn:aws:iam::111122223333:oidc-provider/your_oidc_provider |
| identity_store_user_id | IAM Identity Center 用户 ID | identitystore:UserId | user-abc123def456 |
| identity_store_arn | Identity Center 身份存储的 ARN | identitystore:IdentityStoreArn | arn:aws:identitystore::123456789012:identitystore/d-abc1234567 |
| ec2_source_instance_arn | 请求 EC2 实例的 ARN | ec2:SourceInstanceArn | arn:aws:ec2:us-east-1:123456789012:instance/i-abc123def456 |
| ec2_instance_source_vpc | 提供 EC2 角色凭证的 VPC ID | aws:Ec2InstanceSourceVpc | vpc-abc123def456 |
| ec2_instance_source_private_ipv4 | EC2 实例的私有 IPv4 地址 | aws:Ec2InstanceSourcePrivateIPv4 | 10.0.1.25 |
| ec2_role_delivery | 实例元数据服务版本 | ec2:RoleDelivery | 2 |
| source_identity | 主体设置的来源身份 | aws:SourceIdentity | admin-user |
| lambda_source_function_arn | 调用 Lambda 函数的 ARN | lambda:SourceFunctionArn | arn:aws:lambda:us-east-1:123456789012:function:my-function |
| glue_credential_issuing_service | Glue 作业的 AWS Glue 服务标识符 | glue:CredentialIssuingService | glue.amazonaws.com |
请求标签
您可以通过在 GetWebIdentityToken API 请求中指定标签将自定义声明添加到令牌。这些声明在令牌中的 request_tags 字段下显示,使您能够传递可供外部服务用于精细授权决策的特定信息。每个请求最多可以指定 50 个标签。
请求示例:
response = sts_client.get_web_identity_token( Audience=['https://api.example.com'], SigningAlgorithm='ES384' Tags=[ {'Key': 'team', 'Value': 'data-engineering'}, {'Key': 'cost-center', 'Value': 'analytics'}, {'Key': 'environment', 'Value': 'production'} ] )
令牌中由此产生的声明:
{ "request_tags": { "team": "data-engineering", "cost-center": "analytics", "environment": "production" } }