了解令牌声明 - AWS Identity and Access Management

了解令牌声明

当您调用 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" } }