一時的なセキュリティ認証情報をリクエストする
一時的なセキュリティ認証情報をリクエストするには、AWS API で AWS Security Token Service (AWS STS) を使用できます。これには、AWS リソースへのアクセスを制御できる一時的セキュリティ認証情報を持つ、信頼されたユーザーを作成および提供するオペレーションが含まれます。AWS STS の詳細については、「IAM の一時的な認証情報」を参照してください。ロールを引き受けることで一時的なセキュリティ認証情報をリクエストするための別の方法については、「ロールを引き受けるための各種方法」を参照してください。
API オペレーションを呼び出すには、いずれかの AWS SDK
AWS STS API オペレーションは、アクセスキーペアやセキュリティトークンを含む一時的セキュリティ認証情報で新しいセッションを作成します。アクセスキーペアは、アクセスキー ID とシークレットキーで構成されます。ユーザー(またはユーザーが実行しているアプリケーション)はこれらの認証情報を使用して、リソースにアクセスできます。AWS STS API オペレーションを使用して、ロールセッションを作成し、プログラムでセッションポリシーとセッションタグを渡すことができます。結果として得られるセッションのアクセス許可は、ロールの ID ベースのポリシーとセッションポリシーの共通部分です。セッションポリシーの詳細については、「セッションポリシー」を参照してください。セッションタグの詳細については、「AWS STS でセッションタグを渡します」を参照してください。
注記
AWS STS API オペレーションから返されるセッショントークンのサイズは固定ではありません。最大サイズを仮定しないことを強くお勧めします。一般的なトークンのサイズは 4096 バイト未満ですが、変化する可能性があります。
AWS リージョンでの AWS STS の使用
AWS STS API 呼び出しは、グローバルエンドポイントにも、リージョンのエンドポイントの 1 つに対しても送信できます。より近くのエンドポイントを選択した場合、レイテンシーを軽減し、API 呼び出しのパフォーマンスが向上します。また、元のエンドポイントとの通信ができなくなった場合は、代替リージョンのエンドポイントに呼び出しを送信することもできます。各種 AWS SDK の 1 つを使用している場合、API コールを行う前に SDK メソッドを使用してリージョンを選択します。手動で HTTP API リクエストを組み立てる場合、独自で正しいエンドポイントにリクエストを送信する必要があります。詳細については、リージョンとエンドポイントの「AWS STS 」セクションおよび「AWS リージョン で AWS STS を管理する」 を参照してください。
AWS 環境およびアプリケーションで使用する一時的な認証情報の取得に使用できる API オペレーションを、次に示します。
カスタム ID ブローカーを介したクロスアカウントの委任とフェデレーションの認証情報のリクエスト
この AssumeRole
API オペレーションは、既存の IAM ユーザーに、まだアクセスできない AWS リソースへのアクセスを許可する際に役立ちます。例えば、ユーザーが別の AWS アカウント のリソースにアクセスする必要がある場合があります。また、特権アクセスを一時的に得るための方法 ( 多要素認証 (MFA) など) としても役立ちます。アクティブなユーザーの認証情報を使用してこの API を呼び出す必要があります。誰がこの操作を呼び出すことができるのかについては、AWS STS 認証情報を比較する を参照してください。詳細については、IAM ユーザーにアクセス許可を委任するロールを作成するおよびMFA を使用した安全な API アクセスを参照してください。
カスタム ID ブローカーを通じてクロスアカウント委任とフェデレーションの一時的なセキュリティ認証情報をリクエストするには
-
AWS セキュリティ認証情報を使用して認証します。この呼び出しは、有効な AWS セキュリティ認証情報を使用して実行される必要があります。
-
AssumeRole
操作を呼び出します。
以下の例は、AssumeRole
を使用したリクエストと応答のサンプルを示します。このサンプルリクエストは、含まれているセッションポリシー、セッションタグ、外部 ID、およびソース ID を使用して、指定された期間の demo
ロールを引き受けます。結果のセッションには John-session
という名前が付けられます。
例 リクエストの例
https://sts.amazonaws.com/ ?Version=2011-06-15 &Action=AssumeRole &RoleSessionName=John-session &RoleArn=arn:aws::iam::123456789012:role/demo &Policy=%7B%22Version%22%3A%222012-10-17%22%2C%22Statement%22%3A%5B%7B%22Sid%22%3A%20%22Stmt1%22%2C%22Effect%22%3A%20%22Allow%22%2C%22Action%22%3A%20%22s3%3A*%22%2C%22Resource%22%3A%20%22*%22%7D%5D%7D &DurationSeconds=1800 &Tags.member.1.Key=Project &Tags.member.1.Value=Pegasus &Tags.member.2.Key=Cost-Center &Tags.member.2.Value=12345 &ExternalId=123ABC &SourceIdentity=DevUser123 &AUTHPARAMS
上記の例に示すポリシーの値は、次のポリシーの URL エンコードされたバージョンです。
{"Version":"2012-10-17","Statement":[{"Sid":"Stmt1","Effect":"Allow","Action":"s3:*","Resource":"*"}]}
この例の AUTHPARAMS
パラメータは 署名のプレースホルダーです。署名は AWS HTTP API リクエストに含める必要がある認証情報です。AWS SDK
一時的セキュリティ認証情報に加えて、レスポンスにはフェデレーティッドユーザーの Amazon リソースネーム(ARN)、および認証情報の有効期限が含まれています。
例 レスポンスの例
<AssumeRoleResponse xmlns="https://sts.amazonaws.com/doc/2011-06-15/">
<AssumeRoleResult>
<SourceIdentity>DevUser123</SourceIdentity>
<Credentials>
<SessionToken>
AQoDYXdzEPT//////////wEXAMPLEtc764bNrC9SAPBSM22wDOk4x4HIZ8j4FZTwdQW
LWsKWHGBuFqwAeMicRXmxfpSPfIeoIYRqTflfKD8YUuwthAx7mSEI/qkPpKPi/kMcGd
QrmGdeehM4IC1NtBmUpp2wUE8phUZampKsburEDy0KPkyQDYwT7WZ0wq5VSXDvp75YU
9HFvlRd8Tx6q6fE8YQcHNVXAkiY9q6d+xo0rKwT38xVqr7ZD0u0iPPkUL64lIZbqBAz
+scqKmlzm8FDrypNC9Yjc8fPOLn9FX9KSYvKTr4rvx3iSIlTJabIQwj2ICCR/oLxBA==
</SessionToken>
<SecretAccessKey>
wJalrXUtnFEMI/K7MDENG/bPxRfiCYzEXAMPLEKEY
</SecretAccessKey>
<Expiration>2019-07-15T23:28:33.359Z</Expiration>
<AccessKeyId>AKIAIOSFODNN7EXAMPLE</AccessKeyId>
</Credentials>
<AssumedRoleUser>
<Arn>arn:aws:sts::123456789012:assumed-role/demo/John</Arn>
<AssumedRoleId>ARO123EXAMPLE123:John</AssumedRoleId>
</AssumedRoleUser>
<PackedPolicySize>8</PackedPolicySize>
</AssumeRoleResult>
<ResponseMetadata>
<RequestId>c6104cbe-af31-11e0-8154-cbc7ccf896c7</RequestId>
</ResponseMetadata>
</AssumeRoleResponse>
注記
AWS 変換では、渡されたセッションポリシーとセッションタグが、個別の制限を持つひとまとめのバイナリ形式に圧縮されます。プレーンテキストが他の要件を満たしていても、この制限ではリクエストが失敗する可能性があります。PackedPolicySize
レスポンス要素は、リクエストのポリシーとタグがサイズ制限にどの程度近づいているかをパーセントで示します。
OIDC プロバイダーを通じた認証情報のリクエスト
AssumeRoleWithWebIdentity
API オペレーションでは、パブリック ID プロバイダーを経由して認証されたフェデレーティッドユーザーの一時的なセキュリティ認証情報のセットが返ります。パブリック ID プロバイダーの例としては、Login with Amazon、Facebook、Google、または OpenID Connect (OIDC) に対応している任意の ID プロバイダーがあります。このオペレーションを使用すると、ユーザーには自分の AWS または IAM アイデンティティは必要ありません。詳細については、「OIDC フェデレーション」を参照してください。
注記
AssumeRoleWithWebIdentity
を直接呼び出すのではなく、モバイル開発用の AWS SDK で Amazon Cognito および Amazon Cognito 認証情報プロバイダーを使用することをお勧めします。詳細については、Amplify ドキュメントの「Amplify による認証
Amazon Cognito を使用していない場合は、AWS STS の AssumeRoleWithWebIdentity
アクションを呼び出します。
-
AssumeRoleWithWebIdentity
操作を呼び出します。これは署名なしの呼び出しです。つまり、リクエストを実行する前に AWS セキュリティ認証情報を認証する必要はありません。
注記
AssumeRoleWithWebIdentity
に対する呼び出しは署名 (暗号化) されていません。そのため、信頼されている経路を通じてリクエストが送信される場合のみ、オプションのセッションポリシーを含める必要があります。そうでない場合、他のユーザーが制限を削除するようにポリシーを変更できます。 -
AssumeRoleWithWebIdentity
を呼び出すとき、AWS はトークンの信頼性を確認します。たとえば、プロバイダーに応じて、AWS はプロバイダーを呼び出して、アプリが渡したトークンを含める場合があります。ID プロバイダーがトークンを確認した場合、AWS は次の情報を返します。-
一時的なセキュリティ認証情報一式。一時的なセキュリティ認証情報は、アクセスキー ID、シークレットアクセスキー、およびセッショントークンで構成されています。
-
引き受けたロールのロール ID と ARN。
-
一意のユーザー ID を含む
SubjectFromWebIdentityToken
値。
-
-
レスポンスで返された一時的なセキュリティ認証情報を使用して AWS API コールを実行します。これは、長期的なセキュリティ認証情報を使用して AWS API 呼び出しを行うのと同じ処理です。異なる点は、AWS で一時的なセキュリティ認証情報が有効であることを確認できる、セッショントークンを含める必要があることです。
アプリで認証情報をキャッシュする必要があります。先述したように、認証情報はデフォルトで 1 時間後に無効になります。 SDK の AssumeRoleWithWebIdentity
を呼び出すかどうかはお客様およびお客様のアプリによります。古い認証情報が失効する前に、このオペレーションを呼び出して新しい一時的なセキュリティ認証情報を取得します。
SAML 2.0 ID プロバイダーを通じた認証情報のリクエスト
AssumeRoleWithSAML
API オペレーションでは、組織の既存の ID システムによって認証されたフェデレーティッドユーザーの一時的なセキュリティ認証情報のセットが返ります。また、ユーザーは SAML
-
AssumeRoleWithSAML
操作を呼び出します。これは署名なしの呼び出しです。つまり、リクエストを実行する前に AWS セキュリティ認証情報を認証する必要はありません。
注記
AssumeRoleWithSAML
に対する呼び出しは署名 (暗号化) されていません。そのため、信頼されている経路を通じてリクエストが送信される場合のみ、オプションのセッションポリシーを含める必要があります。そうでない場合、他のユーザーが制限を削除するようにポリシーを変更できます。 -
AssumeRoleWithSAML
を呼び出すときに、AWS は SAML アサーションの信頼性を確認します。ID プロバイダーがアサーションを確認した場合、AWS は次の情報を返します。-
一時的なセキュリティ認証情報一式。一時的なセキュリティ認証情報は、アクセスキー ID、シークレットアクセスキー、およびセッショントークンで構成されています。
-
引き受けたロールのロール ID と ARN。
-
SAML アサーションの
Audience
要素のRecipient
属性値を含むSubjectConfirmationData
値。 -
SAML アサーションの
Issuer
要素の値を含むIssuer
値。 -
Issuer
値、AWS アカウント ID、SAML プロバイダーのフレンドリ名から構築されたハッシュ値を含むNameQualifier
要素。Subject
要素と結合する場合、フェデレーティッドユーザーを一意に識別できます。 -
SAML アサーションの
Subject
要素内のNameID
要素の値を含むSubject
要素。 -
SubjectType
要素の形式を示すSubject
要素。値は、persistent
、transient
、または SAML アサーションで使用されているFormat
およびSubject
要素の完全なNameID
URI とすることができます。NameID
要素のFormat
属性の詳細については、「認証レスポンス用の SAML アサーションを設定する」を参照してください。
-
-
レスポンスで返された一時的なセキュリティ認証情報を使用して AWS API コールを実行します。これは、長期的なセキュリティ認証情報を使用して AWS API 呼び出しを行うのと同じ処理です。異なる点は、AWS で一時的なセキュリティ認証情報が有効であることを確認できる、セッショントークンを含める必要があることです。
アプリで認証情報をキャッシュする必要があります。認証情報はデフォルトで 1 時間後に無効になります。 SDK の AssumeRoleWithSAML
を呼び出すかどうかはお客様およびお客様のアプリによります。古い認証情報が失効する前に、このオペレーションを呼び出して新しい一時的なセキュリティ認証情報を取得します。
カスタム ID ブローカーを通じた認証情報のリクエスト
GetFederationToken
API オペレーションでは、フェデレーティッドユーザー用の一時的セキュリティ認証情報が返ります。この API は、デフォルトの有効期限が大幅に長い (1 時間ではなく 12 時間) という点で AssumeRole
とは異なります。また、DurationSeconds
パラメータを使用して、一時的なセキュリティ認証情報が有効である期間を選択することもできます。結果として得られる認証情報は、900 秒 (15 分) から 129,600 秒 (36 時間) までの指定された期間内で有効です。有効期限を長くすると、新しい認証情報を頻繁に取得する必要がなくなるため、AWS への呼び出し回数を減少させることができます。
-
特定の IAM ユーザーの AWS セキュリティ認証情報を使用して認証します。この呼び出しは、有効な AWS セキュリティ認証情報を使用して実行される必要があります。
-
GetFederationToken
操作を呼び出します。
GetFederationToken
呼び出しは、セッショントークン、アクセスキー、シークレットキー、失効情報で構成される一時的セキュリティ認証情報を返します。組織内でアクセス権限を管理する (たとえば、プロキシアプリケーションを使用してアクセス権限を割り当てる) 場合、GetFederationToken
を使用できます。
以下の例に、GetFederationToken
を使用したリクエストと応答のサンプルを示します。このリクエスト例では、指定された期間の呼び出し元ユーザーをセッションポリシー ARN およびセッションタグとフェデレートします。結果のセッションには Jane-session
という名前が付けられます。
例 リクエストの例
https://sts.amazonaws.com/ ?Version=2011-06-15 &Action=GetFederationToken &Name=Jane-session &PolicyArns.member.1.arn==arn%3Aaws%3Aiam%3A%3A123456789012%3Apolicy%2FRole1policy &DurationSeconds=1800 &Tags.member.1.Key=Project &Tags.member.1.Value=Pegasus &Tags.member.2.Key=Cost-Center &Tags.member.2.Value=12345 &AUTHPARAMS
前述の例に示すポリシー ARN には、次の URL エンコードされた ARN が含まれています。
arn:aws:iam::123456789012:policy/Role1policy
また、例の &AUTHPARAMS
パラメータは、認証情報のプレースホルダーとして使用されることに注意してください。これは、署名であり、AWS HTTP API リクエストに含める必要があります。AWS SDK
一時的セキュリティ認証情報に加えて、レスポンスにはフェデレーティッドユーザーの Amazon リソースネーム(ARN)、および認証情報の有効期限が含まれています。
例 レスポンスの例
<GetFederationTokenResponse xmlns="https://sts.amazonaws.com/doc/2011-06-15/">
<GetFederationTokenResult>
<Credentials>
<SessionToken>
AQoDYXdzEPT//////////wEXAMPLEtc764bNrC9SAPBSM22wDOk4x4HIZ8j4FZTwdQW
LWsKWHGBuFqwAeMicRXmxfpSPfIeoIYRqTflfKD8YUuwthAx7mSEI/qkPpKPi/kMcGd
QrmGdeehM4IC1NtBmUpp2wUE8phUZampKsburEDy0KPkyQDYwT7WZ0wq5VSXDvp75YU
9HFvlRd8Tx6q6fE8YQcHNVXAkiY9q6d+xo0rKwT38xVqr7ZD0u0iPPkUL64lIZbqBAz
+scqKmlzm8FDrypNC9Yjc8fPOLn9FX9KSYvKTr4rvx3iSIlTJabIQwj2ICCEXAMPLE==
</SessionToken>
<SecretAccessKey>
wJalrXUtnFEMI/K7MDENG/bPxRfiCYzEXAMPLEKEY
</SecretAccessKey>
<Expiration>2019-04-15T23:28:33.359Z</Expiration>
<AccessKeyId>AKIAIOSFODNN7EXAMPLE;</AccessKeyId>
</Credentials>
<FederatedUser>
<Arn>arn:aws:sts::123456789012:federated-user/Jean</Arn>
<FederatedUserId>123456789012:Jean</FederatedUserId>
</FederatedUser>
<PackedPolicySize>4</PackedPolicySize>
</GetFederationTokenResult>
<ResponseMetadata>
<RequestId>c6104cbe-af31-11e0-8154-cbc7ccf896c7</RequestId>
</ResponseMetadata>
</GetFederationTokenResponse>
注記
AWS 変換では、渡されたセッションポリシーとセッションタグが、個別の制限を持つひとまとめのバイナリ形式に圧縮されます。プレーンテキストが他の要件を満たしていても、この制限ではリクエストが失敗する可能性があります。PackedPolicySize
レスポンス要素は、リクエストのポリシーとタグがサイズ制限にどの程度近づいているかをパーセントで示します。
AWS ではリソースレベルでアクセス許可を付与する(たとえば、Amazon S3 バケットにリソースベースのポリシーをアタッチする)ことを推奨しています。Policy
パラメータは省略できます。ただし、フェデレーティッドユーザーのポリシーを含まない場合、一時的セキュリティ認証情報ではアクセス権限が付与されません。この場合、リソースポリシーを使用してフェデレーティッドユーザーに AWS リソースへのアクセスを許可する必要があります。
例えば、AWS アカウント 番号が 111122223333 であり、Susan にアクセスを許可しようとしている Amazon S3 バケットがあるとします。Susan の一時的セキュリティ認証情報にはバケットのポリシーが含まれていません。この場合、Susan の ARN (arn:aws:sts::111122223333:federated-user/Susan
など) と一致する ARN があるポリシーがバケットにあるようにする必要があります。
信頼されていない環境でのユーザーの認証情報のリクエスト
この GetSessionToken
API オペレーションでは、既存の IAM ユーザーに一時的セキュリティ認証情報のセットが返ります。この API は、MFA が IAM ユーザーに対して有効なときに AWS リクエストを作成するなど、セキュリティを強化するために役立ちます。認証情報は一時的なものであるため、安全性の低い環境からリソースにアクセスする IAM ユーザーがいる場合、これによりセキュリティが強化されます。安全性の低い環境の例には、モバイルデバイスやウェブブラウザが含まれます。
-
特定の IAM ユーザーの AWS セキュリティ認証情報を使用して認証します。この呼び出しは、有効な AWS セキュリティ認証情報を使用して実行される必要があります。
-
GetSessionToken
操作を呼び出します。 -
GetSessionToken
は、セッショントークン、アクセスキー ID、およびシークレットアクセスキーから構成される一時的なセキュリティ認証情報を返します。
デフォルトでは、IAM ユーザーの一時的なセキュリティ認証情報は、最大 12 時間有効です。ただし、DurationSeconds
パラメータを使用して最短 15 分、最長 36 時間の有効期間をリクエストできます。セキュリティ上の理由から、AWS アカウントのルートユーザー のトークンは有効期間が 1 時間に制限されます。
以下の例は、GetSessionToken
を使用したリクエストと応答のサンプルを示します。レスポンスには、一時的なセキュリティ認証情報の有効期限も含んでいます。
例 リクエストの例
https://sts.amazonaws.com/ ?Version=2011-06-15 &Action=GetSessionToken &DurationSeconds=1800 &AUTHPARAMS
この例の AUTHPARAMS
パラメータは 署名のプレースホルダーです。署名は AWS HTTP API リクエストに含める必要がある認証情報です。AWS SDK
例 レスポンスの例
<GetSessionTokenResponse xmlns="https://sts.amazonaws.com/doc/2011-06-15/">
<GetSessionTokenResult>
<Credentials>
<SessionToken>
AQoEXAMPLEH4aoAH0gNCAPyJxz4BlCFFxWNE1OPTgk5TthT+FvwqnKwRcOIfrRh3c/L
To6UDdyJwOOvEVPvLXCrrrUtdnniCEXAMPLE/IvU1dYUg2RVAJBanLiHb4IgRmpRV3z
rkuWJOgQs8IZZaIv2BXIa2R4OlgkBN9bkUDNCJiBeb/AXlzBBko7b15fjrBs2+cTQtp
Z3CYWFXG8C5zqx37wnOE49mRl/+OtkIKGO7fAE
</SessionToken>
<SecretAccessKey>
wJalrXUtnFEMI/K7MDENG/bPxRfiCYzEXAMPLEKEY
</SecretAccessKey>
<Expiration>2011-07-11T19:55:29.611Z</Expiration>
<AccessKeyId>AKIAIOSFODNN7EXAMPLE</AccessKeyId>
</Credentials>
</GetSessionTokenResult>
<ResponseMetadata>
<RequestId>58c5dbae-abef-11e0-8cfe-09039844ac7d</RequestId>
</ResponseMetadata>
</GetSessionTokenResponse>
オプションで、GetSessionToken
リクエストに、AWS の多要素認証 (MFA) で確認する SerialNumber
および TokenCode
値を含めることができます。指定された値が有効であれば、AWS STS は、MFA 認証の状態を含む一時的なセキュリティ認証情報を提供します。この一時的セキュリティ認証情報を使用して、MFA で保護された API オペレーションまたは AWS ウェブサイトに、MFA 認証が有効である限りアクセスできます。
以下の例は、MFA 認証コードとデバイスのシリアルナンバーを含む GetSessionToken
リクエストを示しています。
https://sts.amazonaws.com/ ?Version=2011-06-15 &Action=GetSessionToken &DurationSeconds=7200 &SerialNumber=YourMFADeviceSerialNumber &TokenCode=123456 &AUTHPARAMS
注記
AWS STS の呼び出しは、グローバルエンドポイントまたは AWS アカウント をアクティブ化しているリージョンのエンドポイントに対して行えます。詳細については、リージョンとエンドポイントの「AWS STS」セクションを参照してください。
この例の AUTHPARAMS
パラメータは 署名のプレースホルダーです。署名は AWS HTTP API リクエストに含める必要がある認証情報です。AWS SDK