토큰 클레임 이해
GetWebIdentityToken API를 직접적으로 호출하면 AWS Security Token Service는 IAM 위탁자의 ID를 나타내는 클레임 세트가 포함된 서명된 JSON 웹 토큰(JWT)을 반환합니다. 이러한 토큰은 RFC 7519
JWT에는 주제(‘sub’), 대상(‘aud’), 발급자(‘iss’)와 같은 표준 OpenID Connect(OIDC) 클레임이 포함되어 있어 다양한 외부 서비스 간의 상호 운용성을 지원합니다. 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 라이브러리를 사용하여 검증할 수 있습니다.
| Claim | 이름 | 설명 | 예제 값 |
|---|---|---|---|
| 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 | Issued At | JWT가 발급된 시간을 식별하는 NumericDate 값입니다. | 1700000000 |
| exp | Expiration | NumericDate 값은 JWT가 처리에 허용되지 않아야 하는 만료 시간을 식별합니다. | 1700000900 |
| jti | JWT ID | 이 토큰 인스턴스의 고유 식별자입니다. | xyz123-def456-ghi789-jkl012 |
사용자 지정 클레임
AWS STS는 표준 OIDC 클레임 외에도 해당하는 경우 ID 및 세션 컨텍스트에 대한 클레임을 추가합니다. 요청 태그로 토큰을 전달하여 토큰에 자체 클레임을 추가할 수도 있습니다. 사용자 지정 클레임은 https://sts.amazonaws.com/ 네임스페이스 아래에 중첩됩니다.
AWS ID 클레임
이러한 클레임은 AWS 계정, 조직 구조 및 IAM 위탁자에 대한 자세한 정보를 제공합니다.
| Claim | 설명 | 조건 키에 매핑 | 예제 값 |
|---|---|---|---|
| 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는 요청 주체의 세션 컨텍스트에 따라 해당하는 경우 이러한 클레임을 자동으로 포함합니다.
| Claim | 설명 | 조건 키에 매핑 | 예제 값 |
|---|---|---|---|
| original_session_exp | 원래 역할 세션 자격 증명이 만료되는 시기(위임된 역할의 경우) | 해당 사항 없음 | 2024-01-15T10:00:00Z |
| federated_provider | 페더레이션 세션의 ID 공급자 이름 | 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 ID 스토어의 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 | 위탁자가 설정한 소스 ID | 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" } }