トークンクレームについて - AWS Identity and Access Management

トークンクレームについて

GetWebIdentityToken API を呼び出すと、AWS Security Token Service によって、IAM プリンシパルのアイデンティティを表す一連のクレームを含む、署名付きの JSON ウェブトークン (JWT) が返されます。これらのトークンは RFC 7519 に準拠しています。これらのトークンの構造と内容を理解すれば、安全な認証フローを実装し、外部サービスに適切なクレーム検証を設定し、カスタムクレームを効果的に使用して、アクセスコントロールをきめ細かく行えるようになります。

JWT には、さまざまな外部サービス間の相互運用性を促す標準の OpenID Connect (OIDC) クレーム (サブジェクト (「sub」)、対象者 (「aud」)、発行者 (「iss」) など) が含まれています。AWS STS は、AWS ID に固有のクレーム (AWS アカウント ID やプリンシパルタグなど) とセッションコンテキストのクレーム (EC2 インスタンス ARN など) を必要に応じてトークンに入力します。またカスタムのクレームを GetWebIdentityToken API にリクエストタグとして渡すことで、トークンに追加することもできます。AWS ID に固有のクレームとセッションコンテキストのクレーム、そしてカスタムクレームは、トークンの名前空間「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 発行日 JWT が発行された時刻を特定する NumericDate 値です。 1700000000
exp 有効期限 それ以降は JWT を処理してはならない有効期限を特定する NumericDate 値です。 1700000900
jti JWT ID このトークンインスタンスの一意の識別子です。 xyz123–def456–ghi789–jkl012

カスタムのクレーム

AWS STS は、標準の OIDC クレームに加えて、アイデンティティとセッションコンテキストに関するクレームを必要に応じて追加します。また、ユーザー独自のクレームを、リクエストタグとして渡すことでトークンに追加することもできます。カスタムクレームは名前空間 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 アイデンティティセンターユーザー identitystore:UserId user–abc123def456
identity_store_arn アイデンティティセンター 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" } }