一時的なセキュリティ認証情報の使用 - AWS Documentation

AWS Security Token Service
一時的なセキュリティ認証情報の使用
API Version 2011-06-15
AWS Security Token Service 一時
的なセキュリティ認証情報の使用
AWS Security Token Service 一時
的なセキュリティ認証情報の使用
AWS Security Token Service: 一時的なセキュリティ認証情報の使用
Copyright © 2017 Amazon Web Services, Inc. and/or its affiliates. All rights reserved.
Amazon's trademarks and trade dress may not be used in connection with any product or service that is not Amazon's, in any
manner that is likely to cause confusion among customers, or in any manner that disparages or discredits Amazon. All other
trademarks not owned by Amazon are the property of their respective owners, who may or may not be affiliated with, connected to,
or sponsored by Amazon.
AWS Security Token Service 一時
的なセキュリティ認証情報の使用
Table of Contents
AWS Security Token Service とは ................................................................................................... 1
AWS STS と AWS リージョン ............................................................................................... 1
一時的セキュリティ認証情報のメリット ................................................................................... 1
一時的な認証情報の一般的なシナリオ ...................................................................................... 2
一時的セキュリティ認証情報を取得する方法 ............................................................................. 3
AWS Security Token Service API アクション .................................................................... 3
API オプションの比較 ................................................................................................... 4
AWS STS の価格 .................................................................................................................. 6
一時的なアクセス権を付与するシナリオ ........................................................................................... 7
サードパーティサインインのモバイルアプリを作成する ............................................................. 7
組織の認証システムを使用して AWS リソースへのアクセスを許可する ........................................ 8
組織の認証システムと SAML を使用して AWS リソースへのアクセスを許可する ........................... 9
ウェブベースのシングルサインオン(SSO) ........................................................................... 10
API アクセスの委任 ............................................................................................................. 11
クロスアカウント API アクセス ............................................................................................ 11
一時的なセキュリティ認証情報の作成 ............................................................................................ 12
AWS STS ウェブ ID フェデレーションについて ...................................................................... 14
モバイルアプリへの Amazon Cognito の使用 ................................................................... 15
モバイルアプリへのウェブ ID フェデレーション API の使用 .............................................. 16
モバイルアプリに AWS アクセスを許可するロールを作成する ........................................... 17
ウェブ ID フェデレーションを使用してプロバイダー、アプリ、ユーザーを識別する ............. 19
ウェブアイデンティティフェデレーションに関するその他のリソース ................................. 21
AWS STS SAML 2.0 フェデレーションについて ...................................................................... 22
API アクセス用の SAML ベースのフェデレーションを設定する .......................................... 22
SAML ベースのフェデレーションでユーザーを一意に識別する .......................................... 25
一時的な認証情報を作成するための AWS API ......................................................................... 26
AssumeRoleWithWebIdentity – ウェブ ID フェデレーション .............................................. 26
AssumeRoleWithSAML – SAML 2.0 によるエンタープライズフェデレーション ..................... 27
AssumeRole – クロスアカウントの委任とカスタム ID ブローカー ...................................... 28
GetFederationToken – カスタム ID ブローカー ................................................................ 30
関連トピック .............................................................................................................. 31
AssumeRole を使用した API アクセスの委任 .................................................................. 31
AWS リソースへのアクセスを付与するときに外部 ID を使用する方法 ................................. 32
認証情報を作成するためのアクセス権限の付与 ........................................................................ 36
関連トピック .............................................................................................................. 37
IAM ユーザーのアクセスを有効にする認証情報 ........................................................................ 38
MFA による IAM ユーザーの認証情報 ............................................................................ 38
関連トピック .............................................................................................................. 39
一時的なセキュリティ認証情報のアクセス権限を制御する ................................................................. 40
AssumeRole API のアクセス権限 .......................................................................................... 40
例: AssumeRole を使用してアクセス権限を割り当てる ..................................................... 41
GetFederationToken のアクセス権限 ...................................................................................... 43
例: GetFederationToken を使用してアクセス権限を割り当てる .......................................... 44
GetSessionToken のアクセス権限 ......................................................................................... 47
アクセス権限の無効化 .......................................................................................................... 48
認証情報の作成者のアクセスを拒否 ............................................................................... 48
認証情報のアクセスを名前で拒否 .................................................................................. 49
認証情報のアクセスを作成時間で拒否 ............................................................................ 50
関連トピック ...................................................................................................................... 51
一時的なセキュリティ認証情報を使用して AWS リソースをリクエストする ........................................ 52
Amazon EC2 インスタンスでの一時的な認証情報の使用 ........................................................... 53
AWS SDK で一時的なセキュリティ認証情報を使用する ............................................................ 53
AWS CLI で一時的なセキュリティ認証情報を使用する ............................................................. 54
API で一時的なセキュリティ認証情報を使用する ..................................................................... 55
詳細情報 ............................................................................................................................ 56
API Version 2011-06-15
iv
AWS Security Token Service 一時
的なセキュリティ認証情報の使用
フェデレーティッドユーザーに AWS マネジメントコンソール への直接アクセスを許可する .................. 57
SAML を使用してフェデレーティッドユーザーに AWS コンソールへのアクセスを許可する ........... 57
AWS の SAML プロバイダーとしてネットワークを設定する .............................................. 59
IAM で SAML プロバイダーを作成する ........................................................................... 59
フェデレーティッドユーザーのために AWS でアクセス権限を確立する ............................... 59
SAML 認証レスポンスのアサーションを設定する ............................................................. 60
SAML 属性と AWS ポリシーキーの対応付け ................................................................... 61
URL を作成してフェデレーティッドユーザーに AWS コンソールへのアクセスを許可する ............. 62
AWS マネジメントコンソール 用の URL を作成する(クエリ API) ................................... 63
URL の作成方法を示す例(Python) .............................................................................. 65
URL の作成方法を示す例(Java) ................................................................................. 66
URL の作成方法を示す例(Ruby) ................................................................................ 67
新しいリージョンでの AWS STS のアクティブ化 ............................................................................ 70
AWS Security Token Service のサンプルアプリケーション ................................................................ 73
ウェブ ID フェデレーションのサンプル .................................................................................. 73
AWS Security Token Service(AWS STS)をサポートする AWS サービス .......................................... 75
AWS STS をサポートする AWS サービスの一覧 ..................................................................... 75
ドキュメント履歴 ........................................................................................................................ 77
AWS の用語集 ............................................................................................................................ 79
API Version 2011-06-15
v
AWS Security Token Service 一時
的なセキュリティ認証情報の使用
AWS STS と AWS リージョン
AWS Security Token Service とは
AWS Security Token Service (AWS STS) によって、AWS リソースへの制御されたアクセスを提供す
る一時的な認証情報を、信頼済みユーザーに提供できます。
トピック
• AWS STS と AWS リージョン (p. 1)
• 一時的セキュリティ認証情報のメリット (p. 1)
• 一時的な認証情報の一般的なシナリオ (p. 2)
• 一時的セキュリティ認証情報を取得する方法 (p. 3)
• AWS STS の価格 (p. 6)
AWS STS と AWS リージョン
デフォルトでは、AWS STS は https://sts.amazonaws.com に単一のエンドポイントを持つグ
ローバルサービスです。また、デフォルトでは、https://sts.us-east-1.amazonaws.com にあ
る 1 個のリージョンエンドポイントも利用できます。アカウントの追加リージョンで AWS STS を
有効にすることを選択し、追加したリージョンのエンドポイントに対して AWS STS API の呼び出し
を実行できます。地理的に近い場所にあるリージョンのサーバーに対してリクエストを実行するこ
とによって、レイテンシーを低減できます。認証情報を取得したリージョンに関係なく、認証情報
はグローバルに使用できます。詳細については、「新しいリージョンでの AWS STS のアクティブ
化 (p. 70)」を参照してください。
一時的セキュリティ認証情報のメリット
AWS Security Token Service を使用して一時的なセキュリティ認証情報を取得すると、次のような利
点があります。
• アプリケーションで長期の AWS セキュリティ認証情報を配布する必要がありません。
• ユーザーに対して AWS の ID を定義せずに AWS リソースへのアクセスを提供できます。
• 一時的セキュリティ認証情報の有効期限は限られているので、認証情報が不要になった際にロー
テーションしたり、明示的に取り消したりする必要がありません。一時的セキュリティ認証情報の
有効期限が切れると、再利用することはできません。認証情報が有効な期間を、最大限度まで指定
できます。
API Version 2011-06-15
1
AWS Security Token Service 一時
的なセキュリティ認証情報の使用
一時的な認証情報の一般的なシナリオ
一時的な認証情報の一般的なシナリオ
一時的な認証情報は、ID フェデレーション、委任、クロスアカウントアクセス、および IAM ロールが
使用されるシナリオで便利です。
認証フェデレーション
AWS 以外の外部システムでユーザー ID を管理し、それらのシステムのアクセス権限を使用してサ
インインするユーザーに、AWS タスクの実行や AWS リソースへのアクセスの権限を付与できま
す。IAM では、2 種類の ID フェデレーションをサポートしています。いずれの場合も、ID は AWS の
外部に格納されます。異なる点は、外部システムが存在する場所(データセンターまたはウェブの外
部サードパーティ)です。
• エンタープライズ ID フェデレーション。たとえば、組織のネットワークのユーザーを認証し、ユー
ザーが AWS にアクセスできるようにすることができます。それらのユーザーのために新しい AWS
ID を作成したり、他のユーザー名とパスワードでサインインしてもらったりする必要はありませ
ん。これは、一時アクセスに対するシングルサインオン(SSO)アプローチとして知られていま
す。AWS STS は、Security Assertion Markup Language (SAML) 2.0 などのオープンスタンダード
をサポートしており、Microsoft AD FS を使用して Microsoft Active Directory を活用できます。ま
た、ユーザー ID フェデレーション用の独自のソリューションを管理することもできます。
• Web ID フェデレーション. ユーザーに、よく知られているサードパーティの ID プロバイダー
(Login with Amazon、Facebook、Google、OpenID Connect (OIDC) 2.0 互換の任意のプロバイ
ダーなど)を使用してサインインしてもらい、お客様はそのプロバイダーの認証情報を AWS アカ
ウントのリソースを使用するための一時的なアクセス権限に変換することができます。これは、一
時アクセスに対する ウェブ ID フェデレーションアプローチとして知られています。
モバイルまたはウェブアプリケーションにウェブ ID フェデレーションを使用する場合、カスタム
サインインコードを作成したり独自のユーザー ID を管理したりする必要はありません。ウェブ ID
フェデレーションを使用すると、アプリケーションで IAM ユーザーアクセスキーのような長期的な
セキュリティ認証情報を配布する必要がないので、AWS アカウントの安全性の維持に役立ちます。
AWS STS ウェブ ID フェデレーションでは、Login with Amazon、Facebook、Google、および任意
の OpenID Connect(OICD)互換の ID プロバイダーでのログインがサポートされています。
Note
モバイルアプリケーションに対しては、Amazon Cognito の使用をお勧めします。このサー
ビスを iOS 向け AWS モバイル SDK や Android および Fire OS 向け AWS モバイル SDK
と一緒に使用してユーザーの一意の ID を作成し、認証することで、AWS リソースへの
セキュアなアクセスを実現できます。Amazon Cognito では、AWS STS と同じ ID プロバ
イダーがサポートされます。さらに、認証されていない(ゲスト)アクセスもサポート
され、ユーザーがサインインしたときにユーザーデータを移行することができます。加え
て、Amazon Cognito には、ユーザーがデバイスを変えてもユーザーデータが保持されるよ
うに、ユーザーデータを同期するための API も用意されています。詳細については、以下
を参照してください。
• 『iOS 向け AWS モバイル SDK 開発者ガイド』の「Amazon Cognito ID」
• 『Android 向け AWS モバイル SDK 開発者ガイド』の「Amazon Cognito ID」
クロスアカウントアクセス
多くの組織は、複数の AWS アカウントを保持しています。ロールとクロスアカウントアクセスを使
用すると、1 つのアカウントでユーザー ID を定義し、その ID を使用して、組織に属している他の
アカウントの AWS リソースにもアクセスできるようにすることができます。これは、一時アクセス
に対する委任アプローチとして知られています。詳細については、『IAM ユーザーガイド』の「IAM
ユーザーにアクセス権限を委任するロールの作成」を参照してください。
Amazon EC2 の ロール
API Version 2011-06-15
2
AWS Security Token Service 一時
的なセキュリティ認証情報の使用
一時的セキュリティ認証情報を取得する方法
Amazon EC2 インスタンスでアプリケーションを実行し、これらのアプリケーションが AWS リソー
スにアクセスする必要がある場合は、アプリケーションの起動時に一時的なセキュリティ認証情報を
インスタンスに提供できます。これらの一時的なセキュリティ認証情報は、インスタンスで実行され
るすべてのアプリケーションが使用できるので、インスタンスに長期的な認証情報を保存する必要が
ありません。これは、Amazon EC2 のロールとして知られています。
一時的セキュリティ認証情報を使用して、ほとんどの AWS サービスにアクセスできます。一時的セ
キュリティ認証情報を受け入れるサービスのリストは、「AWS Security Token Service(AWS STS)
をサポートする AWS サービス (p. 75)」を参照してください。
一時的セキュリティ認証情報を取得する方法
AWS STS を使用して一時的なセキュリティ認証情報をリクエストするには、AWS STS API アクショ
ンを使用できます。
いずれかの AWS SDK を使用して API の呼び出しを行うことができます。AWS SDK
は、Java、.NET、Python、Ruby、Android、iOS など、さまざまなプログラミング言語で使用できま
す。SDK は、リクエストへの暗号を使用した署名、必要に応じてリクエストの再試行、エラー レスポ
ンスの処理などのタスクを処理します。AWS Security Token Service API リファレンス で説明されて
いる AWS STS クエリ API も使用することができます。
AWS STS API アクションは、アクセスキー(つまり、アクセスキー ID とシークレットアクセス
キー)およびセッショントークンで構成される一時的セキュリティ認証情報を返します。ユーザー
(またはユーザーが実行しているアプリケーション)はこれらの認証情報を使用して、リソースにア
クセスできます。認証情報は、認証情報を使用したときにユーザーが実行できることを制限する IAM
のアクセスコントロールポリシーに関連付けられます。詳細については、「一時的なセキュリティ認
証情報を使用して AWS リソースをリクエストする (p. 52)」を参照してください。
Important
一時的セキュリティ認証情報を使用できる期間は短いですが、一時的なアクセス権を持つ
ユーザーは、AWS リソースに永続的変更を行うことができます。たとえば、一時的アクセス
権を持つユーザーが Amazon EC2 インスタンスを起動した場合、ユーザーの一時的セキュリ
ティ認証情報の有効期間が切れた後もインスタンスは引き続き実行され、AWS アカウントに
対する料金が発生します。
AWS Security Token Service API アクション
AWS 環境およびアプリケーションで使用するための一時的な認証情報を取得できるようにする API
を、次に示します。
AssumeRole
この API は、既存の IAM ユーザーに、別の AWS アカウントのリソースなど、まだアクセスできない
AWS リソースへのアクセスを許可する際にも役立ちます。また、既存の IAM ユーザーにとっても、
特権アクセスを得るための方法として役立ちます。たとえば、多要素認証(MFA)を提供する場合な
どです。詳細については、『IAM ユーザーガイド』の「IAM ユーザーにアクセス権限を委任するロー
ルの作成」および「MFA 保護 API アクセスの設定」を参照してください。
AssumeRoleWithWebIdentity
API は、パブリック ID プロバイダー(Login with Amazon、Facebook、Google、または任意の
OpenID Connect(OIDC)互換 ID プロバイダー)を使用して認証されたフェデレーティッドユーザー
の一時的なセキュリティ認証情報のセットを返します。この API は、AWS へのアクセスを必要とし
ながら、ユーザーは自身の AWS または IAM の ID を持たないモバイルアプリケーションやクライア
ントベースのウェブアプリケーションを作成する際にも役立ちます。詳細については、「モバイルア
プリに AWS アクセスを許可するロールを作成する (p. 17)」を参照してください。
API Version 2011-06-15
3
AWS Security Token Service 一時
的なセキュリティ認証情報の使用
API オプションの比較
Note
AssumeRoleWithWebIdentity を直接呼び出すのではなく、モバイル開発用の AWS SDK
で Amazon Cognito および Amazon Cognito 認証情報プロバイダーを使用することをお勧めし
ます。詳細については、以下を参照してください。
• 『AWS Mobile SDK for Android Developer Guide』の「Amazon Cognito ID」
• 『AWS Mobile SDK for iOS Developer Guide』の「Amazon Cognito ID」
AssumeRoleWithSAML
この API は、組織で認証され、SAML 2.0(Security Assertion Markup Language)を使用して AWS
に認証および認可情報を渡すフェデレーティッドユーザーの一時的セキュリティ認証情報一式を返し
ます。この API は、SAML アサーションを生成してユーザー ID とアクセス権限に関する情報を提供
できるソフトウェアを使用して、認証システム(Windows Active Directory、OpenLDAP など)を統
合した組織で役立ちます。詳細については、「AWS STS SAML 2.0 ベースのフェデレーションについ
て (p. 22)」を参照してください。
GetFederationToken
この API は、フェデレーティッドユーザー用の一時的セキュリティ認証情報を返します。この API
は、デフォルトの有効期限が大幅に長い(1 時間までではなく 36 時間まで)という点で AssumeRole
とは異なります。より長い有効期限により、何度も新しい認証情報を取得する必要がなくなるの
で、AWS の呼び出しの回数を減らすことができます。詳細については、「一時的なセキュリティ認証
情報を作成するための AWS API (p. 26)」を参照してください。
GetSessionToken
この API は、既存の IAM ユーザーに一時的セキュリティ認証情報一式を返します。たとえば、MFA
が IAM ユーザーに対して有効なときに AWS リクエストを作成するなど、セキュリティを強化するた
めに役立ちます。詳細については、「一時的なセキュリティ認証情報を作成して、IAM ユーザーのア
クセスを有効にする (p. 38)」を参照してください。
API オプションの比較
次の表は、一時的なセキュリティ認証情報を返す、AWS STS のアクション(API)の機能を比較した
ものです。
AWS
STS API
呼び出し元
認証情
報の有効
期間(最
小/最大/
デフォル
ト)
MFA サ
ポート*
渡された
ポリシー
のサポー
ト*
得られた一時的な認証情報に対
する制限
AssumeRole
IAM ユーザー、また 15 分/1
は既存の一時的なセ 時間/1
キュリティ認証情報 時間
を持つユーザー
はい
はい
GetFederationToken または
GetSessionToken を呼び出せ
ません。
AssumeRoleWithSAML
任意のユーザー。呼
び出し元は、既知
の ID プロバイダー
からの認証を示す
SAML 認証レスポン
スを渡す必要があり
ます。
いいえ
はい
GetFederationToken または
GetSessionToken を呼び出せ
ません。
15 分/1
時間/1
時間
API Version 2011-06-15
4
AWS Security Token Service 一時
的なセキュリティ認証情報の使用
API オプションの比較
AWS
STS API
呼び出し元
認証情
報の有効
期間(最
小/最大/
デフォル
ト)
MFA サ
ポート*
渡された
ポリシー
のサポー
ト*
得られた一時的な認証情報に対
する制限
15 分/1
時間/1
時間
いいえ
はい
GetFederationToken または
GetSessionToken を呼び出せ
ません。
GetFederationToken
IAM ユーザーまたは IAM ユー いいえ
ルートアカウント
ザー: 15
分/36 時
間/12 時
間
はい
IAM API を直接呼び出せませ
ん。
AssumeRoleWithWebIdentity
任意のユーザー。呼
び出し元は、既知の
ID プロバイダーか
らの認証を示すウェ
ブ ID トークンを渡
す必要があります。
コンソールへの SSO は許可さ
れています。*
AWS STS API を呼び出せませ
ん。
ルート
アカウ
ント: 15
分/1 時
間/1 時
間
GetSessionToken
IAM ユーザーまたは IAM ユー はい
ルート アカウント
ザー: 15
分/36 時
間/12 時
間
ルート
アカウ
ント: 15
分/1 時
間/1 時
間
いいえ
リクエストに MFA 情報が含ま
れていない場合は、IAM API を
呼び出せません。
AssumeRole 以外の AWS STS
API を呼び出せません。
コンソールへのシングルサイン
オン(SSO)は許可されませ
んが、パスワードを持っている
ユーザー(ルートまたは IAM
ユーザー)はコンソールにサイ
ンインできます。*
• MFA サポート。一部の AWS STS API では、多要素認証(MFA)デバイスについての情報を渡す
ことができます。そうすることで、API 呼び出しによって得られた一時的なセキュリティ認証情報
を、MFA デバイスで認証されたユーザーだけが使用できるようにすることができます。詳細につい
ては、『IAM ユーザーガイド』ガイドの「MFA で保護された API アクセスの設定」を参照してくだ
さい。
• 渡されたポリシーのサポート。一部の AWS STS API では、IAM ポリシーを渡すことができます。
このポリシーは、他のポリシーがあればそれとともに使用され、API 呼び出しによって得られた一
時的な認証情報でユーザーが何を行うことができるかを決定します。詳細については、次のトピッ
クを参照してください。
• AssumeRole、AssumeRoleWithSAML、AssumeRoleWithWebIdentity のアクセス権限 (p. 40)
• GetFederationToken のアクセス権限 (p. 43)
• GetSessionToken のアクセス権限 (p. 47)
• コンソールへのシングルサインオン(SSO)。SSO をサポートするために、AWS では、
一時的なセキュリティ認証情報を渡してフェデレーションエンドポイント(https://
signin.aws.amazon.com/federation)を呼び出すことができます。エンドポイントから返さ
API Version 2011-06-15
5
AWS Security Token Service 一時
的なセキュリティ認証情報の使用
AWS STS の価格
れるトークンを使用すると、パスワードを要求せずにユーザーを直接コンソールにサインインさせ
る URL を作成できます。詳細については、AWS セキュリティブログの「フェデレーティッドユー
ザーに AWS マネジメントコンソール への直接アクセスを許可する (p. 57)」および「AWS マネ
ジメントコンソールへのクロスアカウントアクセスを有効にする方法」を参照してください。
AWS STS の価格
AWS Security Token Service は追加料金なしで提供している AWS アカウントの組み込み機能です。
料金が発生するのは、AWS STS の一時的なセキュリティ認証情報によってアクセスされる他の AWS
サービスを使用するときのみです。他の AWS サービスの価格については、「Amazon Web Services
料金表のページ」を参照してください。
API Version 2011-06-15
6
AWS Security Token Service 一時
的なセキュリティ認証情報の使用
サードパーティサインインのモバイルアプリを作成する
一時的なアクセス権を付与するシナ
リオ
いくつかの理由で一時的なセキュリティ認証情報を使用することを選択する場合があります。このセ
クションでは、最も一般的なシナリオについて説明します。
トピック
• サードパーティサインインのモバイルアプリを作成する (p. 7)
• 組織の認証システムを使用して AWS リソースへのアクセスを許可する (p. 8)
• 組織の認証システムと SAML を使用して AWS リソースへのアクセスを許可する (p. 9)
• ウェブベースのシングルサインオン(SSO) (p. 10)
• API アクセスの委任 (p. 11)
• クロスアカウント API アクセス (p. 11)
サードパーティサインインのモバイルアプリを作
成する
開発者の Adele は、モバイルデバイス用のゲームを開発しています。スコアやプロファイルのような
ユーザーデータは、Amazon S3 と Amazon DynamoDB を使用して保存します。Adele はこのデータ
を1 つのデバイスにローカルに保存して、Amazon Cognito を使って他のデバイス間で同期を取ること
もできました。Amazon Cognito の詳細については Amazon Cognito を参照してください。彼女はセ
キュリティとメンテナンスの観点から、長期的な AWS セキュリティ認証情報をゲームで配布するべ
きではないということもわかっています。また、このゲームが多数のユーザーを集めることもわかっ
ています。以上のような理由から、IAM でプレーヤーごとに新しいユーザー ID を作成することはしま
せん。代わりに、ユーザーがよく知られた ID プロバイダー(Login with Amazon、Facebook、Google
など)や任意の OpenID Connect(OIDC)互換の ID プロバイダーで既に確立した ID を使用してサイ
ンインできるようにゲームを構築します。ゲームでは、このようなプロバイダーの認証メカニズムを
活用して、ユーザーの ID を検証できます。
Note
ほとんどのモバイルアプリケーションのシナリオでは、Amazon Cognito の使用をお勧めしま
す。このサービスを iOS 向け AWS モバイル SDK や Android および Fire OS 向け AWS モバ
API Version 2011-06-15
7
AWS Security Token Service 一時
的なセキュリティ認証情報の使用
組織の認証システムを使用して AWS
リソースへのアクセスを許可する
イル SDK と一緒に使用してユーザーの一意の ID を作成し、認証することで、AWS リソー
スへのセキュアなアクセスを実現できます。Amazon Cognito では、このセクションに示され
ているのと同じ ID プロバイダーがサポートされます。さらに、開発者が認証した ID と認証
されていない(ゲスト)アクセスもサポートされます。加えて、Amazon Cognito には、ユー
ザーがデバイスを変えてもユーザーデータが保持されるように、ユーザーデータを同期する
ための API も用意されています。詳細については、Amazon Cognito と Amazon Cognito ド
キュメントを参照してください。
モバイルアプリから AWS リソースにアクセスできるようにするために、まず Login with
Amazon、Facebook、Google、または任意の他の OIDC 互換 ID プロバイダーに開発者 ID を登録し
ます。また、これらのプロバイダーそれぞれについてアプリケーションを設定します。ゲーム用の
Amazon S3 バケットおよび DynamoDB テーブルを含む AWS アカウントで、Amazon Cognito を使
用して、ゲームに必要なアクセス権限を厳密に定義する IAM ロールを作成します。OIDC ID プロバイ
ダーを使用している場合は、IAM OIDC プロバイダーエンティティも作成して、AWS アカウントと
ID プロバイダーの間に信頼を確立します。
アプリのコードでは、前の手順で設定した ID プロバイダーのサインインインターフェイスを呼び出し
ます。プロバイダーがユーザーのサインイン操作をすべて処理し、アプリは OAuth アクセストークン
または OIDC ID トークンをプロバイダーから取得します。アプリは、この認証情報を、AWS アクセ
スキー ID、シークレットアクセスキー、およびセッショントークンで構成される一時的セキュリティ
認証情報のセットと交換できます。次に、アプリは、これらの認証情報を使用して AWS サービスに
アクセスできます。アプリは、引き受けるロールで定義されているアクセス権限に制限されます。
次の図は、この処理の流れを単純化して示しており、ID プロバイダーとして Login with Amazon を使
用しています。ステップ 2 については、アプリで、Facebook、Google、その他の OIDC 互換 ID プロ
バイダーを利用することもできますが、この図には示していません。
組織の認証システムを使用して AWS リソースへ
のアクセスを許可する
Example Corp. には、会社の AWS リソースにアクセスする社内アプリケーションを実行する必要の
ある従業員が多数います。従業員は、会社の ID および認証システムに既に ID があり、従業員ごとに
別の IAM ユーザーを作成することは望ましくありません。
Bob は、Example Corp. の開発者です。Example Corp. の社内アプリケーションで会社の AWS リ
ソースにアクセスできるようにするために、カスタム ID ブローカーアプリケーションを開発します。
このアプリケーションは、従業員が Example Corp. の既存の ID および認証システムにサインインし
ていることを確認します。これには、LDAP や Active Directory などのシステムを使用している可能性
があります。ID ブローカーアプリケーションは、従業員の一時的なセキュリティ認証情報を取得しま
API Version 2011-06-15
8
AWS Security Token Service 一時
的なセキュリティ認証情報の使用
組織の認証システムと SAML を使用し
て AWS リソースへのアクセスを許可する
す。このシナリオは、前のシナリオ(カスタム認証システムを使用するモバイルアプリ)に似ていま
す。ただし、AWS リソースにアクセスする必要のあるアプリケーションはすべて企業ネットワーク内
で実行され、会社には既存の認証システムがあります。
一時的なセキュリティ認証情報を取得するために、ID ブローカーアプリケーションは、ユー
ザーのポリシーの管理方法と一時的な認証情報の有効期限に応じて、AssumeRole または
GetFederationToken を呼び出して、一時的なセキュリティ認証情報を取得します(これらの API
の相違点について詳しくは、「一時的セキュリティ認証情報を取得する方法 (p. 3)」および「一時的
なセキュリティ認証情報のアクセス権限を制御する (p. 40)」を参照してください)。この呼び出
しは、AWS アクセスキー ID、シークレットアクセスキー、およびセッショントークンで構成される
一時的なセキュリティ認証情報を返します。ID ブローカーアプリケーションは、これらの一時的なセ
キュリティ認証情報を社内アプリケーションで使用できるようにします。アプリは、一時的な認証情
報を使用して AWS を直接呼び出すことができます。アプリは、認証情報をキャッシュし、有効期限
が切れると、新しい一時的な認証情報をリクエストします。このシナリオを以下に図で示します。
このシナリオでは以下が当てはまります。
• ID ブローカーアプリケーションが、AWS STS API にアクセスして一時的なセキュリティ認証情報
を作成するアクセス権限を持ちます。
• ID ブローカーアプリケーションが、従業員が既存の認証システム内で認証されていることを確認で
きます。
• ユーザーは、AWS マネジメントコンソール にアクセスする一時的な URL を入手できます(これ
は、シングルサインオンといいます)。
このシナリオで説明した ID ブローカーアプリケーションに似たサンプルアプリケーションを確認
するには、AWS サンプルコードとライブラリの「Active Directory ユースケースのための ID フェデ
レーションのサンプルアプリケーション」を参照してください。一時的なセキュリティ認証情報の
作成方法の詳細については、「一時的なセキュリティ認証情報の作成 (p. 12)」を参照してくださ
い。AWS マネジメントコンソール へのアクセスを取得するフェデレーティッドユーザーの詳細につ
いては、「フェデレーティッドユーザーに AWS マネジメントコンソール への直接アクセスを許可す
る (p. 57)」を参照してください。
組織の認証システムと SAML を使用して AWS リ
ソースへのアクセスを許可する
Clarisse は、SAML 2.0 準拠の ID プロバイダー(IdP)を使用して ID フェデレーションを実装して
いる組織で働く管理者です。Clarisse の組織では、ID プロバイダーが社内の ID ストアに対してユー
ザーを認証することができます。IdP は、続いて、ユーザーが誰であるかを示し、サービスプロバイ
API Version 2011-06-15
9
AWS Security Token Service 一時
的なセキュリティ認証情報の使用
ウェブベースのシングルサインオン(SSO)
ダーによる認証時に使用することのできる情報を含む SAML アサーションを作成できます。Clarisse
は、組織の ID プロバイダーを設定し、組織からの認証レスポンスを信頼できるサービスプロバイダー
として AWS を設定します。
Clarisse は、組織内のユーザーのコンピューターで実行され、Amazon S3 バケットにオブジェクトを
保存するアプリケーションを作成します。このアプリケーションは、ユーザー情報を取得し、ID プロ
バイダーに認証レスポンス(アサーション)を求めることができます。続いて、アサーションと追加
情報を渡して、AWS STS の AssumeRoleWithSAML API を呼び出すことができます。
この API は、一時的なセキュリティ認証情報を返します。Clarisse のアプリケーションはそれを使用
して、AWS を直接呼び出すことができます。このシナリオを以下に図で示します。
このシナリオは、前のシナリオ(組織の既存の ID システムを使用)に似ています。ただし、Clarisse
の組織は SAML 2.0 を使用しているため、組織の SAML ID プロバイダーは、ユーザーの ID の確認、
および、サービスプロバイダーに渡すことのできる情報の生成に伴う作業の多くを、セキュリティ情
報のオープンスタンダードを利用して実行することができます。AWS は、SAML 2.0 をサポートして
おり、それを利用して、信頼を確立することができ、ユーザーのアクセス権限を決定する IAM ロール
にアサーションを対応付けることができます。
詳細については、「AWS STS SAML 2.0 ベースのフェデレーションについて (p. 22)」を参照して
ください。
ウェブベースのシングルサインオン(SSO)
組織の管理グループに属する一部のユーザーは、AWS マネジメントコンソール に移動して Amazon
EC2 インスタンスを管理できる必要があります。管理ユーザーごとに新しい IAM ユーザーを作成し、
それらのユーザーが AWS マネジメントコンソール に再度サインインするのは望ましくありません。
代わりに、ユーザー用の SSO 環境を構築できます。ユーザーは組織のポータルにアクセスして、サ
インインを済ませます。ポータルから、ユーザーは AWS マネジメントコンソール に移動するオプ
ションを選択できます。ユーザーの AWS アクセスが許可されている場合、ユーザーは再度サインイ
ンすることなく、AWS マネジメントコンソール にリダイレクトされます。背後では、ユーザーの認
証情報が、AWS でユーザーが許可されていることを決定する IAM ロールに関連付けられた一時的な
セキュリティ認証情報と交換されます。
以下の方法で SSO を設定できます。
API Version 2011-06-15
10
AWS Security Token Service 一時
的なセキュリティ認証情報の使用
API アクセスの委任
• 組織に SAML 2.0(Security Assertion Markup Language 2.0)を統合した ID システムがある場合
は、組織と IAM をセットアップして、ユーザーがシームレスに AWS マネジメントコンソール にリ
ダイレクトされるようにできます。詳細については、「SAML を使用してフェデレーティッドユー
ザーに AWS コンソールへのアクセスを許可する (p. 57)」を参照してください。
• そのほかのシナリオの場合は、ID 情報を含む URL を作成し、それをユーザーに配布して、AWS マ
ネジメントコンソール に対する安全な直接アクセスを許可するコードを書くことができます。詳細
については、「URL を作成してフェデレーティッドユーザーに AWS コンソールへのアクセスを許
可する (p. 62)」を参照してください。
API アクセスの委任
IAM ロールでは、AWS サービスに API アクセスを委任できます(サードパーティのサービスを含
む)。そのため、サービスは一時的なセキュリティ認証情報を使用して組織の AWS リソースにアク
セスできます。認証された IAM ユーザーまたはサービスは、一時的なセキュリティ認証情報を使用し
て、ロール内で定義されたリソースにアクセスできます。
詳細については、『IAM ユーザーガイド』の「ロールを使用した API アクセスの委任」を参照してく
ださい。
クロスアカウント API アクセス
時折、ユーザーが複数の AWS アカウントわたってアクセスしなければいけないリソースがあるかも
しれません。このアクセスを許可するには、アカウント間で信頼を築くことで、あるアカウントの
ユーザーは他のアカウントにあるリソースにアクセスすることができます。IAM ロールを使用して、
信頼するエンティティおよびユーザーに許可を与えるアクションを定義します。
詳細については、『IAM ユーザーガイド』の「クロスアカウント API アクセスを有効にする」を参照
してください。
API Version 2011-06-15
11
AWS Security Token Service 一時
的なセキュリティ認証情報の使用
一時的なセキュリティ認証情報の作
成
このトピックでは、AWS Security Token Service(AWS STS)API を使用して一時的なセキュリティ
認証情報を作成する方法について説明します。サポートされる SDK を使用して一時的なセキュリティ
認証情報を作成する方法については、「一時的セキュリティ認証情報を取得する方法 (p. 3)」を参照し
てください。
Note
デフォルトでは、AWS STS は https://sts.amazonaws.com に単一のサービスエンドポ
イントを持つグローバルサービスです。このエンドポイントは 米国東部(バージニア北部)
リージョンにマップされますが、このサービスによって提供される認証情報は世界中で機能
します。お客様に地理的に近い場所にあるエンドポイントから認証リクエストを実行するこ
とによって、レイテンシーを低減するために、追加リージョンでエンドポイントを有効にす
ることを選択できます。認証情報を取得したリージョンに関係なく、認証情報は常に同じよ
うに動作し続けます。アカウントで追加のリージョンを有効にする方法については、「新し
いリージョンでの AWS STS のアクティブ化 (p. 70)」を参照してください。追加リージョ
ンを有効にした後、有効なリージョンの 1 つに AWS STS リクエストを割り振る手順につい
ては、適切な SDK を参照してください。
一時的なセキュリティ認証情報の作成方法は、その使用目的に応じて変わります。
• ユーザーが Login with Amazon、Facebook、Google を使用するか、または OpenID Connect
(OIDC) 互換 ID プロバイダーを使用して認証した後、モバイルアプリ用の一時的なセキュリティ認
証情報を取得するには、AssumeRoleWithWebIdentity API アクションを使用します。モバイル
アプリで Amazon Cognito を使用している場合は、モバイル開発用の AWS SDK に含まれている
Amazon Cognito 認証情報プロバイダーを使用できます。これにより、AWS に対するリクエストを
実行するために使用できる一時的なセキュリティ認証情報が返されます。詳細については、『AWS
Mobile SDK for Android Developer Guide』の「Amazon Cognito ID」および『AWS Mobile SDK for
iOS Developer Guide』の「Amazon Cognito ID」を参照してください。
Amazon Cognito を使用していない場合は、AssumeRoleWithWebIdentity アクションを呼び出
します。これは無署名の呼び出しです。つまり、アプリが AWS セキュリティ認証情報にアクセス
API Version 2011-06-15
12
AWS Security Token Service 一時
的なセキュリティ認証情報の使用
できなくても呼び出すことができます。AssumeRoleWithWebIdentity 呼び出しは、認証情報が
持つアクセス権限を指定する IAM ロールに関連付けられた一時的なセキュリティ認証情報を返しま
す。
ウェブ ID フェデレーションの仕組みとその設定の基本の詳細については、「AWS STS ウェブ ID
フェデレーションについて (p. 14)」を参照してください。
• SAML 2.0(Security Assertion Markup Language)をサポートする組織の一時的なセキュリティ認
証情報を取得するには、AssumeRoleWithSAML API アクションを使用します。この場合、その組
織は SAML 対応の ID プロバイダーの役割を果たし、AWS はサービスプロバイダーの役割を果たし
ます。組織のアプリケーションは、一時的なセキュリティ認証情報と交換される SAML アサーショ
ンを使用して AssumeRoleWithSAML API を呼び出します。一時的なセキュリティ認証情報に付与
されるアクセス権限は、引き受ける IAM ロールで定義されます。
SAML 2.0 を使用したエンタープライズフェデレーションの仕組みとその設定の基本については、
「AWS STS SAML 2.0 ベースのフェデレーションについて (p. 22)」を参照してください。
• 別の AWS アカウントの IAM ユーザー、または AWS サービス(Amazon EC2 など)用の一時的な
セキュリティ認証情報を取得する場合、アプリケーションまたはサービスで AssumeRole を呼び出
します。この API アクションで引き受けるロールでは、そのユーザーまたはサービスをプリンシパ
ルとして設定している必要があります。引き受けるエンティティを AWS ルートアカウントにする
ことはできません。
• カスタムプロキシアプリケーションを使用して認証されるフェデレーティッドユーザーの一時的
なセキュリティ認証情報を取得する場合(たとえば、ユーザーがエンタープライズネットワーク
の SAML 2.0 互換ではない ID システムによって認証される場合)、プロキシアプリケーションで
AssumeRole または GetFederationToken を呼び出します。
Note
お客様のシナリオで GetFederationToken によって サポートされて違いのうち 1 つを必
要とする場合以外は、AssumeRole を使用することをお勧めします。主な違いは次のとお
りです。
• AssumeRole は、API 呼び出しに含まれているオプションのポリシーでフィルタリング
されたアクセス権限を持つロールにマッピングされる認証情報を返します。
GetFederationToken の呼び出しは、API 呼び出しを実行する IAM ユーザーのアクセ
ス権限を使用して開始され、認証情報ができることを制限する必須のポリシーでフィル
タリングされます。
• AssumeRole は、ユーザーが多要素認証 (MFA) を使用してサインインした場合にのみ動
作するように設定できます。
GetFederationToken は、MFA を要求するように設定できません。
• AssumeRole によって返される認証情報は、複数 AWS のアカウントのリソースにアク
セスするために使用できます。
GetFederationToken によって返される認証情報は、単一の AWS アカウントのリソー
スにアクセスするためにのみ使用できます。
• AssumeRole によって返される認証情報の有効期間は最大 1 時間です。
GetFederationToken によって返される認証情報の有効期間は最大 36 時間です。
• AssumeRole によって返される認証情報を使用して、GetFederationToken や
GetSessionToken を除くすべての API を呼び出すことができます。
GetFederationToken によって返される認証情報は、AWS マネジメントコンソールへ
のシングルサインオン (SSO) の場合を除き、AWS STS または IAM の API を呼び出すこ
とはできません。
• 独自に利用する一時的なセキュリティ認証情報を取得する場合、IAM ユーザーは
GetSessionToken を呼び出すことができます。GetSessionToken を使用するにあたって、ユー
ザーに明示的なアクセス権限は必要ありません。これは、すべての IAM ユーザーが利用できま
API Version 2011-06-15
13
AWS Security Token Service 一時
的なセキュリティ認証情報の使用
AWS STS ウェブ ID フェデレーションについて
す。API を呼び出すときに MFA 保護を必要とする場合は、AssumeRole を呼び出すことができま
す。詳細については、「MFA で保護された API アクセスの設定」を参照してください。
• AWS マネジメントコンソールへのシングルサインオン(SSO)をサポートするために一時的なセ
キュリティ認証情報を取得するには、フェデレーションエンドポイントを使用します。この場合、
ネットワークにサインイン済みの組織のユーザーが、IAM のユーザー ID がなくても、AWS に再度
サインインしなくても、コンソールにアクセスできるようになります。詳細については、「フェデ
レーティッドユーザーに AWS マネジメントコンソール への直接アクセスを許可する (p. 57)」
を参照してください。
ユーザーのアクセス権限を制御する方法の概要については、「IAM ポリシーの管理」を参照してくだ
さい。AWS STS API については、『AWS Security Token Service API リファレンス』で詳しく説明さ
れています。
Important
一時的なセキュリティ認証情報をいったん取得すると、それを取り消すことはできません。
ただし、有効期限が切れる前に一時的なセキュリティ認証情報を無効にする必要がある場合
は、アクセス権限が関連付けられている IAM ユーザーまたはロールのアクセス権限を変更ま
たは無効にすることができます。これらのアクセス権限の変更は、一時的な認証情報の有効
期限が切れていなくても、すべての AWS リージョンに変更が反映されると、ただちに適用さ
れます。ルートユーザーのアクセス権限を制限することはできないため、ルートアカウント
の認証情報を使用して一時的なセキュリティ認証情報を作成しないことを強くお勧めします
(AssumeRole アクションは、ルート認証情報を使用したリクエストに対してはアクセスを
拒否します)。詳細については、「一時的なセキュリティ認証情報のアクセス権限を無効に
する (p. 48)」を参照してください。
このセクションのトピック:
• AWS STS ウェブ ID フェデレーションについて (p. 14)
• AWS STS SAML 2.0 ベースのフェデレーションについて (p. 22)
• 一時的なセキュリティ認証情報を作成するための AWS API (p. 26)
• 一時的なセキュリティ認証情報を作成するためのアクセス権限の付与 (p. 36)
• 一時的なセキュリティ認証情報を作成して、IAM ユーザーのアクセスを有効にする (p. 38)
AWS STS ウェブ ID フェデレーションについて
モバイルデバイスで実行され、Amazon S3 および DynamoDB を使用してプレイヤーとスコアの情報
を保存するゲームのような、AWS リソースにアクセスする必要があるモバイルアプリを作成している
とします。
AWS サービスへのほとんどのリクエストは、AWS アクセスキーで署名する必要があります。ただ
し、ユーザーのデバイスにダウンロードされるアプリでは、暗号化されたストアであっても、長期
的な AWS 認証情報を埋め込んで配布しないことを強くお勧めします。代わりに、ウェブ ID フェデ
レーションを使用して一時的な AWS セキュリティ認証情報をリクエストするようにアプリを構築し
ます。認証情報は、モバイルアプリケーションで必要とされるタスクの実行に必要なアクセス権限の
みを持つ AWS ロールにマッピングされます。
ウェブ ID フェデレーションを使用すると、カスタムサインインコードを作成したり独自のユーザー
ID を管理したりする必要はありません。代わりに、アプリのユーザーはよく知られている ID プロバ
イダー(Login with Amazon、Facebook、Google、またはその他の任意の OpenID Connect (OIDC) 互
換 ID プロバイダー)を使用してサインインし、その外部 ID を AWS アカウントのリソースを使用す
るためのアクセス権限を持つ AWS ロールにマッピングし、AWS の一時的なセキュリティ認証情報に
変換することができます。ID プロバイダーを使用すると、アプリケーションで長期的なセキュリティ
認証情報を埋め込んで配布する必要がないため、AWS アカウントの安全性の維持に役立ちます。
API Version 2011-06-15
14
AWS Security Token Service 一時
的なセキュリティ認証情報の使用
モバイルアプリへの Amazon Cognito の使用
ほとんどのシナリオに対しては、Amazon Cognito の使用をお勧めします。AWS SDK for iOS および
AWS SDK for Android を使用して、AWS でサポートされている ID プロバイダーを使用しているユー
ザーに一意の ID を作成することができます。Amazon Cognito では、認証されていない(ゲスト)
アクセスもサポートされ、ユーザーがサインインしたときにユーザーデータを移行することができ
ます。Amazon Cognito には、ユーザーがデバイスを変えてもユーザーデータが保持されるように、
ユーザーデータを同期するための API が用意されています。詳細については、以下を参照してくださ
い。
• 『iOS 向け AWS モバイル SDK 開発者ガイド』の「Amazon Cognito ID」
• 『Android 向け AWS モバイル SDK 開発者ガイド』の「Amazon Cognito ID」
Amazon Cognito を使用しない場合は、コードを記述して、ウェブ ID プロバイダー(Login with
Amazon、Facebook、Google、または他の任意の OIDC 互換 ID プロバイダー)とやり取り
し、AssumeRoleWithWebIdentity API を呼び出して、これらのプロバイダーから取得した認証
トークンを一時的なセキュリティ認証情報と交換する必要があります。既存のアプリで既にこのアプ
ローチを使用している場合は、それを使い続けたい場合もあるでしょう。
トピック
• モバイルアプリへの Amazon Cognito の使用 (p. 15)
• モバイルアプリへのウェブ ID フェデレーション API の使用 (p. 16)
• モバイルアプリに AWS アクセスを許可するロールを作成する (p. 17)
• ウェブ ID フェデレーションを使用してプロバイダー、アプリ、ユーザーを識別する (p. 19)
• ウェブアイデンティティフェデレーションに関するその他のリソース (p. 21)
モバイルアプリへの Amazon Cognito の使用
ウェブ ID フェデレーションの推奨される使い方は、Amazon Cognito を使用することです。次の一覧
は、Amazon Cognito を使用してユーザーを認証し、アプリに AWS サービスへのアクセスを与える
ための処理をまとめたものです。このシナリオを実行するための具体的な手順については、Amazon
Cognito のドキュメントを参照してください。
1. (オプション)Login with Amazon、Facebook、Google、または他の任意の OpenID
Connect(OIDC)互換 ID プロバイダーで開発者としてサインアップし、プロバイダーで 1 つ以上
のアプリを設定します。Amazon Cognito ではユーザーの認証されていない(ゲスト)アクセスが
サポートされているので、この手順はオプションです。
2. AWS マネジメントコンソール で Amazon Cognito に移動します。Amazon Cognito ウィザードを使
用して ID プールを作成します。これは、アプリのために Amazon Cognito がエンドユーザー ID を
整理しておくために使用するコンテナです。ID プールは、アプリ間で共有できます。ID プールを
セットアップするときに、Amazon Cognito ユーザーのアクセス権限を定義する 1 つまたは 2 つの
IAM ロールを作成します (1 つは認証された ID 用、2 つ目は認証されていない「ゲスト」ID 用)。
3. iOS 向け AWS SDK または Android 向け AWS SDK をダウンロードしてアプリと統合し、Amazon
Cognito の使用に必要なファイルをインポートします。
4. ID プール ID、AWS アカウント番号、および ID プールに関連付けたロールの Amazon リソー
スネーム(ARN)を渡して、Amazon Cognito 認証情報プロバイダーのインスタンスを作成しま
す。AWS マネジメントコンソール の Amazon Cognito ウィザードによって、作業の開始に役立つ
サンプルコードが提供されます。(現在、iOS および Android 向けのサンプルコードだけが利用可
能です)。
5. アプリが AWS サービスにアクセスするときに、認証情報プロバイダーインスタンスをクライアン
トオブジェクトに渡します。このオブジェクトが、一時的なセキュリティ認証情報をクライアント
に渡します。認証情報のアクセス権限は、前に定義したロールに基づいています。
詳細については、以下を参照してください。
API Version 2011-06-15
15
AWS Security Token Service 一時
的なセキュリティ認証情報の使用
モバイルアプリへのウェブ ID
フェデレーション API の使用
• 『AWS Mobile SDK for Android Developer Guide』の「Amazon Cognito ID」
• 『AWS Mobile SDK for iOS Developer Guide』の「Amazon Cognito ID」
モバイルアプリへのウェブ ID フェデレーション
API の使用
ほぼすべてのウェブ ID フェデレーションシナリオで、Amazon Cognito を使用することをお勧めしま
す。Amazon Cognito は使いやすく、匿名(認証されていない)アクセスのような追加機能が用意さ
れていて、複数のデバイスおよびプロバイダーにわたってユーザーデータが同期されます。ただし、
手動で AssumeRoleWithWebIdentity API を呼び出すことによってウェブ ID フェデレーションを
使用するアプリを既に作成してある場合は、それを使用し続けることができ、アプリは引き続き正常
に動作します。
Note
ウェブ ID フェデレーションの仕組みを理解する一助として、Web Identity Federation
Playground を利用できます。」は、インタラクティブなウェブサイトで、Login with
Amazon、Facebook、または Google を介して認証を行い、一時的なセキュリティ認証情報を
取得し、その認証情報を使用して AWS にリクエストを行うプロセスを体験できます。
次の一覧は、Amazon Cognito を使用せずにウェブ ID フェデレーションを使用するための処理をまと
めたものです。
1. 開発者として ID プロバイダーにサインアップします。アプリでプロバイダーの設定をします。そ
の際に、プロバイダーからアプリ独自の ID が与えられます(プロバイダーが異なると、このプロ
セスを指す用語も異なります。ここでは、プロバイダーに対してアプリを識別するプロセスを設
定と呼びます)。プロバイダーごとにプロバイダーに特有のアプリ ID が与えられるため、複数の
プロバイダーの設定をすれば、アプリは複数のアプリ ID を持ちます。プロバイダーごとに複数の
アプリを設定できます。
以下の外部リンクで、ID プロバイダーそれぞれの使用方法に関する情報が入手できます。
• Login with Amazon 開発者センター
• Facebook 開発者サイトの「アプリまたはウェブサイトに Facebook ログインを追加する」
• Google 開発者サイトの「ログインでの OAuth 2.0 の使用(OpenID Connect)」
2. AWS で、1 つ以上の IAM ロールを作成します。ロールごとに、誰がそのロールを引き受けること
ができるか(信頼ポリシーまたは信頼関係)、アプリのユーザーがどのアクセス権限を持つか(ア
クセスポリシー)を定義します。
各アプリで ID プロバイダーごとに 1 つのロールを作成します。たとえば、ユーザーが Login with
Amazon を使用してサインインするアプリケーションで想定できるロール、ユーザーが Facebook
を使用してサインインする同じアプリケーションの 2 つ目のロール、およびユーザーが Google を
使用してサインインするアプリケーションの 3 つ目のロールを作成します。信頼関係の場合、ID プ
ロバイダー(Amazon.com など)をフェデレーテッドプリンシパル(信頼されたエンティティ)と
して指定し、アプリの ID と一致する条件を含めます。異なるプロバイダーのロールの例は、この
トピックで後述します。
3. アプリケーションで、Login with Amazon、Facebook、Google、または OIDC 互換プロバイダーを
使用してユーザーを認証します。そのためには、ID プロバイダーが提供するインターフェイスを使
用してそのプロバイダーを呼び出します。たとえば、API を呼び出して、ユーザーの認証情報と、
プロバイダーが必要とするその他の情報を渡します。ユーザーを認証するときの正確な方法は、プ
ロバイダーおよびアプリケーションを実行しているプラットフォームによって異なります。一般的
に、ユーザーがまだサインインしていない場合、ID プロバイダーはそのプロバイダーのサインイン
ページを表示するように対処します。ID プロバイダーはユーザーを認証した後、トークンをアプリ
に返します。
API Version 2011-06-15
16
AWS Security Token Service 一時
的なセキュリティ認証情報の使用
モバイルアプリに AWS アクセ
スを許可するロールを作成する
4. アプリで、AssumeRoleWithWebIdentity アクションを未署名で呼び出して一時的なセキュリ
ティ認証情報をリクエストします。リクエストでは、ID プロバイダーのトークンを渡し、その ID
プロバイダー用に作成した IAM ロールの Amazon リソースネーム(ARN)を指定します。AWS
は、トークンが信頼されていて有効であることを確認します。確認できた場合、AWS STS は、リ
クエストで指定したロールから派生するアクセス権限を持つ一時的なセキュリティ認証情報をアプ
リに返します。レスポンスには、ユーザーに ID プロバイダーが割り当てた一意のユーザー ID な
ど、ユーザーに関する ID プロバイダーからのメタデータも含まれます。
5. AssumeRoleWithWebIdentity のレスポンスで返された一時的なセキュリティ認証情報を使用
して、アプリから AWS API への署名付きリクエストを実行します。ID プロバイダーから返され
るユーザー ID を使用してユーザーを区別できます。ユーザー ID をプレフィックスとして含む
Amazon S3 フォルダーにオブジェクトを配置することができます。こうすることで、そのフォル
ダーをロックするアクセス制御ポリシーを作成して、その ID を持つユーザーのみがフォルダーに
アクセスできるようにすることができます。詳細については、このトピックで後述する「ウェブ ID
フェデレーションを使用してプロバイダー、アプリ、ユーザーを識別する (p. 19)」を参照して
ください。
6. 一時的なセキュリティ認証情報をキャッシュに格納すると、アプリは AWS への要求を実行す
るたびに新しい証明書を取得する必要がありません。デフォルトで、認証情報は 1 時間有効で
す。認証情報が失効すると(または失効前に)、AssumeRoleWithWebIdentity を呼び出し
て新しい 1 組の一時的なセキュリティ認証情報を取得します。ID プロバイダーと、そのトー
クンの管理方法によっては、AssumeRoleWithWebIdentity を新しく呼び出す前に、プロバ
イダーのトークンを更新する必要があります。プロバイダーのトークンも通常は一定期間後に
失効するためです(iOS 向け AWS SDK または Android 向け AWS SDK を使用している場合
は、AmazonSTSCredentialsProvider アクションを使用することができます。これは、AWS STS 認
証情報を管理し、必要に応じて認証情報を更新します)。
ID プロバイダーを呼び出してユーザーを認証する
アプリでは、ユーザーがサインインすると、アプリに設定した ID プロバイダーの認証プロセ
スを呼び出します。この具体的な方法は、どの ID プロバイダーを使用しているか(Login with
Amazon、Facebook、または Google)、および、どのプラットフォームでアプリが実行されているか
の両方に応じて変わります。たとえば、Android アプリは、iOS アプリや JavaScript ベースのウェブ
アプリとは異なる認証方法を使用することができます。
一般に、認証プロセスは、認証されたユーザーを表すトークンをアプリに返します。プロバイダーが
公開する情報と、ユーザーが共有する情報に応じて、ユーザーに関する追加情報も入手できます。こ
の情報はアプリで利用できます。
モバイルアプリに AWS アクセスを許可するロール
を作成する
モバイルアプリにリソースへのアクセスを許可するには、アプリが引き受けることのできる IAM ロー
ルを 1 つ以上作成する必要があります。あらゆるロールと同様に、モバイルアプリ用のロールにも
ポリシーが 2 つ含まれています。1 つは、誰がロールを引き受けることができるか(信頼されたエン
ティティまたはプリンシパル)を指定する信頼ポリシーです。もう 1 つは、モバイルアプリでアクセ
スが許可または拒否される実際の AWS アクションおよびリソースを指定するアクセスポリシーで、
これはユーザーポリシーやリソースポリシーに似ています。
信頼ポリシーは、sts:AssumeRoleWithWebIdentity アクションの Allow 効果を付与する必要が
あります。このロールでは、ロールを特定のアプリケーションのみが引き受けることができるよう
に、次の 2 つの値を使用します。
• Principal 要素で、{"Federated":providerUrl} 文字列を使用します。OpenID
Connect(OIDC)プロバイダーの場合、providerUrl は、IAM で作成した OIDC プロバイダーの
完全修飾 URL です。以下の方法で、プリンシパルを指定できます。
"Principal":{"Federated":"cognito-identity.amazonaws.com"}
API Version 2011-06-15
17
AWS Security Token Service 一時
的なセキュリティ認証情報の使用
モバイルアプリに AWS アクセ
スを許可するロールを作成する
"Principal":{"Federated":"www.amazon.com"}
"Principal":{"Federated":"graph.facebook.com"}
"Principal":{"Federated":"accounts.google.com"}
• Condition 要素で、StringEquals 条件を使用して、リクエストの ID プール ID(Amazon
Cognito の場合)またはクライアント ID や閲覧者と呼ばれるアプリ ID(他のプロバイダーの場合)
が、アプリに ID プロバイダーを設定したときに入手したアプリ ID と一致するかどうかをテストし
ます。こうすることで、リクエストが自分のアプリから来ていることを確認できます。ポリシーで
は、次のポリシー変数を対象としてアプリ ID をテストできます。
cognito-identity.amazonaws.com:aud
www.amazon.com:app_id
graph.facebook.com:app_id
accounts.google.com:aud
OIDC プロバイダーの場合は、以下の例のように、OIDC プロバイダーの完全修飾 URL と aud コン
テキストキーを使用します。
server.example.com:aud
ロールでプリンシパルとして指定する値は、ID プロバイダーごとに異なることに注意してください。
ロールで指定できるプリンシパルは 1 種類のみです。したがって、モバイルアプリでユーザーが複数
の ID プロバイダーを使用してサインインできるようにした場合は、ID プロバイダーごとにロールを
作成する必要があります。
Note
信頼されたエンティティ用のポリシーではプロバイダーとアプリ ID を表すポリシー変数を使
用しているため、ポリシーの Version 要素を 2012-10-17 に設定する必要があります。
Amazon Cognito を使用している場合は、Amazon Cognito コンソールでロールをセットアップできま
す。それ以外の場合は、IAM コンソールを使用して、ウェブ ID フェデレーション用のロールを作成で
きます。コンソールでは、ロールタイプとして [Roles for Web Identity Provider Access] を選択でき、
その後、順を追って、プリンシパルを設定し、アプリ ID をテストする条件を作成することができま
す。詳細については、『IAM ユーザーガイド』の「ウェブ ID フェデレーション用にロールを作成す
る」を参照してください。
以下の例は、ユーザーが Login with Amazon を使用してサインインした場合に、モバイルアプリで引
き受けるロールの信頼ポリシーを示しています。この例では、Login with Amazon を使用するアプリ
を設定したときに割り当てられたアプリ ID が amzn1.application-oa2-123456 であると仮定して
います。
{
"Version": "2012-10-17",
"Id": "RoleForLoginWithAmazon",
"Statement": [{
"Effect": "Allow",
"Principal": {"Federated": "www.amazon.com"},
"Action": "sts:AssumeRoleWithWebIdentity",
"Condition": {"StringEquals": {"www.amazon.com:app_id":
"amzn1.application-oa2-123456"}}
}]
}
API Version 2011-06-15
18
AWS Security Token Service 一時
的なセキュリティ認証情報の使用
ウェブ ID フェデレーションを使用してプ
ロバイダー、アプリ、ユーザーを識別する
以下の例は、ユーザーが Facebook を使用してサインインした場合に、モバイルアプリで引
き受けるロールの信頼ポリシーを示しています。Facebook によって割り当てられたアプリ ID
は、111222333444555 であると仮定しています。
{
"Version": "2012-10-17",
"Id": "RoleForFacebook",
"Statement": [{
"Effect": "Allow",
"Principal": {"Federated": "graph.facebook.com"},
"Action": "sts:AssumeRoleWithWebIdentity",
"Condition": {"StringEquals": {"graph.facebook.com:app_id":
"111222333444555"}}
}]
}
以下の例は、ユーザーが Google を使用してサインインした場合に、モバイルアプリで引
き受けるロールの信頼ポリシーを示しています。Google によって割り当てられたアプリ ID
は、666777888999000 であると仮定しています。
{
"Version": "2012-10-17",
"Id": "RoleForGoogle",
"Statement": [{
"Effect": "Allow",
"Principal": {"Federated": "accounts.google.com"},
"Action": "sts:AssumeRoleWithWebIdentity",
"Condition": {"StringEquals": {"accounts.google.com:aud":
"666777888999000"}}
}]
}
以下の例は、アプリケーションが Amazon Cognito を使っている場合に、モバイルアプリで引き受け
るロールのポリシーを示しています。us-east:12345678-ffff-ffff-ffff-123456 は Amazon
Cognito によって割り当てられた ID プール ID として想定されます。
{
"Version": "2012-10-17",
"Id": "RoleForCognito",
"Statement": [{
"Effect": "Allow",
"Principal": {"Federated": "cognito-identity.amazonaws.com"},
"Action": "sts:AssumeRoleWithWebIdentity",
"Condition": {"StringEquals": {"cognito-identity.amazonaws.com:aud": "useast:12345678-ffff-ffff-ffff-123456"}}
}]
}
ウェブ ID フェデレーションを使用してプロバイ
ダー、アプリ、ユーザーを識別する
IAM でアクセスポリシーを作成するときに、設定されたアプリと、ID プロバイダーを使用して認証さ
れたユーザーの ID に基づいてアクセス権限を指定できると、便利です。たとえば、ウェブ ID フェデ
レーションを使用するモバイルアプリは、次のような形式で Amazon S3 に情報を保存することがで
きます。
API Version 2011-06-15
19
AWS Security Token Service 一時
的なセキュリティ認証情報の使用
ウェブ ID フェデレーションを使用してプ
ロバイダー、アプリ、ユーザーを識別する
myBucket/app1/user1
myBucket/app1/user2
myBucket/app1/user3
...
myBucket/app2/user1
myBucket/app2/user2
myBucket/app2/user3
...
また、さらに、これらのパスをプロバイダー別に区別することもできます。その場合、形式は次のよ
うになります(場所をとらないように 2 つのプロバイダーだけを示します)。
myBucket/Amazon/app1/user1
myBucket/Amazon/app1/user2
myBucket/Amazon/app1/user3
...
myBucket/Amazon/app2/user1
myBucket/Amazon/app2/user2
myBucket/Amazon/app2/user3
myBucket/Facebook/app1/user1
myBucket/Facebook/app1/user2
myBucket/Facebook/app1/user3
...
myBucket/Facebook/app2/user1
myBucket/Facebook/app2/user2
myBucket/Facebook/app2/user3
...
この形式では、app1 と app2 は、ゲームなどの異なるアプリを表し、アプリのユーザーごとに個別の
フォルダーが作成されます。app1 と app2 の値は、ユーザーが割り当てたわかりやすい名前(たとえ
ば、mynumbersgame)でも、アプリを設定したときにプロバイダーが割り当てたアプリ ID でもかま
いません。パスにプロバイダー名を含める場合は、それも Cognito、Amazon、Facebook、Google
のような、わかりやすい名前にできます。
アプリケーション名は静的な値であるため、通常、AWS マネジメントコンソール を使って
app1 と app2 用のフォルダーを作成できます。プロバイダー名も静的な値であるため、これ
はプロバイダー名をパスに含める場合も同様です。これに対して、ユーザー固有のフォルダー
(user1、user2、user3など)は、AssumeRoleWithWebIdentity にリクエストして返された
SubjectFromWebIdentityToken 値にあるユーザー ID を使用して、実行時にアプリ側で作成する
必要があります。
個々のユーザーにリソースへの排他的アクセスを許可するポリシーを作成するには、アプリ名およ
びプロバイダー名も含めて(使用している場合)、完全に一致するフォルダー名を使用します。続い
て、プロバイダーから返されるユーザー ID を参照する、次のようなプロバイダー固有のキーの値を含
めます。
• cognito-identity.amazonaws.com:sub
• www.amazon.com:user_id
• graph.facebook.com:id
• accounts.google.com:sub
OIDC プロバイダーの場合は、以下の例のように、OIDC プロバイダーの完全修飾 URL と sub コンテ
キストキーを使用します。
• server.example.com:sub
API Version 2011-06-15
20
AWS Security Token Service 一時
的なセキュリティ認証情報の使用
ウェブアイデンティティフェデレー
ションに関するその他のリソース
次の例は、バケットのプレフィックスが文字列に一致する場合にのみ、Amazon S3 のバケットへのア
クセスを許可するアクセスポリシーを示します。
myBucket/Amazon/mynumbersgame/user1
この例では、ユーザーが Login with Amazon を使用してサインインし、mynumbersgame というをア
プリを使用していると仮定しています。ユーザーの一意の ID は、user_id と呼ばれる属性として表
示されます。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": ["s3:ListBucket"],
"Resource": ["arn:aws:s3:::myBucket"],
"Condition": {"StringLike": {"s3:prefix": ["Amazon/mynumbersgame/
${www.amazon.com:user_id}/*"]}}
},
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:PutObject",
"s3:DeleteObject"
],
"Resource": [
"arn:aws:s3:::myBucket/amazon/mynumbersgame/
${www.amazon.com:user_id}",
"arn:aws:s3:::myBucket/amazon/mynumbersgame/
${www.amazon.com:user_id}/*"
]
}
]
}
同様のポリシーを、Amazon Cognito、Facebook、Google、または他の OpenID Connect 互換 ID プロ
バイダーを使用してサインインしたユーザー向けにも作成します。これらのポリシーでは、パスの一
部として別のプロバイダー名を使用し、異なるアプリ ID を使用します。
ポリシーの条件チェックで利用可能なウェブ ID フェデレーションのキー
の詳細については、「http://docs.aws.amazon.com/IAM/latest/UserGuide/
AccessPolicyLanguage_ElementDescriptions.html#condition-keys-wif」を参照してください。
ウェブアイデンティティフェデレーションに関する
その他のリソース
ウェブアイデンティティフェデレーションの詳細を理解するのに、次のリソースが役に立ちます。
• 『AWS Mobile SDK for Android Developer Guide』の「Amazon Cognito ID」および『AWS Mobile
SDK for iOS Developer Guide』の「Amazon Cognito ID」
• Web Identity Federation Playground は、対話的なウェブサイトで、Login with
Amazon、Facebook、または Google を使って認証し、一時的なセキュリティ認証情報を取得した
後、その認証情報を使用して AWS にリクエストするプロセスを体験できます。
• AWS .NET Development ブログの記事「.NET 向け AWS SDK を使用したウェブ ID フェデ
レーション」では、ウェブ ID フェデレーションと Facebook を使用する方法について説明
API Version 2011-06-15
21
AWS Security Token Service 一時
的なセキュリティ認証情報の使用
AWS STS SAML 2.0 フェデレーションについて
し、AssumeRoleWithWebIdentity を呼び出す方法を示す C# コード例と、Amazon S3 バケット
にアクセスするためにその API から得た一時的なセキュリティ認証情報を使用する方法を示す C#
コード例を掲載しています。
• 「AWS SDK for iOS」と「AWS SDK for Android」には、サンプルアプリケーションが用意されて
います。このアプリケーションには、ID プロバイダーを呼び出す方法、そのプロバイダーからの情
報を使用して、一時的なセキュリティ認証情報を取得および使用する方法を示すコードが含まれて
います。
• 記事「Web Identity Federation with Mobile Applications」では、ウェブ ID フェデレーションについ
て説明し、ウェブ ID フェデレーションを使用して Amazon S3 のコンテンツにアクセスする例を挙
げています。
AWS STS SAML 2.0 ベースのフェデレーション
について
AWS は Security Assertion Markup Language (SAML) 2.0 を使用した ID フェデレーションをサポー
トします。これは、多くの ID プロバイダーにより使用されているオープンスタンダードです。この
機能はフェデレーティッドシングルサインオン (SSO) を有効にします。これによって、組織内の全
員について IAM ユーザーを作成しなくても、ユーザーは AWS マネジメントコンソールにログインし
たり、AWS API を呼び出したりすることができるようになります。SAML を利用すると、カスタム
ID プロキシコードを記述する代わりに ID プロバイダーのサービスを利用できるため、AWS で簡単に
フェデレーションを設定できます。
AWS STS、および IAM では以下のユースケースをサポートしています。
• 組織から AWS マネジメントコンソールへのウェブベースのシングルサインオン (WebSSO)。ユー
ザーが組織のポータルにサインインして、AWS に移動するオプションを選択すると、追加でサイン
インの情報を入力しなくてもコンソールにリダイレクトされます。詳細については、「SAML を使
用してフェデレーティッドユーザーに AWS コンソールへのアクセスを許可する (p. 57)」を参照
してください。
• 組織のユーザーまたはアプリケーションが AWS API を呼び出すことを許可するフェデレーティッ
ドアクセス。組織で生成した SAML アサーションを(認証レスポンスの一部として)使用して、
一時的セキュリティ認証情報を取得します。このシナリオは、「一時的なセキュリティ認証情報
を作成するための AWS API (p. 26)」および「AWS STS ウェブ ID フェデレーションについ
て (p. 14)」で説明されているような、AWS STS および IAM でサポートされている別のフェデ
レーションのシナリオに似ています。ただし、認証と認可のチェックの実行時は、組織の SAML
2.0 ベースの ID プロバイダーによって詳細の多くが処理されます。
API アクセス用の SAML ベースのフェデレーション
を設定する
組織のユーザーに、自分のコンピューターからバックアップフォルダにデータをコピーする方法を
提供すると仮定します。ユーザーが、自分のコンピューターで実行できるアプリケーションを構築
します。バックエンドで、アプリケーションは Amazon S3 バケットのオブジェクトを読み書きしま
す。ユーザーは AWS に直接アクセスできません。その代わり、アプリケーションは組織の ID ストア
(LDAP ディレクトリなど)からユーザーの情報を取得した後、そのユーザーに関する認証および認
可情報を含む SAML アサーションを取得します。次に、アプリケーションはそのアサーションを使用
して AWS STS AssumeRoleWithSAML API を呼び出し、一時的セキュリティ認証情報を取得して、
その認証情報を使用してユーザーに固有の Amazon S3 バケットのフォルダにアクセスします。
次の図はフローを示しています。
API Version 2011-06-15
22
AWS Security Token Service 一時
的なセキュリティ認証情報の使用
API アクセス用の SAML ベース
のフェデレーションを設定する
1. 組織のユーザーが、クライアントアプリを使用して、組織の ID プロバイダー(IdP)に認証を要求
します。
2. IdP が、ユーザーを認証します。
3. IdP が、クライアントアプリに SAML アサーションを送信します。
4. クライアントアプリが、AssumeRoleWithSAML API を呼び出して、SAML プロバイダーの ARN、
引き受けるロールの ARN、および前の手順で IdP から提供された SAML アサーションを渡しま
す。
5. AWS STS が、一時的なセキュリティ証明書をクライアントアプリに返します。
6. クライアントアプリが、一時的なセキュリティ証明書を使用して Amazon S3 API を呼び出しま
す。
SAML 2.0 ベースのフェデレーションを使用するプロセス
前述のシナリオと図に示すように SAML 2.0 ベースのフェデレーションを使用するには、事前に組織
の ID ストアと AWS アカウントを設定して相互に信頼する必要があります。この信頼を設定するため
の一般的なプロセスを次の手順で説明します。組織内に、Microsoft® Active Directory フェデレーショ
ンサービス (AD FS、Windows™ Server の一部)、Shibboleth など、SAML 2.0 をサポートする ID プ
ロバイダー (IdP) を用意する必要があります。
1. 組織の IdP で、次の URL から取得した SAML メタデータドキュメントを使用して、AWS をサービ
スプロバイダー(SP)として登録します。
https://signin.aws.amazon.com/static/saml-metadata.xml
2. 組織の IdP を使用して、発行者名、作成日、失効日、組織からの認証応答(アサーション)を検証
するために AWS が使用できるキーを含む XML メタデータドキュメントを生成します。
3. IAM コンソールで、IAM のエンティティである新しい SAML プロバイダを作成します。このプロセ
スの一環として、組織の IdP によって生成された SAML メタデータドキュメントをアップロードし
ます(前の手順を参照してください)。
詳細については、『IAM ユーザーガイド』ガイドの「SAML プロバイダー」を参照してください。
4. IAM で、1 つ以上の IAM ロールを作成します。ロールの信頼ポリシーで SAML プロバイダーを、
組織と AWS 間の信頼関係を確立するプリンシパルとして設定します。ロールのアクセス(アクセ
ス権限)ポリシーは、AWS で組織のユーザーが行えることを設定します。
API Version 2011-06-15
23
AWS Security Token Service 一時
的なセキュリティ認証情報の使用
API アクセス用の SAML ベース
のフェデレーションを設定する
詳細については、『IAM ユーザーガイド』ガイドの「SAML ベースのフェデレーション用にロール
を作成する」を参照してください。
5. 組織の IdP では、アサーションを作成し、ロールで指定したアクセス権限を付与する組織内のユー
ザーまたはグループに、IAM ロールをマッピングします。組織内の異なるユーザーおよびグループ
は、異なる IAM ロールにマッピングされる可能性がある点に注意してください。マッピングを実行
するための正確な手順は、使用している IdP によって異なります。ユーザーの Amazon S3 フォル
ダに関する前のシナリオでは、すべてのユーザーを Amazon S3 アクセス権限を提供する同じロー
ルにマッピングすることができます。
詳細については、「SAML 認証レスポンスのアサーションを設定する (p. 60)」を参照してくだ
さい。
6. 作成中のアプリケーションで、AWS STS AssumeRoleWithSAML API を呼び出し、IAM の SAML
プロバイダの ARN、引き受けるロールの ARN、および IdP から取得した現在のユーザーについて
の SAML アサーションを渡します。AWS では、ロールを引き受けるリクエストは SAML プロバイ
ダーで参照される IdP からのリクエストであることを確認します。
詳細については、『AWS Security Token Service API リファレンス』の「AssumeRoleWithSAML」
を参照してください。
7. リクエストが成功すると、API から一時的セキュリティ認証情報一式が返され、アプリケーション
ではこれを利用して AWS に対して署名付きリクエストを作成します。前のシナリオで説明したよ
うに、アプリケーションは、現在のユーザーの情報を取得し、Amazon S3 のユーザー固有のフォル
ダにアクセスできます。
組織からの AWS アクセスを許可するロールを作成する
IAM で作成したロールは、組織のどのフェデレーティッドユーザーが AWS での操作を許可されるか
を定義します。ロールの信頼ポリシーを作成するときは、前にプリンシパルとして作成した SAML プ
ロバイダを指定します。さらに、特定の SAML 属性に一致するユーザーにのみロールへのアクセスを
許可するように、信頼ポリシーのスコープを設定できます。たとえば、次のサンプルポリシーに示さ
れているように、(https://openidp.feide.no によってアサートされるように)SAML の所属が staff
であるユーザーのみロールにアクセスできるように指定できます。
{
"Version": "2012-10-17",
"Statement": [{
"Effect": "Allow",
"Principal": {"AWS": "arn:aws:sts::ACCOUNT-ID-WITHOUT-HYPHENS:samlprovider/ExampleOrgSSOProvider"},
"Action": "sts:AssumeRoleWithSAML",
"Condition": {
"StringEquals": {
"saml:aud": "https://signin.aws.amazon.com/saml",
"saml:iss": "https://openidp.feide.no"
},
"ForAllValues:StringLike": {"saml:edupersonaffiliation": ["staff"]}
}
}]
}
ポリシーでチェックできる SAML キーの詳細については、『IAM ユーザーガイド』の「SAML ベース
のフェデレーションに利用可能なキー」を参照してください。
ロールのアクセス(アクセス権限)ポリシーでは、どのロールにも付与するアクセス権限を指定しま
す。たとえば、組織のユーザーが Amazon EC2 インスタンスを管理できる場合、Amazon EC2 Full
Access ポリシーテンプレートのように、アクセス権限ポリシーで明示的に Amazon EC2 アクション
を許可します。
API Version 2011-06-15
24
AWS Security Token Service 一時
的なセキュリティ認証情報の使用
SAML ベースのフェデレーショ
ンでユーザーを一意に識別する
SAML ベースのフェデレーションでユーザーを一意
に識別する
IAM でアクセスポリシーを作成するときに、ID プロバイダーを使用して認証されたユーザーの ID に
基づいてアクセス権限を指定できると、便利です。たとえば、SAML を使用してフェデレーションさ
れたユーザーの情報は、アプリケーションで以下のような構造体を使用して Amazon S3 に保存する
ことをお勧めします。
myBucket/app1/user1
myBucket/app1/user2
myBucket/app1/user3
バケット(myBucket)およびフォルダ(app1)は静的な値であるため、Amazon S3 コンソールまた
は CLI で作成できます。ただし、ユーザー固有のフォルダ(user1、user2、user3など)は、ユー
ザーを特定する値が実行時までわからないため、実行時にコードを使用して作成する必要がありま
す。
リソース名の一部としてユーザー固有の詳細を参照するポリシーを記述するには、ユーザー ID がポリ
シー条件で使用できる SAML キーで利用可能である必要があります。以下のキーは、SAML 2.0 ベー
スのフェデレーションで使用するため、IAM ポリシーで利用可能です。以下のキーによって返される
値を使用して、Amazon S3 フォルダなどのリソースの一意のユーザー ID を作成できます。
• saml:namequalifier. このキーには、saml:doc 値と saml:iss 値の組み合わせを表すハッ
シュ値が含まれます。これは名前空間の限定子として使用されます。saml:namequalifier と
saml:sub の組み合わせによってユーザーが識別されます。次の擬似コードは、この値の計算方法
を示します。この擬似コードで、「+」は連結を表し、SHA1 は SHA-1 を使用してメッセージダイ
ジェストを生成する関数を、Base64 は Base-64 でエンコードされたバージョンのハッシュ出力を
生成する関数を示します。
Base64(SHA1(saml:doc + saml:iss))
• saml:sub(文字列)。* これはクレームの件名です。組織内の個々のユーザーを一意に識別する値
が含まれます(例: _cbb88bf52c2510eabe00c1642d4643f41430fe25e3)。
• saml:sub_type(文字列)。* このキーは、「persistent」または「transient」とすることができま
す。「persistent」の値は、セッション間でユーザーの saml:sub 値が同じことを意味します。値が
「transient」の場合、ユーザーの saml:sub 値はセッションごとに異なります。
以下の例は 前述のキーを使用して Amazon S3 のユーザー固有のフォルダにアクセス権限
を付与するためのアクセスポリシーを示します。ポリシーは、Amazon S3 オブジェクトが
saml:namequalifier と saml:sub の両方を含むプレフィックスを使用して特定されていることを
前提としていまします。Condition エレメントには、saml:sub_type が "persistent" に設定されて
いることを確認するテストが含まれることに注意してください。"transient" に設定されている場合、
ユーザーの saml:sub 値はセッションごとに異なる可能性があるので、値の組み合わせを使用して
ユーザー固有のフォルダを特定することはできません。
{
"Version": "2012-10-17",
"Statement": {
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:PutObject",
"s3:DeleteObject"
],
"Resource": [
API Version 2011-06-15
25
AWS Security Token Service 一時
的なセキュリティ認証情報の使用
一時的な認証情報を作成するための AWS API
"arn:aws:s3:::exampleorgBucket/backup/${saml:namequalifier}/
${saml:sub}",
"arn:aws:s3:::exampleorgBucket/backup/${saml:namequalifier}/
${saml:sub}/*"
],
"Condition": {"StringEquals": {"saml:sub_type": "persistent"}}
}
}
IdP からポリシーキーにアサーションをマッピングする方法については、「SAML 認証レスポンスの
アサーションを設定する (p. 60)」を参照してください。
一時的なセキュリティ認証情報を作成するための
AWS API
別の AWS アカウントから IAM ユーザーの一時的な認証情報を取得して、そのユーザーが通常は保有
していないリソースへのアクセスを有効にすることができます。AWS アカウントでフェデレーション
をサポートする ID プロバイダー (IdP) を設定した後、プロバイダーを使用して認証できる ID を持つ
AWS 以外のユーザーの一時的な AWS 認証情報をリクエストすることもできます。
トピック
• AssumeRoleWithWebIdentity
• AssumeRoleWithSAML
• AssumeRole
• GetFederationToken
AssumeRoleWithWebIdentity – ウェブ ID フェデ
レーション
ウェブベースの ID プロバイダーを使用してアプリを作成する際に、Amazon Cognito を使用すること
をお勧めします。AWS Mobile SDK で、Amazon Cognito 認証情報プロバイダーを使用できます。こ
れにより、AWS に対するリクエストを作成するためにアプリが使用できる一時的なセキュリティ認証
情報が返されます。
Amazon Cognito を使用していない場合は、AWS STS の AssumeRoleWithWebIdentity アクショ
ンを呼び出します。これは無署名の呼び出しです。つまり、アプリが AWS セキュリティ認証情報に
アクセスできなくても呼び出すことができます。この呼び出しを行うときに、以下の情報を渡しま
す。
• アプリが引き受ける必要のあるロールの Amazon リソースネーム (ARN)。アプリで複数のサイン
イン方法をサポートしている場合は、ID プロバイダーごとに 1 つずつ、複数のロールを定義しま
す。AssumeRoleWithWebIdentity を呼び出すときは、ユーザーがサインインしたプロバイダー
に固有のロールの ARN を含める必要があります。
• アプリがユーザーを認証した後、IdP から取得したトークン。
• 一時的なセキュリティ認証情報の有効期間を指定する期間。最大値(デフォルト)は 1 時間(3600
秒)です。一時的な認証情報を 1 時間が経過する前に無効にする場合にのみ、この値を渡す必要が
あります。認証情報の最小期間は 15 分(900 秒)です。
• ロールセッション名。これはセッションを識別するために使用できる文字列値です。
• オプションで、ポリシー(JSON 形式)。このポリシーは、ロールに関連付けられたポリシーと結
合されます。これによって、ロールのアクセスポリシーで確立済みの制限を超えて、一時的な認証
API Version 2011-06-15
26
AWS Security Token Service 一時
的なセキュリティ認証情報の使用
AssumeRoleWithSAML – SAML 2.0 に
よるエンタープライズフェデレーション
情報に関連付けられたアクセス権限をさらに制限できます。このポリシーは、引き受けたロールの
アクセス権限を超えて、権限を昇格することはできないことに注意してください。
Note
AssumeRoleWithWebIdentity の呼び出しは無署名であるため、信頼されている経路を通
じてリクエストが送信される場合にのみ、このオプションポリシーを含める必要がありま
す。
AssumeRoleWithWebIdentity を呼び出すとき、AWS はトークンの信頼性を確認します。たとえ
ば、プロバイダーに応じて、AWS はプロバイダーを呼び出して、アプリが渡したトークンを含める場
合があります。ID プロバイダーがトークンを確認した場合、AWS は次の情報を返します。
• 一時的なセキュリティ認証情報一式。一時的なセキュリティ認証情報は、アクセスキー ID、シーク
レットアクセスキー、およびセッショントークンで構成されています。
• 引き受けたロールのロール ID と ARN。
• 一意のユーザー ID を含む SubjectFromWebIdentityToken 値。
一時的なセキュリティ認証情報がある場合、それを使って AWS API を呼び出すことができます。こ
れは、長期的なセキュリティ認証情報を使用した AWS API 呼び出しと同じ処理です。ただし、セッ
ショントークンを含めて、一時的なセキュリティ認証情報が有効であることを AWS が確認できるよ
うにする必要があります。
アプリで認証情報をキャッシュする必要があります。先述したように、認証情報はデフォ
ルトで 1 時間後に無効になります。AWS SDK の AmazonSTSCredentialsProvider アクショ
ンを使用しない場合、アプリで責任を持って、以前の認証情報が有効期限切れになる前に
AssumeRoleWithWebIdentity を呼び出して、新しい一時的なセキュリティ認証情報を取得する必
要があります。
AssumeRoleWithSAML – SAML 2.0 によるエンター
プライズフェデレーション
Security Assertion Markup Language (SAML) 2.0 と互換性がある ID プロバイダーを使用している場
合は、AWS STS の AssumeRoleWithSAML アクションを呼び出します。これは無署名の呼び出し
です。つまり、アプリが AWS セキュリティ認証情報にアクセスできなくても呼び出すことができま
す。この呼び出しを行うときに、以下の情報を渡します。
• アプリが引き受ける必要のあるロールの Amazon リソースネーム (ARN)。
• ID プロバイダーを表す IAM で作成された SAML プロバイダーの ARN。
• アプリからのサインインリクエストに対する認証レスポンスで、SAML ID プロバイダーによって提
供される、base-64 でエンコードされた SAML アサーション。
• 一時的なセキュリティ認証情報の有効期間を指定する期間。最大値(デフォルト)は 1 時間(3600
秒)です。一時的な認証情報を 1 時間が経過する前に無効にする場合にのみ、この値を渡す必要が
あります。認証情報の最小期間は 15 分(900 秒)です。
• ポリシー(JSON 形式)。このポリシーは、ロールに関連付けられたポリシーと結合されます。こ
れによって、ロールのアクセスポリシーで設定済みの制限を超えて、一時的な認証情報に関連付け
られたアクセス権限をさらに制限できます。このポリシーは、引き受けたロールのアクセス権限を
超えて、権限を昇格することはできないことに注意してください。
AssumeRoleWithSAML を呼び出すときに、AWS は SAML アサーションの信頼性を確認します。ID
プロバイダーがアサーションを確認した場合、AWS は次の情報を返します。
• 一時的なセキュリティ認証情報一式。一時的なセキュリティ認証情報は、アクセスキー ID、シーク
レットアクセスキー、およびセッショントークンで構成されています。
API Version 2011-06-15
27
AWS Security Token Service 一時
的なセキュリティ認証情報の使用
AssumeRole – クロスアカウント
の委任とカスタム ID ブローカー
• 引き受けたロールのロール ID と ARN。
• SAML アサーションの SubjectConfirmationData エレメントの Recipient 属性値を含む
Audience 値。
• SAML アサーションの Issuer エレメントの値を含む Issuer 値。
• Issuer 値、AWS アカウント ID、SAML プロバイダーのフレンドリ名から構築されたハッシュ値を
含む NameQualifier エレメント。Subject エレメントと結合する場合、フェデレーティッドユー
ザーを一意に識別できます。
• SAML アサーションの Subject エレメント内の NameID エレメントの値を含む Subject エレメン
ト。
• Subject エレメントの形式を示す SubjectType エレメント。この値は transient または
persistent となります。
一時的なセキュリティ認証情報がある場合、それを使って AWS API を呼び出すことができます。こ
れは、長期的なセキュリティ認証情報を使用した AWS API 呼び出しと同じ処理です。ただし、セッ
ショントークンを含めて、一時的なセキュリティ認証情報が有効であることを AWS が確認できるよ
うにする必要があります。
アプリで認証情報をキャッシュする必要があります。認証情報はデフォルトで 1 時間後に無効になり
ます。AWS SDK の AmazonSTSCredentialsProvider アクションを使用しない場合、アプリで責任を
持って、以前の認証情報が有効期限切れになる前に AssumeRoleWithSAML を呼び出して、新しい一
時的なセキュリティ認証情報を取得する必要があります。
AssumeRole – クロスアカウントの委任とカスタム
ID ブローカー
フェデレーティッドユーザーの一時的セキュリティ認証情報を作成するときに、ロールの Amazon リ
ソースネーム(ARN)を指定します。必要に応じて、一時的セキュリティ認証情報の有効期間とス
コープを絞り込むポリシーを指定できます。有効期間は 15 分~1 時間の間で指定できます。デフォル
トでは、有効期間は 1 時間です。AssumeRole API アクションは、セキュリティトークン、アクセス
キー、シークレットキー、有効期限で構成される一時的セキュリティ認証情報を返します。
Note
AssumeRole を呼び出すには、IAM ユーザー認証情報を使用する必要がありま
す。AssumeRole の呼び出しに AWS アカウントの認証情報は使用できません。アクセスは
拒否されます。
AWS でアクセス権限を管理する場合は、AssumeRole を使用します。AssumeRole を使用したサン
プルアプリケーションを見るには、『AWS サンプルコードとライブラリ』の「AWS マネジメントコ
ンソールのフェデレーションプロキシのサンプルユースケース」を参照してください。
以下の例は、AssumeRole を使用したリクエストと応答のサンプルを示します。この例では、リクエ
ストに Bob という名前のセッション名が含まれます。Policy パラメータには、生成される認証情報
が Amazon S3 のみアクセスできるアクセス権限を持つように指定する JSON ドキュメントが含まれ
ます。
Example リクエスト
https://sts.amazonaws.com/
?Version=2011-06-15
&Action=AssumeRole
&RoleSessionName=Bob
&RoleArn=arn:aws:iam::123456789012:role/demo
API Version 2011-06-15
28
AWS Security Token Service 一時
的なセキュリティ認証情報の使用
AssumeRole – クロスアカウント
の委任とカスタム ID ブローカー
&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=3600
&ExternalId=123ABC
&AUTHPARAMS
Note
上記の例に示すポリシーの値は、次のポリシーの URL エンコードされたバージョンです。
{"Version":"2012-10-17","Statement":
[{"Sid":"Stmt1","Effect":"Allow","Action":"s3:*","Resource":"*"}]}
一時的セキュリティ認証情報に加えて、レスポンスにはフェデレーティッドユーザーの Amazon リ
ソースネーム(ARN)、および認証情報の有効期限が含まれています。
Example レスポンス
<AssumeRoleResponse xmlns="https://sts.amazonaws.com/doc/2011-06-15/">
<AssumeRoleResult>
<Credentials>
<SessionToken>
AQoDYXdzEPT//////////wEXAMPLEtc764bNrC9SAPBSM22wDOk4x4HIZ8j4FZTwdQW
LWsKWHGBuFqwAeMicRXmxfpSPfIeoIYRqTflfKD8YUuwthAx7mSEI/qkPpKPi/kMcGd
QrmGdeehM4IC1NtBmUpp2wUE8phUZampKsburEDy0KPkyQDYwT7WZ0wq5VSXDvp75YU
9HFvlRd8Tx6q6fE8YQcHNVXAkiY9q6d+xo0rKwT38xVqr7ZD0u0iPPkUL64lIZbqBAz
+scqKmlzm8FDrypNC9Yjc8fPOLn9FX9KSYvKTr4rvx3iSIlTJabIQwj2ICCR/oLxBA==
</SessionToken>
<SecretAccessKey>
wJalrXUtnFEMI/K7MDENG/bPxRfiCYzEXAMPLEKEY
</SecretAccessKey>
<Expiration>2011-07-15T23:28:33.359Z</Expiration>
<AccessKeyId>AKIAIOSFODNN7EXAMPLE</AccessKeyId>
</Credentials>
<AssumedRoleUser>
<Arn>arn:aws:sts::123456789012:assumed-role/demo/Bob</Arn>
<AssumedRoleId>ARO123EXAMPLE123:Bob</AssumedRoleId>
</AssumedRoleUser>
<PackedPolicySize>6</PackedPolicySize>
</AssumeRoleResult>
<ResponseMetadata>
<RequestId>c6104cbe-af31-11e0-8154-cbc7ccf896c7</RequestId>
</ResponseMetadata>
</AssumeRoleResponse>
Note
AssumeRole は、ポリシーをひとまとめにした形式で保存します。AssumeRole は、許容
されている最大サイズに対する割合でサイズを返すため、呼び出しパラメータは調整できま
す。ポリシーのサイズの制限の詳細については『AWS Security Token Service API リファレ
ンス』の「AssumeRole」を参照してください。
また、リソースレベルでアクセス権限を付与することもできます。たとえば、AWS アカウント
番号が 111122223333 で、Bob にアクセスを許可しようとしている Amazon S3 バケットがあ
るが、彼の一時的セキュリティ認証情報にバケットのポリシーが含まれていない場合、Bob の
API Version 2011-06-15
29
AWS Security Token Service 一時
的なセキュリティ認証情報の使用
GetFederationToken – カスタム ID ブローカー
ARN(arn:aws:sts::123456789012:assumed-role/demo/Bob)と一致する ARN のポリシーを
確実にバケットが持っている必要があります。
AssumeRole を使用してユーザーにアクセス権限を委任する方法の詳細については、「AssumeRole
API を使用した API アクセスの委任 (p. 31)」を参照してください。
GetFederationToken – カスタム ID ブローカー
フェデレーティッドユーザーの一時的セキュリティ認証情報を取得するためにリクエストを作成する
ときは、特定のユーザー ID(IAM ユーザー)の認証情報を使用してリクエストを作成して、一時的
セキュリティ認証情報が有効である最大継続期間をリクエストします。IAM ユーザーが作成した認証
情報は 15 分~36 時間の間の指定された期間有効です。ルートアカウントの認証情報を使用して作
成された認証情報は、最長で 1 時間です。一時的セキュリティ認証情報で利用できるアクセス権限
は、GetFederationToken を呼び出したときに渡す IAM ポリシーによって決まります。
GetFederationToken 呼び出しは、セキュリティトークン、アクセスキー、シークレット
キー、有効期限で構成される一時的セキュリティ認証情報を返します。組織内でアクセス権限
を管理する(たとえば、プロキシアプリケーションを使用してアクセス権限を割り当てる)場
合、GetFederationToken を使用できます。GetFederationToken を使用したサンプルアプリ
ケーションを見るには、AWS サンプルコードとライブラリの「Active Directory ユースケースのため
の ID フェデレーションのサンプルアプリケーション」を参照してください。
以下の例は、GetFederationToken を使用したリクエストと応答のサンプルを示します。この例で
は、リクエストに Jean というフェデレーティッドユーザーの名前が含まれています。Policy パラ
メータには、生成される認証情報が Amazon S3 のみアクセスできるアクセス権限をもつように指定
する JSON ドキュメントが含まれます。一時的セキュリティ認証情報に加えて、レスポンスにはフェ
デレーティッドユーザーの Amazon リソースネーム(ARN)、および認証情報の有効期限が含まれて
います。
Example リクエスト
https://sts.amazonaws.com/
?Version=2011-06-15
&Action=GetFederationToken
&Name=Jean
&Policy=%7B%22Version%22%3A%222012-10-17%22%2C%22Statement%22%3A%5B%7B%22Sid
%22%3A%22Stmt1%22%2C%22Effect%22%3A%22Allow%22%2C%22Action%22%3A%22s3%3A*
%22%2C%22Resource%22%3A%22*%22%7D%5D%7D
&DurationSeconds=3600
&AUTHPARAMS
Note
上記の例に示すポリシーの値は、このポリシーの URL エンコードされたバージョンです。
{"Version":"2012-10-17","Statement":
[{"Sid":"Stmt1","Effect":"Allow","Action":"s3:*","Resource":"*"}]}
Example レスポンス
<GetFederationTokenResponse xmlns="https://sts.amazonaws.com/
doc/2011-06-15/">
<GetFederationTokenResult>
<Credentials>
<SessionToken>
AQoDYXdzEPT//////////wEXAMPLEtc764bNrC9SAPBSM22wDOk4x4HIZ8j4FZTwdQW
API Version 2011-06-15
30
AWS Security Token Service 一時
的なセキュリティ認証情報の使用
関連トピック
LWsKWHGBuFqwAeMicRXmxfpSPfIeoIYRqTflfKD8YUuwthAx7mSEI/qkPpKPi/kMcGd
QrmGdeehM4IC1NtBmUpp2wUE8phUZampKsburEDy0KPkyQDYwT7WZ0wq5VSXDvp75YU
9HFvlRd8Tx6q6fE8YQcHNVXAkiY9q6d+xo0rKwT38xVqr7ZD0u0iPPkUL64lIZbqBAz
+scqKmlzm8FDrypNC9Yjc8fPOLn9FX9KSYvKTr4rvx3iSIlTJabIQwj2ICCEXAMPLE==
</SessionToken>
<SecretAccessKey>
wJalrXUtnFEMI/K7MDENG/bPxRfiCYzEXAMPLEKEY
</SecretAccessKey>
<Expiration>2011-07-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>6</PackedPolicySize>
</GetFederationTokenResult>
<ResponseMetadata>
<RequestId>c6104cbe-af31-11e0-8154-cbc7ccf896c7</RequestId>
</ResponseMetadata>
</GetFederationTokenResponse>
Note
GetFederationToken は、ポリシーをひとまとめにした形式で保存します。アクションは、
許容されている最大サイズに対する割合でサイズを返すため、呼び出しパラメータは調整
できます。ポリシーのサイズの制限の詳細については『AWS Security Token Service API リ
ファレンス』の「GetFederationToken」を参照してください。
リソースレベルでアクセス権限を付与する(たとえば、Amazon S3 バケットにポリシーをアタッチす
る)場合、Policy パラメータは省略できます。ただし、フェデレーティッドユーザーのポリシーを
含まない場合、一時的セキュリティ認証情報ではアクセス権限が付与されません。この場合、リソー
スポリシーを使用してフェデレーティッドユーザーに AWS リソースへのアクセス権を付与する必要
があります。
たとえば、AWS アカウント番号が 111122223333 で、Susan にアクセスを許可しようとしている
Amazon S3 バケットがあるが、彼女の一時的セキュリティ認証情報にバケットのポリシーが含まれて
いない場合、arn:aws:sts::111122223333:federated-user/Susan など、Susan の ARN と一
致する ARN のポリシーを確実にバケットが持っている必要があります。
関連トピック
• クエリリクエストを行う
• 一時的なセキュリティ認証情報のアクセス権限を制御する (p. 40)
• 一時的なセキュリティ認証情報のアクセス権限を無効にする (p. 48)
• ポリシーの概要
AssumeRole API を使用した API アクセスの委任
IAM ロールを使用することで、お客様の AWS リソースへのアクセスを委任できます。IAM ロール
によって、他の AWS アカウント(信頼済みエンティティ)との信頼関係を確立できます。関係が確
立されると、信頼済みアカウントの IAM ユーザーまたはアプリケーションは、AWS Security Token
Service (AWS STS) の AssumeRole アクションを使用して、お客様のアカウントの AWS リソースに
アクセスするために使用できる一時的なセキュリティ認証情報を取得できます。
API Version 2011-06-15
31
AWS Security Token Service 一時
的なセキュリティ認証情報の使用
AWS リソースへのアクセスを付与
するときに外部 ID を使用する方法
一時的なセキュリティ認証情報は、アクセスキー ID、シークレットアクセスキー、およびセキュリ
ティトークンを含みます。一時的なセキュリティ認証情報を使うと、呼び出し元にそのロールで定義
されたアクセス権限が付与されます。呼び出し元は、AssumeRole API 呼び出しでポリシーを渡すこ
とによって、引き受けたロールから派生するアクセス権限の範囲を制限できます。渡したポリシーに
よって、ロール内で定義されているアクセス権限を超えて権限を昇格することはできません。
このオプションのポリシーが役立つのは、複数の呼び出し元が同じロールを呼び出す可能性があり、
それぞれの呼び出し元が異なるアクセス権限を必要としている場合です。たとえば、呼び出し元ごと
に異なる Amazon S3 バケット用のアクセス権限が必要な場合、バケットごとにロールを作成するの
は面倒です。代わりに、複数のバケットのアクセス権限を含むロールを 1 つ作成します。呼び出し元
は、特定のユーザーがアクセスする必要のないバケットに対するアクセスを拒否するポリシーを渡し
ます。
一時的なセキュリティ認証情報の有効期間は、15 分から 1 時間の範囲で指定できます。デフォルト
で、認証情報は 1 時間有効です。
ロールを引き受ける際の要件
ロールを引き受けるには、呼び出し元が次の要件を満たす必要があります。
• 呼び出し元に、特定のロールの AssumeRole を呼び出すアクセス権限が必要です。
• ロールで、信頼されるエンティティとして呼び出し元の AWS アカウント ID が定義されています。
• 呼び出し元は、IAM ユーザーの認証情報を使用して、ロールを引き受ける必要があります。
• ロールに外部 ID が定義されている場合、呼び出し元は AssumeRole を呼び出すときにその外部 ID
を渡す必要があります。詳細については、「AWS リソースへのアクセスを付与するときに外部 ID
を使用する方法 (p. 32)」を参照してください。
関連トピック
以下の情報は、ロールの操作に必要なアクセス権限、ロールのアクセス権限の設定方法、信頼された
エンティティの定義方法、ロールを引き受ける方法を示します。
• 「Amazon EC2 で実行されるアプリケーションに AWS リソースへのアクセスを許可する」。こ
の情報は、インスタンスで実行されるアプリケーションが、ロールの認証情報を利用して AWS リ
ソースにアクセスする方法の概要を示します。この方法では、Amazon EC2 インスタンスで認証情
報を共有する必要がありません。
• クロスアカウント アクセスを有効にする. この情報は、ロールを使用して、IAM ユーザーが別の
AWS アカウントの AWS リソースにアクセスする方法を示します。
AWS リソースへのアクセスを付与するときに外部
ID を使用する方法
お客様の AWS リソースへのアクセスを第三者に付与する(アクセスを委任する)必要がある場合が
あります。このシナリオの最も重要な要素は外部 ID です。外部 ID とは、IAM ロールの信頼ポリシー
でロールを引き受けることができるユーザーを指定するために使用できる省略可能な情報です。
たとえば、Example Corp という第三者企業を雇って、コストを最適化するためにお客様の AWS アカ
ウントをモニタリングする業務を依頼するとします。Example Corp がお客様の毎日の支出を追跡する
には、お客様の AWS リソースにアクセスする必要があります。
お客様の AWS アカウントで Example Corp の IAM ユーザー認証情報を提供することは可能ですが、
代わりに、強く推奨されるベストプラクティスとして、IAM ロールを使用することにします。IAM
ロールは、第三者が長期的な認証情報(IAM ユーザーのアクセスキーなど)を共有することなくお客
様の AWS リソースにアクセスできるようにするメカニズムです。
API Version 2011-06-15
32
AWS Security Token Service 一時
的なセキュリティ認証情報の使用
AWS リソースへのアクセスを付与
するときに外部 ID を使用する方法
IAM ロールを使用して Example Corp の AWS アカウントとの信頼関係を確立できます。この関係が
確立されると、Example Corp の信頼済み AWS アカウントの IAM ユーザーまたはアプリケーション
が AWS STS AssumeRole API を使用して一時的なセキュリティ認証情報を取得し、お客様のアカウ
ントの AWS リソースにアクセスできるようになります。
Note
一時的なセキュリティ認証情報を取得するために呼び出すことのできる AssumeRole および
その他の AWS STS API の詳細については、「一時的なセキュリティ認証情報を作成するため
の AWS API」を参照してください。
このシナリオの詳細は次のとおりです。
1. お客様は Example Corp を雇うので、Example Corp はお客様の一意の顧客 ID を作成しま
す。Example Corp はお客様の一意の顧客 ID と Example Corp の AWS アカウント番号をお客様に
提供します。お客様が IAM ロールを作成する(次のステップ)には、この情報が必要です。
2. お客様は AWS にサインインし、お客様のリソースへのアクセスを Example Corp に付与する IAM
ロールを作成します。他の IAM ロールと同様に、このロールにも 2 つのポリシー(アクセス権限ポ
リシーと信頼ポリシー)があります。ロールのアクセス権限ポリシーでは、ロールがだれに何を許
可するかを指定します。たとえば、お客様の Amazon EC2 と Amazon RDS のリソースのみを管理
でき、お客様の IAM ユーザーまたはグループは管理できないようにロールを指定できます。このシ
ナリオでは、アクセス権限ポリシーを使用して、お客様のアカウントのすべてのリソースに対する
読み取り専用アクセスを Example Corp に付与します。
ロールの信頼ポリシーでは、だれがこのロールを引き受けることができるかを指定します。この
シナリオでは、このポリシーは Example Corp の AWS アカウント番号をプリンシパルとして(つ
まり、ロールを引き受けることを許可されたエンティティとして)指定します。さらに、お客様
のロールの信頼ポリシーに外部 ID の条件(Condition 要素)を追加します。この Condition 要素
は、Example Corp を雇ったときに Example Corp がお客様に割り当てた一意の顧客 ID をテストし
ます。
3. ロールの Amazon リソースネーム(ARN)を書き留め、Example Corp に送信します。
4. Example Corp がお客様の AWS リソースを管理する必要があるとき、Example Corp の担当者は
AWS STS API AssumeRole API を呼び出します。この呼び出しには、引き受けるロールの ARN と
お客様の顧客 ID に対応する ExternalID パラメータが含まれています。
これらすべてによって、リクエストはロールの ARN と外部 ID が正しく、Example Corp の AWS ア
カウントを使用している担当者がリクエスト元である場合にのみ承認されます。リクエストが承認さ
れると、一時的なセキュリティ認証情報が返されます。Example Corp は、それを使用して、お客様の
ロールが許可している AWS リソースにアクセスできます。
つまり、ロールのポリシーに外部 ID が含まれている場合、そのロールを引き受けるユーザーは、ロー
ルでプリンシパルとして指定されているだけではなく、正しい外部 ID を指定する必要があります。
外部 ID の用途
抽象的には、外部 ID により、ロールを引き受けるユーザーは、業務を遂行する環境へのアクセスを要
求できます。また、アカウント所有者が、特定の環境においてのみロールを引き受けることができる
ようにする方法の 1 つでもあります。外部 ID の最も重要な機能は、"混乱した代理" 問題の防止と対処
です。
"混乱した代理" 問題
前の例から続いて、Example Corp はお客様の AWS アカウントの特定のリソースにアクセスする必要
があります。しかし、Example Corp にはお客様以外にも多数の顧客がいるため、それぞれの顧客の
AWS リソースに別々にアクセスする方法が必要です。Example Corp は、共有されてはならない秘密
API Version 2011-06-15
33
AWS Security Token Service 一時
的なセキュリティ認証情報の使用
AWS リソースへのアクセスを付与
するときに外部 ID を使用する方法
である顧客の AWS アカウントのアクセスキーを顧客にリクエストする代わりに、それぞれの顧客に
ロールの ARN をリクエストします。しかし、Example Corp の別の顧客がお客様のロールの ARN を
推測または取得できた場合、その顧客は Example Corp を介してお客様のロールの ARN を使用してお
客様の AWS リソースにアクセスできます。このような特権のエスカレーションを "混乱した代理" 問
題と呼びます。
次の図は、"混乱した代理" 問題を示しています。
この図は、以下を前提としています。
• AWS1 は、お客様の AWS アカウントである。
• AWS1:ExampleRole は、お客様のアカウントのロールである。このロールの信頼ポリシー
は、Example Corp の AWS アカウントを、ロールを引き受けることができるアカウントとして指定
することによって、Example Corp を信頼しています。
次の状況が発生します。
1. お客様は、Example Corp のサービスの使用を開始するとき、AWS1:ExampleRole の ARN を
Example Corp に提供します。
2. Example Corp は、そのロールの ARN を使用して一時的なセキュリティ認証情報を取得し、お客様
の AWS アカウントのリソースにアクセスします。こうして、お客様は、お客様の代わりに業務を
遂行できる "代理" として Example Corp を信頼します。
3. 別の AWS ユーザーも Example Corp のサービスの使用を開始し、このユーザーも
AWS1:ExampleRole の ARN を Example Corp が使用できるように提供します。この別のユーザー
は、秘密ではない AWS1:ExampleRole を知った、または推測した可能性があります。
4. その別のユーザーが Example Corp に "自分の" アカウントの AWS リソースにアクセスするように
依頼すると、Example Corp は AWS1:ExampleRole を使用してお客様のアカウントのリソースにア
クセスします。
このようにして、その別のユーザーはお客様のリソースに不正にアクセスできます。Example Corp
は、この別のユーザーによって操られ、無意識にお客様のリソースにアクセスしたため、"混乱した代
理" になります。
外部 ID が "混乱した代理" 問題を防止する方法
"混乱した代理" 問題は、ロールの信頼ポリシーに外部 ID の条件を含めることによって解決しま
す。外部 ID は、お客様が Example Corp から受け取った一意の顧客 ID に対応します。外部 ID 値
は、Example Corp の顧客の間で一意である必要があるため、Example Corp が提供します(お客様が
独自の外部 ID 値を指定することはできません)。Example Corp のみが、その顧客ごとに一意の外部
ID 値を保証できます。
このシナリオでは、Example Corp がお客様に割り当てた一意の ID は "12345" であり、別の顧客の ID
は "67890" です。これらの ID は、このシナリオで使用することのみを目的としているため、簡略化さ
れています。通常、これらの ID は GUID です。これらの ID が Example Corp の顧客の間で一意であ
ることを考慮すると、これらの値を外部 ID として使用することは賢明です。
API Version 2011-06-15
34
AWS Security Token Service 一時
的なセキュリティ認証情報の使用
AWS リソースへのアクセスを付与
するときに外部 ID を使用する方法
Example Corp はお客様に "12345" という外部 ID 値を提供し、お客様は外部 ID が 12345 であること
を要求する Condition 要素をロールの信頼ポリシーに追加します。その方法は次のとおりです。
{
"Version": "2012-10-17",
"Statement": {
"Effect": "Allow",
"Principal": {"AWS": "Example Corp's AWS Account ID"},
"Action": "sts:AssumeRole",
"Condition": {"StringEquals": {"sts:ExternalId": "12345"}}
}
}
このポリシーの Condition 要素に基づいて、AssumeRole API 呼び出しに "12345" という外部 ID 値が
含まれている場合にのみ Example Corp はロールを引き受けることができます。Example Corp は、顧
客のためにロールを引き受けるたびに、業務を遂行する環境へのアクセスを要求する方法として、そ
の顧客の外部 ID 値を AssumeRole 呼び出しに含めます。
次の図は、権限のない顧客がお客様のリソースに不正にアクセスすることを外部 ID が防止する方法を
示しています。
1. 前述と同様に、お客様は、Example Corp のサービスの使用を開始するとき、AWS1:ExampleRole
の ARN を Example Corp に提供します(ステップ 1)。
2. Example Corp がそのロールの ARN を使用して AWS1:ExampleRole ロールを引き受けると
き、Example Corp は AssumeRole API 呼び出しにお客様の外部 ID("12345 ")を含めます。こ
の外部 ID はロールの信頼ポリシーと一致するため、AssumeRole API 呼び出しは正常に実行さ
れ、Example Corp はお客様の AWS アカウントのリソースにアクセスするための一時的なセキュリ
ティ認証情報を取得します(ステップ 2)。
3. 別の AWS ユーザーも Example Corp のサービスの使用を開始し、前述と同様に、このユーザーも
AWS1:ExampleRole の ARN を Example Corp が使用できるように提供します(ステップ 3)。
4. しかし、今回は、Example Corp が AWS1:ExampleRole ロールを引き受けるとき、別の顧客に関連
付けられている外部 ID("67890")を提供します。Example Corp がこれを行うのは、ロールを使用
するリクエストが別の顧客から発生しており、"67890" は Example Corp が業務を遂行する環境を
示すからです。お客様はお客様の外部 ID("12345")を使用する条件を AWS1:ExampleRole の信頼
ポリシーに追加したため、AssumeRole API 呼び出しは失敗し、別の顧客がお客様のアカウントの
リソースに不正にアクセスすることが防止されます(図のステップ 4 の赤色の大きい "X" が示すよ
うに)。
外部 ID により、Example Corp が別の顧客によって操られ、無意識にお客様のリソースにアクセスす
ることを防止でき、"混乱した代理" 問題が解消されます。
外部 ID を使用する必要性
お客様が AWS アカウントを所有しており、それ以外の AWS アカウントにアクセスするロールを第
三者のために設定した場合、第三者がお客様のロールを引き受けるときに含める外部 ID を第三者にリ
クエストする必要があります。次に、ロールの信頼ポリシーに含まれている外部 ID を使用して、お客
API Version 2011-06-15
35
AWS Security Token Service 一時
的なセキュリティ認証情報の使用
認証情報を作成するためのアクセス権限の付与
様が意図するとおりに外部の第三者が役割を果たす場合にのみ、お客様のロールを引き受けることが
できるようにします。
前のシナリオの Example Corp のように、お客様が複数の異なる環境においてロールを引き受ける立
場にある場合は(たとえば、複数の異なる顧客に代わって)、お客様が一意の外部 ID をそれぞれの顧
客に割り当て、顧客のロールの信頼ポリシーに外部 ID を追加するように依頼する必要があります。
既にそれぞれの顧客に一意の ID を割り当てている場合は、この一意の ID を外部 ID として使用でき
ます。外部 ID は、この目的のためだけに明示的に作成したり個別に追跡したりする必要のある特別な
値ではありません。
外部 ID は常に AssumeRole API 呼び出しで指定する必要があります。さらに、顧客からロールの
ARN を受け取ったら、正しい外部 ID と正しくない外部 ID の両方を使用して、そのロールを引き受け
ることができるかどうかをテストします。正しくない外部 ID でロールを引き受けることができた場
合は、顧客が正しい外部 ID を要求するようにロールの信頼ポリシーを更新するまで、顧客のロール
の ARN をお客様のシステムに格納しないでください。こうすることにより、顧客による不正を防止
し、"混乱した代理" 問題からお客様と顧客の両方を守ることができます。
一時的なセキュリティ認証情報を作成するための
アクセス権限の付与
デフォルトで、IAM ユーザーには、フェデレーティッドユーザーおよびロールの一時的なセキュ
リティ認証情報を作成するアクセス権限がありません。しかし、IAM ユーザーは、デフォルトで
GetSessionToken を呼び出すことができます。
Note
ユーザーに直接アクセス権限を付与できますが、アクセス権限はグループに付与することを
強くお勧めします。これによって、アクセス権限の管理が容易になります。ユーザーがそ
のアクセス権限を必要としなくなった場合、グループからユーザーを削除するだけで済みま
す。他のユーザーがアクセス権限を必要とする場合は、そのユーザーをグループに追加しま
す。
IAM グループにアクセス権限を付与して、フェデレーティッドユーザーまたはロールの一時的なセ
キュリティ認証情報を作成するには、IAM ユーザーが属する IAM グループに、次の権限の少なくとも
1 つを付与するポリシーをアタッチする必要があります。
• IAM ロールにアクセスするフェデレーティッドユーザーの場合は、AWS STS の AssumeRole への
アクセス権限
• ロールを必要としないフェデレーティッドユーザーの場合は、AWS STS の GetFederationToken
へのアクセス権限
AssumeRole API と GetFederationToken API の違いの詳細については、「一時的なセキュリティ認証
情報を作成するための AWS API (p. 26)」を参照してください。
Example : ロールを引き受けるアクセス権限を与えるポリシー
以下の例は、AWS アカウント AssumeRole の UpdateApp ロールに 123123123123 を呼び出すアク
セス権限を与えるポリシーを示しています。AssumeRole を使用する場合、フェデレーティッドユー
ザーのセキュリティ認証情報を作成するユーザーは、ロールのアクセスポリシーで指定されていない
アクセス権限を委任できません。
{
"Version": "2012-10-17",
API Version 2011-06-15
36
AWS Security Token Service 一時
的なセキュリティ認証情報の使用
関連トピック
"Statement": [{
"Effect": "Allow",
"Action": "sts:AssumeRole",
"Resource": "arn:aws:iam::123123123123:role/UpdateAPP"
}]
}
Example : フェデレーティッドユーザーの一時的なセキュリティ認証情報を作成するアクセス
権限を付与するポリシー
以下の例は、GetFederationToken を使用するアクセス権限を与えるポリシーを示します。
{
"Version": "2012-10-17",
"Statement": [{
"Effect": "Allow",
"Action": "sts:GetFederationToken",
"Resource": "*"
}]
}
Important
GetFederationToken を使用して、IAM ユーザーにアクセス権限を与えてフェデレーティッ
ドユーザーの一時的なセキュリティ認証情報を作成する場合は、それによって、IAM ユー
ザーが自身のアクセス権限を委任できるようになることに注意してください。IAM ユーザー
と AWS アカウントをまたがるアクセス権限の委任について詳しくは、「クロスアカウントア
クセスを有効にする」を参照してください。一時的なセキュリティ認証情報のアクセス権限
を制御する方法の詳細については、「一時的なセキュリティ認証情報のアクセス権限を制御
する (p. 40)」を参照してください。
Example : フェデレーテッドユーザーの一時的なセキュリティ認証情報を作成するユーザーを
限定するアクセス権限を付与するポリシー
IAM ユーザーが GetFederationToken を呼び出してフェデレーティッドユーザーの一時的なセ
キュリティ認証情報を作成できるようにするときは、IAM ユーザーが委任を許可されたアクセス権
限を実用上できるだけ制限することがベストプラクティスです。たとえば、次のポリシーは、名前が
Manager で始まるフェデレーティッドユーザーの場合にのみ、IAM ユーザーに一時的なセキュリティ
認証情報の作成を許可する方法を示しています。
{
"Version": "2012-10-17",
"Statement": [{
"Effect": "Allow",
"Action": "sts:GetFederationToken",
"Resource": ["arn:aws:sts::123456789012:federated-user/Manager*"]
}]
}
関連トピック
• IAM ポリシーを管理する
• IAM エンティティのための ID
• ロール
API Version 2011-06-15
37
AWS Security Token Service 一時
的なセキュリティ認証情報の使用
IAM ユーザーのアクセスを有効にする認証情報
一時的なセキュリティ認証情報を作成して、IAM
ユーザーのアクセスを有効にする
IAM ユーザーは、AWS Security Token Service の GetSessionToken API アクションを使用して、自
身の一時的なセキュリティ認証情報を作成することができます。これにより、アクセス権限が既に定
義されている IAM ユーザーまたは AWS アカウントのアクセスが有効になります。認証情報は一時的
なものであるため、モバイルデバイスやウェブブラウザのような安全性の低い環境からリソースにア
クセスする IAM ユーザーがいる場合、これによりセキュリティが強化されます。
デフォルトで、IAM ユーザーの一時的なセキュリティ認証情報は、最大 12 時間有効ですが、最短 15
分、最長 36 時間の有効期間をリクエストできます。セキュリティ上の理由から、AWS アカウントの
ルート ID のトークンは有効期間が 1 時間に制限されます。
GetSessionToken は、セキュリティトークン、アクセスキー ID、およびシークレットアクセスキー
から構成される一時的なセキュリティ認証情報を返します。以下の例は、GetSessionToken を使用
したリクエストと応答のサンプルを示します。レスポンスには、一時的なセキュリティ認証情報の有
効期限も含んでいます。
Example リクエスト
https://sts.amazonaws.com/
?Version=2011-06-15
&Action=GetSessionToken
&DurationSeconds=3600
&AUTHPARAMS
Example レスポンス
<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>
多要素認証(MFA)による IAM ユーザーの一時的
なセキュリティ認証情報
オプションで、GetSessionToken リクエストに、AWS の多要素認証(MFA)で確認する
SerialNumber および TokenCode 値を含めることができます。指定した値が有効であれば、AWS
API Version 2011-06-15
38
AWS Security Token Service 一時
的なセキュリティ認証情報の使用
関連トピック
STS は、MFA 認証の状態を含む一時的なセキュリティ認証情報を返します。そのため、MFA 認証が
有効である限り、この一時的なセキュリティ認証情報を使用して、MFA で保護された API アクション
または AWS ウェブサイトにアクセスすることができます。
以下の例は、MFA 認証コードとデバイスのシリアルナンバーを含む GetSessionToken リクエスト
を示しています。
https://sts.amazonaws.com/
?Version=2011-06-15
&Action=GetSessionToken
&DurationSeconds=7200
&SerialNumber=YourMFADeviceSerialNumber
&TokenCode=123456
&AUTHPARAMS
関連トピック
• 「GetSessionToken」(『AWS Security Token Service API リファレンス』)
• 「AWS で多要素認証(MFA)デバイスを使用」(『IAM ユーザーガイド』)
• 「クエリリクエストを行う」(『IAM ユーザーガイド』)
API Version 2011-06-15
39
AWS Security Token Service 一時
的なセキュリティ認証情報の使用
AssumeRole API のアクセス権限
一時的なセキュリティ認証情報のア
クセス権限を制御する
このセクションでは、一時的なセキュリティ認証情報にアクセス権限を付与するにあたって知ってお
く必要のあること、および、認証情報が発行された後でアクセス権限を更新または無効にする方法
について説明します。アクセス権限を認証情報に関連付ける仕組みは、以降のセクションで説明しま
す。
一時的なセキュリティ認証情報は、発行後、一定期間有効で、取り消すことはできません。ただし、
一時的なセキュリティ認証情報に割り当てられたアクセス権限は、認証情報を使用するリクエストが
なされるたびに評価されるため、発行後にアクセス権を変更することで、認証情報を取り消すのと同
等の効果を得ることができます。
この章は、AWS のアクセス権限とポリシーに関する実用的な知識を前提としています。これらのト
ピックの詳細については、『IAM ユーザーガイド』の「アクセス権限とポリシー」を参照してくださ
い。
トピック
• AssumeRole、AssumeRoleWithSAML、AssumeRoleWithWebIdentity のアクセス権限 (p. 40)
• GetFederationToken のアクセス権限 (p. 43)
• GetSessionToken のアクセス権限 (p. 47)
• 一時的なセキュリティ認証情報のアクセス権限を無効にする (p. 48)
• 関連トピック (p. 51)
AssumeRole、AssumeRoleWithSAML、AssumeRoleWith
のアクセス権限
引き受けるロールのアクセスポリシーによっ
て、AssumeRole、AssumeRoleWithSAML、AssumeRoleWithWebIdentity が返す一時的なセキュ
API Version 2011-06-15
40
AWS Security Token Service 一時
的なセキュリティ認証情報の使用
例: AssumeRole を使用してアクセス権限を割り当てる
リティ認証情報のアクセス権限が決まります。これらのアクセス権限は、ロールを作成または更新す
るときに定義します。
必要に応じて、AssumeRole、AssumeRoleWithSAML、AssumeRoleWithWebIdentity API 呼び出
しのパラメータとしてポリシーを渡すことができます。渡したポリシーを使用して、一時的なセキュ
リティ認証情報に割り当てたアクセス権限の範囲を制限します。つまり、ロールのアクセスポリシー
によって許可されたアクセス権限の一部のみを許可するようにします。渡したポリシーを使用して、
ロールのアクセスポリシーによって許可されている以上のアクセス権限を付与することはできませ
ん。AssumeRole、AssumeRoleWithSAML、AssumeRoleWithWebIdentity API 呼び出しのパラ
メータとしてポリシーを渡さない場合、一時的なセキュリティ認証情報にアタッチされるアクセス権
限は、引き受けるロールのアクセスポリシーで定義されたアクセス権限と同じです。
AssumeRole、AssumeRoleWithSAML、AssumeRoleWithWebIdentity によって返される一時的な
セキュリティ認証情報を使用して AWS リクエストを行うと、AWS は以下のポリシーをすべて評価し
て、アクセスを許可するか拒否するかを判断します。
• 引き受けたロールのアクセスポリシー。
• AssumeRole、AssumeRoleWithSAML、または AssumeRoleWithWebIdentity API 呼び出しのパ
ラメータとして渡されるポリシー(該当する場合)。
• 一時的なセキュリティ認証情報がアクセスするリソースにアタッチされたリソースベースのポリ
シー(Amazon S3 バケットポリシーなど)。
AWS は、これらのポリシーをすべて使用し、IAM ポリシー評価ロジックに基づいて、「許可」また
は「拒否」を決定します。詳細については、『IAM ユーザーガイド』の「IAM ポリシーの評価ロジッ
ク」を参照してください。
重要なのは、AssumeRole を最初に呼び出した IAM ユーザーまたは認証情報にアタッチされたポリ
シーは、「許可」または「拒否」を決定する際に AWS によって評価されないことを理解することで
す。AssumeRoleWithSAML および AssumeRoleWithWebIdentity API の場合、API の呼び出し元
が AWS アイデンティティではないため、評価するポリシーはありません。
例: AssumeRole を使用してアクセス権限を割り当
てる
ロールのアクセスポリシー
この例では、AssumeRole API を呼び出し、オプションの Policy パラメータは指定しませ
ん。AssumeRole の呼び出しによって返される一時的なセキュリティ認証情報に割り当てられ
るアクセス権限、つまり、引き受けたロールユーザーに割り当てられるアクセス権限は、引き受
けるロールのアクセスポリシーによって決まります。以下の例は、引き受けたロールユーザーが
productionapp という名前の Amazon S3 バケットに含まれるすべてのオブジェクトをリストし、そ
のバケット内のオブジェクトを取得、格納、削除するアクセス権限を付与するロールのアクセスポリ
シーです。
API Version 2011-06-15
41
AWS Security Token Service 一時
的なセキュリティ認証情報の使用
例: AssumeRole を使用してアクセス権限を割り当てる
Example ロールのアクセスポリシー
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": ["s3:ListBucket"],
"Resource": ["arn:aws:s3:::productionapp"]
},
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:PutObject",
"s3:DeleteObject"
],
"Resource": ["arn:aws:s3:::productionapp/*"]
}
]
}
パラメータとして渡されたポリシー
先の例と同じロールを引き受けることをユーザーに許可しますが、引き受けたロールユーザーに
productionapp バケットにあるオブジェクトの取得と格納のアクセス権限のみを付与し、オブジェ
クトを削除するアクセス権限は付与しないとします。これを実現する 1 つの方法が、新しいロール
を作成し、そのロールのアクセスポリシーで目的のアクセス権限を指定することです。これを実現
するもう 1 つの方法は、AssumeRole API を呼び出して、API 呼び出しの一部としてオプションの
Policy パラメータを指定することです。たとえば、API 呼び出しのパラメータとして以下のポリ
シーを渡すとします。引き受けたロールユーザーは、これらのアクションを実行するアクセス権限の
みを持ちます。
• productionapp バケットのすべてのオブジェクトをリストします。
• productionapp バケットのオブジェクトを取得し格納します。
以下のポリシーでは s3:DeleteObject アクセス権限が指定されていないため、引き受けた
ロールユーザーには s3:DeleteObject アクセス権限が与えられないことに注意してくださ
い。AssumeRole API 呼び出しのパラメータとしてポリシーを渡すと、引き受けたロールユーザーに
有効なアクセス権限は、ロールのアクセスポリシーおよび渡されたポリシーで付与されたアクセス権
限のみです。
API Version 2011-06-15
42
AWS Security Token Service 一時
的なセキュリティ認証情報の使用
GetFederationToken のアクセス権限
Example AssumeRole API 呼び出しで渡すポリシー
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": ["s3:ListBucket"],
"Resource": ["arn:aws:s3:::productionapp"]
},
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:PutObject"
],
"Resource": ["arn:aws:s3:::productionapp/*"]
}
]
}
リソースベースのポリシー
一部の AWS リソースはリソースベースのポリシーをサポートし、このポリシーは一時的なセキュリ
ティ認証情報に影響するアクセス権限を定義する別の仕組みとして利用できます。リソースベース
のポリシーをサポートしているのは、Amazon S3 バケット、Amazon SNS トピック、Amazon SQS
キューのみです。以下の例では、前の例を拡張して、productionapp という名前の Amazon S3 バ
ケットを使用します。以下に挙げるポリシーが、バケットにアタッチされます。
productionapp バケットに以下のポリシーをアタッチすると、すべてのユーザーに対して、バ
ケットからオブジェクトを削除するアクセス権限が拒否されます(ポリシーの Principal 要素に注
意)。ロールのアクセスポリシーで DeleteObject アクセス権限が許可されていますが、これには
すべての引き受けたロールユーザーも含みます。明示的な Deny ステートメントは明示的な Allow ス
テートメントより常に優先されます。
Example バケットポリシー
{
"Version": "2012-10-17",
"Statement": [{
"Principal": {"AWS": "*"},
"Effect": "Deny",
"Action": ["s3:DeleteObject"],
"Resource": ["arn:aws:s3:::productionapp/*"]
}]
}
AWS で複数のポリシーを組み合わせて評価する方法の詳細については、『IAM ユーザーガイド』の
「IAM ポリシーの評価ロジック」を参照してください。
GetFederationToken のアクセス権限
GetFederationToken によって返される一時的なセキュリティ認証情報のアクセス権限は、以下を
組み合わせて決定されます。
API Version 2011-06-15
43
AWS Security Token Service 一時
的なセキュリティ認証情報の使用
例: GetFederationToken を使用
してアクセス権限を割り当てる
• 認証情報が GetFederationToken の呼び出しに使用される IAM ユーザーにアタッチされたポリ
シー。
• 呼び出しのパラメータとして渡されるポリシー。
渡されたポリシーは、GetFederationToken API 呼び出しから返される一時的なセキュリティ認証
情報、つまり、フェデレーティッドユーザーにアタッチされます。フェデレーティッドユーザーが
AWS リクエストを行うと、AWS は、認証情報が GetFederationToken の呼び出しに使用された
IAM ユーザーにアタッチされたポリシーと組み合わせて、フェデレーティッドユーザーにアタッチ
されたポリシーを評価します。AWS では、フェデレーティッドユーザーと IAM ユーザーの両方が明
示的に、リクエストされたアクションの実行を許可されている場合にのみ、フェデレーティッドユー
ザーのリクエストを許可します。
フェデレーティッドユーザーに割り当てるアクセス権限は、次の 2 か所のどちらかで定義されます。
• GetFederationToken API 呼び出しのパラメータとして渡されるポリシー(こちらが普通で
す)。
• ポリシーの Principal 要素でフェデレーティッドユーザーを明示的に指名するリソースベースの
ポリシー(こちらは珍しい)。
つまり、ほとんどの場合、GetFederationToken API 呼び出しでポリシーを渡さなければ、返
される一時的なセキュリティ認証情報はアクセス権限を持ちません。唯一の例外は、ポリシーの
Principal エレメントでフェデレーティッドユーザーを具体的に参照するリソースベースのポリシー
を持つリソースに、認証情報を使用してアクセスする場合です。
次の図は、ポリシーがどのように相互作用して、GetFederationToken の呼び出しによって返され
る一時的なセキュリティ認証情報のアクセス権限が決まるかを視覚的に示しています。
例: GetFederationToken を使用してアクセス権限を
割り当てる
IAM ユーザーにアタッチされたポリシー
この例では、2 つのバックエンドウェブサービスに頼ったブラウザベースのクライアントアプリケー
ションがあります。1 つのバックエンドサービスは、独自の ID システムを使用してクライアントア
プリケーションを認証する独自の認証サーバーです。もう 1 つのバックエンドサービスは、クライア
ントアプリケーションの機能の一部を提供する AWS サービスです。クライアントアプリケーション
はサーバーを使って認証し、サーバーは適切なアクセス権限ポリシーを作成または取得します。サー
バーは、続いて、GetFederationToken API を呼び出して一時的なセキュリティ認証情報を取得
し、その認証情報をクライアントアプリケーションに返します。クライアントアプリケーションは、
続いて、一時的なセキュリティ認証情報を使って AWS サービスに対してリクエストを直接行うこと
ができます。このアーキテクチャでは、長期的な AWS 認証情報を埋め込まなくても、クライアント
アプリケーションが AWS リクエストを実行できます。
API Version 2011-06-15
44
AWS Security Token Service 一時
的なセキュリティ認証情報の使用
例: GetFederationToken を使用
してアクセス権限を割り当てる
認証サーバーは、token-app という名前の IAM ユーザーの長期的なセキュリティ認証情報を使用し
て GetFederationToken API を呼び出しますが、長期的な IAM ユーザー認証情報はサーバーにとど
まり、クライアントには決して配布されません。以下の例のポリシーは、token-app IAM ユーザーに
アタッチされ、フェデレーティッドユーザー(クライアント)が必要とする最も広範なアクセス権限
を定義します。フェデレーティッドユーザーの一時的なセキュリティ認証情報を取得するには、認証
サービスに sts:GetFederationToken アクセス権限が必要となることに注意してください。
Note
AWS にはこの目的にかなったサンプル Java アプリケーションが用意されていて、「ID 登録
のためのトークン自動販売機 - サンプル Java ウェブアプリケーション」からダウンロードで
きます。
Example GetFederationToken を呼び出す IAM ユーザー token-app にアタッチされたポリ
シー
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "sts:GetFederationToken",
"Resource": "*"
},
{
"Effect": "Allow",
"Action": "dynamodb:*",
"Resource": "*"
},
{
"Effect": "Allow",
"Action": "sqs:*",
"Resource": "*"
},
{
"Effect": "Allow",
"Action": "s3:*",
"Resource": "*"
},
{
"Effect": "Allow",
"Action": "sns:*",
"Resource": "*"
}
]
}
前述のポリシーは、複数のアクセス権限を付与しますが、それだけではフェデレーティッドユーザー
にアクセス権限を付与できません。前述のポリシーで定義されたアクセス権限を持つ IAM ユーザーが
GetFederationToken を呼び出して、API 呼び出しのパラメータとしてポリシーを渡さない場合、
結果として、フェデレーティッドユーザーは有効なアクセス権限を持ちません。
パラメータとして渡されたポリシー
フェデレーティッドユーザーに適切なアクセス権限を確実に割り当てる最も一般的な方法
は、GetFederationToken API 呼び出しのパラメータとしてポリシーを渡すことです。前述の例を
拡張して、GetFederationToken が IAM ユーザー token-app の認証情報を使用して呼び出され、
API Version 2011-06-15
45
AWS Security Token Service 一時
的なセキュリティ認証情報の使用
例: GetFederationToken を使用
してアクセス権限を割り当てる
次のポリシーがAPI 呼び出しのパラメータとして渡されるとします。フェデレーティッドユーザー
は、次のアクションを実行するアクセス権限のみを付与されます。
• productionapp という Amazon S3 バケットの内容を表示します。
• productionapp バケットの項目に対して Amazon S3 の
GetObject、PutObject、DeleteObject アクションを実行します。
フェデレーティッドユーザーにこれらのアクセス権限が割り当てられるのは、GetFederationToken
を呼び出したIAM ユーザー(IAM ユーザーにアタッチされたポリシーを通じて)とフェデレーティッ
ドユーザー(渡されたポリシーを通じて)の両方にアクセス権限が付与されているためです。フェデ
レーティッドユーザーは、GetFederationToken 呼び出しに関連付けられた IAM ユーザーにこれら
のアクセス権限が付与されている場合でも、Amazon SNS、Amazon SQS、Amazon DynamoDB、ま
たは productionapp 以外の Amazon S3 バケットでアクションを実行することはできません。これ
は、フェデレーティッドユーザーの有効なアクセス権限が、IAM ユーザーポリシーおよび渡されたポ
リシーで付与されたアクセス権限のみで構成されるためです。
Example GetFederationToken API 呼び出しのパラメータとして渡されるポリシー
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": ["s3:ListBucket"],
"Resource": ["arn:aws:s3:::productionapp"]
},
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:PutObject",
"s3:DeleteObject"
],
"Resource": ["arn:aws:s3:::productionapp/*"]
}
]
}
リソースベースのポリシー
一部の AWS リソースはリソースベースのポリシーをサポートし、このポリシーはフェデレーティッ
ドユーザーにアクセス権限を直接付与するもう 1 つの仕組みとして利用できます。リソースベース
のポリシーをサポートしているのは、Amazon S3 バケット、Amazon SNS トピック、Amazon SQS
キューのみです。これらのサービスのうち 1 つを使用していて、リソースベースのポリシーを利用す
ることが意味を持つ場合、以下の例のように、リソースベースのポリシーの Principal 要素でフェ
デレーティッドユーザーの Amazon Resource Name を指定することで、フェデレーティッドユー
ザーに直接、アクセス権限を割り当てます。以下の例では、前の例を拡張して、productionapp と
いう名前の Amazon S3 バケットを使用します。
以下に挙げるポリシーが、バケットにアタッチされます。このポリシーでは、Carol と
いう名前のフェデレーティッドユーザーにバケットへのアクセスを許可します。以下
のリソースベースのポリシーが有効で、先に説明したサンプルポリシーが IAM ユー
ザー token-app にアタッチされていると、Carol というフェデレーティッドユーザー
は、s3:GetObject、s3:PutObject、s3:DeleteObject アクションを productionapp という
名前のバケットに対して実行するアクセス権限を持ちます。これは、GetFederationToken API
呼び出しのパラメータとしてポリシーが渡されていない場合でもあてはまります。それは、この場
API Version 2011-06-15
46
AWS Security Token Service 一時
的なセキュリティ認証情報の使用
GetSessionToken のアクセス権限
合、Carol というフェデレーティッドユーザーが、以下のリソースベースのポリシーによって明示的
にアクセス権限を付与されているためです。
フェデレーティッドユーザーがアクセス権限を付与されるのは、IAM ユーザーとフェデレーティッド
ユーザーの両方に、明示的にアクセス権限が付与されている場合のみであることを忘れないでくださ
い。以下の例のように、GetFederationToken API 呼び出しのパラメータとして渡すポリシー、ま
たは、ポリシーの Principal 要素で明示的にフェデレーティッドユーザーを指名したリソースベー
スのポリシーによって、フェデレーティッドユーザーにアクセス権限を付与できます。
Example フェデレーティッドユーザーにアクセスを許可するバケットポリシー
{
"Version": "2012-10-17",
"Statement": {
"Principal": {"AWS": "arn:aws:sts::ACCOUNT-ID-WITHOUT-HYPHENS:federateduser/Carol"},
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:PutObject",
"s3:DeleteObject"
],
"Resource": ["arn:aws:s3:::productionapp/*"]
}
}
GetSessionToken のアクセス権限
GetSessionToken によって返される一時的なセキュリティ認証情報のアクセス権限
は、GetSessionToken API を呼び出すときに認証情報が使用される IAM ユーザーまたは
AWS(ルート)アカウントに関連付けられたアクセス権限と一致します。GetSessionToken が IAM
ユーザーの認証情報を使用して呼び出された場合、一時的なセキュリティ認証情報は IAM ユーザー
と同じアクセス権限を持ちます。同様に、GetSessionToken がルートアカウントの認証情報を使用
して呼び出された場合、一時的なセキュリティ認証情報はルートアカウントのアクセス権限を持ちま
す。
Note
GetSessionToken は、ルートアカウントの認証情報を使って呼び出さないことをお勧めし
ます。代わりに、ベストプラクティスに従って、IAM ユーザーを作成し、必要なアクセス権
限を付与し、IAM ユーザーを使って AWS の日々の操作を実行してください。
GetSessionToken を呼び出す主なユースケースは、多要素認証(MFA)で認証されている場合
にのみ許可されたアクションをユーザーが実行する必要がある場合です。MFA で認証されたユー
ザーが要求した場合にのみ特定のアクションを許可するポリシーを作成することができます。MFA
認証チェックを正常に渡すには、ユーザーはまず GetSessionToken を呼び出し、オプションの
SerialNumber および TokenCode パラメータを GetSessionToken API 呼び出しに含める必要があ
ります。ユーザーが SerialNumber および TokenCode の有効な値を渡せば、つまり、ユーザーが
MFA デバイスで正常に認証されれば、GetSessionToken API 呼び出しで返される認証情報は MFA
コンテキストを含みます。その後、GetSessionToken で返された認証情報を使用して AWS を呼び
出すと、MFA 認証を必要とする AWS API を正常に呼び出すことができます。
GetSessionToken を使用した MFA で保護された API アクセスの詳細については、『IAM ユーザー
ガイド』の「MFA で保護された API アクセスの設定」を参照してください。
API Version 2011-06-15
47
AWS Security Token Service 一時
的なセキュリティ認証情報の使用
アクセス権限の無効化
一時的なセキュリティ認証情報のアクセス権限を
無効にする
一時的なセキュリティ認証情報は、期限が切れるまで有効で、取り消すことはできません。ただし、
アクセス権限は、認証情報を使用する AWS リクエストがなされるたびに評価されるため、発行後に
認証情報のアクセス権を変更することで、認証情報を取り消すのと同等の効果を得ることができま
す。一時的なセキュリティ認証情報からすべてのアクセス権限を削除すると、その後、その認証情報
を使用する AWS リクエストは失敗します。一時的なセキュリティ認証情報に割り当てられたアクセ
ス権限を変更または削除する仕組みについては、以降のセクションでは説明します。
Note
既存のポリシーのアクセス権限を更新したとき、または、ユーザーやリソースに新しいポリ
シーを適用したときに、ポリシーの更新が有効になるまでに数分かかることがあります。
トピック
• 一時的なセキュリティ認証情報の作成者のアクセスを拒否する (p. 48)
• 一時的なセキュリティ認証情報のアクセスを名前で拒否する (p. 49)
• 特定の時間より前に発行した一時的なセキュリティ認証情報のアクセスを拒否する (p. 50)
一時的なセキュリティ認証情報の作成者のアクセス
を拒否する
一時的なセキュリティ認証情報に割り当てられたアクセス権限を変更または削除するために、認証情
報の作成者に関連付けられたアクセス権限を変更または削除することができます。認証情報の作成者
は、認証情報を取得するために使用された AWS STS API によって決定されます。一時的なセキュリ
ティ認証情報の作成者に関連付けられたアクセス権限を変更または削除する仕組みについては、以降
のセクションで説明します。
AssumeRole、AssumeRoleWithSAML、AssumeRoleWithWebIdentity
によって作成された認証情報のアクセスを拒否する
AssumeRole、AssumeRoleWithSAML、AssumeRoleWithWebIdentity API を呼び出して取得し
た一時的なセキュリティ認証情報に割り当てたアクセス権限を変更または削除するには、引き受けた
ロールのアクセス権限を定義するロールアクセスポリシーを編集または削除します。ロールを引き受
けることで取得した一時的なセキュリティ認証情報は、引き受けたロールのアクセスポリシーで定義
されたアクセス権限を超えるアクセス権限を持つことはできません。また、一時的なセキュリティ認
証情報に割り当てられたアクセス権限は、AWS リクエストで使用されるたびに評価されます。ロー
ルのアクセスポリシーを編集または削除すると、その変更内容は、ロールのアクセスポリシーを変更
する前に発行された認証情報も含めて、そのロールに関連付けられているすべての一時的なセキュリ
ティ認証情報のアクセス権限に影響します。
ロールのアクセスポリシーの編集方法の詳細については、『IAM ユーザーガイド』の「ロールの変
更」にある「ロールに関連付けられたアクセス権限を編集するには」という項目を参照してくださ
い。
GetFederationToken または GetSessionToken によって作成さ
れた認証情報のアクセスを拒否する
GetFederationToken または GetSessionToken API を呼び出して取得した一時的なセキュリティ
認証情報に割り当てられたアクセス権限を変更または削除するには、GetFederationToken または
API Version 2011-06-15
48
AWS Security Token Service 一時
的なセキュリティ認証情報の使用
認証情報のアクセスを名前で拒否
GetSessionToken を呼び出すときに認証情報を使用した IAM ユーザーにアタッチされたポリシーを
編集または削除します。GetFederationToken または GetSessionToken を呼び出して取得した一
時的なセキュリティ認証情報は、それを取得するために認証情報を使用した IAM ユーザーよりも多く
のアクセス権限を持つことはできません。また、一時的なセキュリティ認証情報に割り当てられたア
クセス権限は、AWS リクエストで使用するたびに評価されます。重要な注意点として、IAM ユーザー
のアクセス権限を編集または削除すると、変更内容はその IAM ユーザーのほかに、そのユーザーが作
成したすべての一時的なセキュリティ認証情報にも影響します。
Important
AWS(ルート)アカウントのアクセス権限を変更することはできません。同様に、ルートア
カウントを使って GetFederationToken または GetSessionToken を呼び出して作成され
た一時的なセキュリティ認証情報のアクセス権限を変更することもできません。そのため、
ルートアカウントの認証情報を使って GetFederationToken または GetSessionToken を
呼び出さないことをお勧めします。
GetFederationToken または GetSessionToken を呼び出すときに認証情報を使用した IAM ユー
ザーに関連付けられたポリシーを変更または削除する方法については、『IAM ユーザーガイド』の
「IAM ポリシーの管理」を参照してください。
一時的なセキュリティ認証情報のアクセスを名前で
拒否する
認証情報を作成した IAM ユーザーまたはロールのアクセス権限に影響を与えることなく、一時的な
セキュリティ認証情報のアクセスを拒否することもできます。これは、リソースベースのポリシー
の Principal 要素で一時的なセキュリティ認証情報の Amazon Resource Name(ARN)を指定
することで実行します(リソースベースのポリシーをサポートしているのは、Amazon S3 バケッ
ト、Amazon SQS キュー、Amazon SNS トピックのみです)。
フェデレーティッドユーザーのアクセスを拒否する
たとえば、認証情報を GetFederationToken の呼び出しに使用する token-app という名の IAM
ユーザーがいるとします。GetFederationToken API を呼び出すと、Bob という名前のフェデレー
ティッドユーザーに関連付けられた一時的なセキュリティ認証情報が得られました(フェデレー
ティッドユーザー名は、API 呼び出しの Name パラメータから付けられます)。フェデレーティッ
ドユーザーの Bob による EXAMPLE-BUCKET という Amazon S3 バケットへのアクセスを拒否する
には、次のサンプルバケットポリシーを EXAMPLE-BUCKET にアタッチします。重要な注意点とし
て、これはフェデレーティッドユーザーの Amazon S3 アクセス権限のみに影響します。フェデレー
ティッドユーザーに付与された他のアクセス権限は影響を受けません。
{
"Version": "2012-10-17",
"Statement": {
"Principal": {"AWS": "arn:aws:sts::ACCOUNT-ID-WITHOUT-HYPHENS:federateduser/Bob"},
"Effect": "Deny",
"Action": "s3:*",
"Resource": "arn:aws:s3:::EXAMPLE-BUCKET"
}
}
フェデレーティッドユーザーを指定する代わりに、GetFederationToken の呼び出し時に認証情報
が使用された IAM ユーザーの ARN を、バケットポリシーの Principal 要素で指定できます。その
場合、前述のポリシーの Principal 要素は次のようになります。
API Version 2011-06-15
49
AWS Security Token Service 一時
的なセキュリティ認証情報の使用
認証情報のアクセスを作成時間で拒否
"Principal": {"AWS": "arn:aws:iam::ACCOUNT-ID-WITHOUT-HYPHENS:user/tokenapp"}
重要な注意点として、ポリシーで IAM ユーザー token-app の ARN を指定すると、Bob という名
前のフェデレーティッドユーザーだけでなく、token-app によって作成されたすべてのフェデレー
ティッドユーザーのアクセスが拒否されます。
引き受けたロールユーザーのアクセスを拒否する
ロールを引き受けることで作成された一時的なセキュリティ認証情報の ARN を指定することもでき
ます。違うのは、リソースベースのポリシーの Principal 要素で使用される構文です。たとえば、
ユーザーが Accounting-Role というロールを引き受けて、Mary という RoleSessionName を指
定します(RoleSessionName は AssumeRole API 呼び出しのパラメータです)。この API 呼び出
しによる一時的なセキュリティ認証情報のアクセスを拒否する場合、リソースベースのポリシーの
Principal 要素は次のようになります。
"Principal": {"AWS": "arn:aws:sts::ACCOUNT-ID-WITHOUT-HYPHENS:assumed-role/
Accounting-Role/Mary"}
また以下の例のように、リソースベースのポリシーの Principal 要素で IAM ロールの ARN を指定
することもできます。この場合、ポリシーは、Accounting-Role という名前のロールに関連付けら
れたすべての一時的なセキュリティ認証情報のアクセスを拒否します。
"Principal": {"AWS": "arn:aws:iam::ACCOUNT-ID-WITHOUT-HYPHENS:role/
Accounting-Role"}
特定の時間より前に発行した一時的なセキュリティ
認証情報のアクセスを拒否する
特定の日時より前に作成された一時的なセキュリティ認証情報だけ、アクセスを拒否するこ
とができます。これは、ポリシーの Condition 要素の aws:TokenIssueTime キーの値を指
定することで実行できます。ポリシーの例を以下に示します。以下の例に似たポリシーを、
一時的なセキュリティ認証情報を作成した IAM ユーザーにアタッチします。このポリシー
は、aws:TokenIssueTime の値が指定した日時より前である場合にのみ、すべてのアクセス権限を
拒否します。aws:TokenIssueTime の値は、一時的なセキュリティ認証情報が作成された正確な時
間に相当します。aws:TokenIssueTime の値は、一時的なセキュリティ認証情報を使用して署名さ
れた AWS リクエストのコンテキストでのみ存在します。したがって、ポリシーの Deny ステートメ
ントは、IAM ユーザーの長期的な認証情報を使って署名したリクエストには影響しません。
以下のポリシーは、ロールにアタッチすることもできます。その場合、このポリシーは、指定した日
時より前に、そのロールによって作成された一時的なセキュリティ認証情報のみに影響します。認証
情報が指定の日時より後にロールによって作成された場合、ポリシーの Condition 要素は false と評
価され、Deny ステートメントは効果を持ちません。
API Version 2011-06-15
50
AWS Security Token Service 一時
的なセキュリティ認証情報の使用
関連トピック
Example 発行時間により一時的な認証情報にすべてのアクセス権限を拒否するポリシー
{
"Version": "2012-10-17",
"Statement": {
"Effect": "Deny",
"Action": "*",
"Resource": "*",
"Condition": {"DateLessThan": {"aws:TokenIssueTime":
"2014-05-07T23:47:00Z"}}
}
}
関連トピック
一時的なセキュリティ認証情報を使用するシナリオとアプリケーション
• モバイルアプリに AWS アクセスを許可するロールを作成する (p. 17). このセクションでは、ウェブ
ID フェデレーションと AssumeRoleWithWebIdentity API を使用するときに、IAM ロールを設定
する方法について説明します。
• 「MFA で保護された API アクセスの設定」(『IAM ユーザーガイド』)。このトピックでは、アカ
ウントで機密性の高い API アクションを保護するために、ロールを使用して多要素認証(MFA)を
要求する方法について説明します。
• 「ID 登録のためのトークン自動販売機」。このサンプル Java ウェブアプリケーション
は、GetFederationToken API を使用して、リモートクライアントに一時的なセキュリティ認証
情報を発行します。
AWS のポリシーとアクセス権限の詳細については、以下を参照してください。
• 「アクセス権限とポリシー」(『IAM ユーザーガイド』)
• 「IAM ポリシーの評価ロジック」(『IAM ユーザーガイド』)
• 「Amazon S3 リソースへのアクセス権限の管理」(『Amazon Simple Storage Service 開発者ガイ
ド』)
API Version 2011-06-15
51
AWS Security Token Service 一時
的なセキュリティ認証情報の使用
一時的なセキュリティ認証情報を使
用して AWS リソースをリクエスト
する
このセクションでは、AWS STS から取得した一時的なセキュリティ認証情報の使用方法の概要を示
します。
一時的なセキュリティ認証情報を使用して、IAM ユーザー認証情報のような長期的なセキュリティ認
証情報を使用するときと同じ方法で、AWS SDK または API 呼び出しを使ってプログラムから AWS
リソースをリクエストすることができます。ただし、いくつか違いがあります。
• 一時的なセキュリティ認証情報を使用して呼び出しを行うときは、一時的な認証情報とともに返さ
れるセッショントークンを呼び出しに含める必要があります。AWS はセッショントークンを使用し
て、一時的なセキュリティ認証情報を検証します。
• 一時的な認証情報は、指定した期間が過ぎると失効します。認証情報が有効期限切れになると、そ
の認証情報を使用する呼び出しはすべて失敗するため、新しい認証情報を取得する必要がありま
す。
AWS SDK または AWS コマンドラインインターフェイス(CLI)を使用している場合、一時的なセ
キュリティ認証情報を取得および使用する方法はコンテキストによって異なります。コードまたは
AWS CLI コマンドを Amazon EC2 インスタンス内部で実行している場合は、EC2 のロールを利用で
きます。それ以外の場合は、STS API を呼び出して一時的な認証情報を取得した後、それを明示的に
使用して AWS サービスを呼び出すことができます。
Note
デフォルトでは、AWS STS は https://sts.amazonaws.com に単一のエンドポイントを
持つグローバルサービスです。サービスから取得した認証情報はグローバルに有効であり、
どのリージョンでもサービスやリソースを使用できますが、このエンドポイントは実際には
米国東部(バージニア北部) リージョンにあります。アカウントの追加リージョンで AWS
STS を有効にすることを選択し、追加したリージョンのエンドポイントに対して AWS STS
API の呼び出しを実行できます。地理的に近い場所にあるリージョンのサーバーに対してリ
クエストを実行することによって、レイテンシーを低減できます。認証情報を取得したリー
API Version 2011-06-15
52
AWS Security Token Service 一時
的なセキュリティ認証情報の使用
Amazon EC2 インスタンスでの一時的な認証情報の使用
ジョンに関係なく、認証情報はグローバルに使用できます。詳細については、「新しいリー
ジョンでの AWS STS のアクティブ化 (p. 70)
」を参照してください。
目次
• Amazon EC2 インスタンスでの一時的な認証情報の使用 (p. 53)
• AWS SDK で一時的なセキュリティ認証情報を使用する (p. 53)
• AWS CLI で一時的なセキュリティ認証情報を使用する (p. 54)
• API で一時的なセキュリティ認証情報を使用する (p. 55)
• 詳細情報 (p. 56)
Amazon EC2 インスタンスでの一時的な認証情報
の使用
AWS CLI コマンドまたはコードを Amazon EC2 インスタンス内部で実行する場合、認証情報を取得
するのに推奨される方法は、EC2 のロールを使用する方法です。つまり、Amazon EC2 インスタンス
で実行されているアプリケーションに与えるアクセス権限を指定する IAM ロールを作成します。イン
スタンスを起動するときに、このロールとインスタンスを関連付けます。
これにより、インスタンスで実行されるアプリケーションおよび AWS CLI コマンドがインスタンス
メタデータから自動的に一時的なセキュリティ認証情報を取得できるようになります。一時的なセ
キュリティ認証情報を明示的に取得する必要はありません。AWS SDK および AWS CLI によって自動
的に EC2 インスタンスメタデータサービスから認証情報が取得および使用されます。一時的なセキュ
リティ認証情報には、インスタンスに関連付けられたロールに定義されているアクセス権限が与えら
れます。
詳細情報および例については、次のセクションを参照してください。
• AWS SDK for Java で EC2 インスタンスの IAM ロールを使用する
• .NET 向け AWS SDK で Amazon EC2 インスタンスの IAM ロールを使用する
• AWS SDK for Ruby で Amazon EC2 インスタンスの IAM ロールを使用する
• AWS SDK for PHP のドキュメントの「Amazon EC2 インスタンスの IAM ロールの使用」
AWS SDK で一時的なセキュリティ認証情報を使
用する
一時的なセキュリティ認証情報をコードで使用するには、AWS STS API(たとえば、AssumeRole)
をプログラムで呼び出し、結果の認証情報とセッショントークンを抽出し、これらの値を後続の AWS
の呼び出しで認証情報として使用します。以下の例は、AWS SDK を使用している場合に、一時的な
セキュリティ認証情報を使用する方法を示す疑似コードです。
assumeRoleResult = AssumeRole(role-arn);
tempCredentials = new SessionAWSCredentials(
assumeRoleResult.AccessKeyId,
assumeRoleResult.SecretAccessKey,
assumeRoleResult.SessionToken);
s3Request = CreateAmazonS3Client(tempCredentials);
API Version 2011-06-15
53
AWS Security Token Service 一時
的なセキュリティ認証情報の使用
AWS CLI で一時的なセキュリティ認証情報を使用する
AssumeRole を呼び出して一時的なセキュリティ認証情報を取得し、その認証情報を使用して
Amazon S3 を呼び出す Python で書かれた例(AWS SDK for Python (Boto) を使用)については、
『IAM ユーザーガイド』の「API 呼び出しを使用してロールを引き受ける」を参照してください。
AssumeRole や GetFederationToken などの API を呼び出す方法、および、結果から一時的なセ
キュリティ認証情報とセッショントークンを取得する方法の詳細については、お使いの SDK のドキュ
メントを参照してください。メインの AWS ドキュメントページで、AWS SDK に関するドキュメン
トをすべて見つけることができます。
古い認証情報が失効する前に、新しい認証情報を取得する必要があります。一部の SDK では、ユー
ザーの代わりに認証情報の更新処理を管理するプロバイダーを使用できます。お使いの SDK のドキュ
メントを確認してください。
AWS CLI で一時的なセキュリティ認証情報を使
用する
AWS コマンドラインインターフェイス(CLI)で一時的なセキュリティ認証情報を使用できます。こ
れは、ポリシーをテストする場合に便利です。
AWS CLI を使用して、AWS STS API(たとえば、AssumeRole、GetFederationToken)を呼び出
し、結果の出力をキャプチャします。次の例は、出力をファイルに送信する AssumeRole の呼び出
しを示しています。この例の profile パラメータは、AWS CLI 設定ファイル内のプロファイルで、
ロールを引き受けるためのアクセス権限を持つ IAM ユーザーの認証情報を参照します。
aws sts assume-role --role-arn arn:aws:iam::123456789012:role/role-name -role-session-name "RoleSession1" --profile IAM-user-name > /tmp/assume-roleoutput.txt
コマンドが完了したら、手動で、またはスクリプトを使用して、アクセスキー ID、シークレットアク
セスキー、およびルーティングした場所からのセッショントークンを抽出します。次に、これらの値
を環境変数に割り当てます。
AWS CLI コマンドを実行すると、認証情報は、最初に環境変数内、次に設定ファイル内という順序で
検索されます。したがって、一時的な認証情報を環境変数に設定すると、デフォルトでこれらの認証
情報が使用されます(コマンドに profile パラメータを指定すると、環境変数がスキップされ、設
定ファイル内で認証情報が検索されます。これにより、環境変数内の認証情報を上書きできます)。
次の例では、環境変数に一時的なセキュリティ認証情報を設定した後で AWS CLI コマンドを呼び出
しています。AWS CLI コマンドには profile パラメータが指定されていないため、最初に環境変数
内で認証情報が検索されます。その結果、一時的な認証情報が使用されます。
Linux
export AWS_ACCESS_KEY_ID=AKIAI44QH8DHBEXAMPLE
export AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
export AWS_SECURITY_TOKEN=AQoDYXdzEJr...<remainder of security token>
aws ec2 describe-instances --region us-west-1
Windows
SET AWS_ACCESS_KEY_ID=AKIAI44QH8DHBEXAMPLE
SET AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
SET AWS_SECURITY_TOKEN=AQoDYXdzEJr...<remainder of security token>
API Version 2011-06-15
54
AWS Security Token Service 一時
的なセキュリティ認証情報の使用
API で一時的なセキュリティ認証情報を使用する
aws ec2 describe-instances --region us-west-1
API で一時的なセキュリティ認証情報を使用する
AWS に直接 API リクエストを行う場合は、長期的な認証情報を使用するときと同様に、一時的なア
クセスキー ID とシークレットアクセスキーを使用します。ほとんどのサービスでは、以下を実行しま
す。
• 通常の AWS 呼び出しで使用する長期的なアクセスキー ID の代わりに、一時的なアクセスキー ID
を使用します(たとえば、呼び出しの AWSAccessKeyId パラメータの値として)。
• 一時的なセキュリティ認証情報の一部として提供されるシークレットアクセスキーを使用してリク
エストに署名します。
• 一時的なセキュリティ認証情報の一部である IAM セッショントークンを含めます。リクエストの認
証ヘッダー、たとえば X-Amz-Security-Token ヘッダーとして、セッショントークンを含めます
(セッショントークンは、署名の作成時に使用される情報の一部ではありません)。
以下の例は、一時的なセキュリティ認証情報を使用して、IAM に対する ListUsers リクエストを認
証します。リクエストは、署名バージョン 4 を使用し、ヘッダーに認証情報を含みます。
署名バージョン 4 を使用しヘッダーに認証情報を追加するサービスのサンプル
POST http://iam.amazonaws.com/ HTTP/1.1
Authorization: AWS4-HMAC-SHA256 Credential=Access Key ID provided
by AWS Security Token Service/20110909/us-east-1/iam/aws4_request,
SignedHeaders=host, Signature=signature-calculated-using-the-temporaryaccess-key
host: iam.amazonaws.com
Content-type: application/x-www-form-urlencoded; charset=utf-8
X-Amz-Date: 20110909T233600Z
X-Amz-Security-Token: session-token
Action=ListUsers&Version=2010-05-08
以下の例は、署名バージョン 2 を使用し、クエリ文字列に認証情報を含める Amazon SimpleDB リク
エストを示しています。
署名バージョン 2 を使用しクエリ文字列に認証情報を追加するサービスのサンプル
https://sdb.amazonaws.com/
?Action=GetAttributes
&AWSAccessKeyId=access-key-from-AWS Security Token Service
&DomainName=MyDomain
&ItemName=MyItem
&SignatureVersion=2
&SignatureMethod=HmacSHA256
&Timestamp=2010-01-25T15%3A03%3A07-07%3A00
&Version=2009-04-15
&Signature=signature-calculated-using-the-temporary-access-key
&SecurityToken=session-token
期限の切れた認証情報を使用してリクエストを送信すると、AWS によってリクエストが拒否されま
す。
API Version 2011-06-15
55
AWS Security Token Service 一時
的なセキュリティ認証情報の使用
詳細情報
AWS リクエストの署名の詳細については、『AWS General Reference』の「AWS API リクエストの
署名」を参照してください。
詳細情報
他の AWS サービスで AWS STS を使用する方法については、次のリンクを参照してください。
• Amazon S3. 『Amazon Simple Storage Service 開発者ガイド』の「IAM ユーザーの一時的な認証情
報を使用したリクエストの実行」または「フェデレーションユーザーの一時的な認証情報を使用し
たリクエストの実行」を参照してください。
• Amazon SNS. 『Amazon Simple Notification Service 開発者ガイド』の「一時的なセキュリティ認
証情報の使用」を参照してください。
• Amazon SQS. 『Amazon Simple Queue Service 開発者ガイド』の「一時的なセキュリティ認証情
報の使用」を参照してください。
• Amazon SimpleDB. 『Amazon SimpleDB 開発者ガイド』の「一時的なセキュリティ認証情報の使
用」を参照してください。
API Version 2011-06-15
56
AWS Security Token Service 一時
的なセキュリティ認証情報の使用
SAML を使用してフェデレーティッドユーザー
に AWS コンソールへのアクセスを許可する
フェデレーティッドユーザーに
AWS マネジメントコンソール への
直接アクセスを許可する
ID および認証システムを使用してフェデレーティッドユーザーを認証した後、AWS マネジメントコ
ンソール へのシングルサインオン(SSO)アクセスを許可できます。こうすることで、フェデレー
ティッドユーザーが追加の認証情報なしでアマゾン ウェブ サービス(AWS)にサインインできるよ
うになります。また、既存の IAM ユーザーのパスワードを共有する必要もありません。
これを行うために使用する方法は、組織がどのようにセットアップされているかによって異なりま
す。
• 組織の ID システムに SAML 2.0(Security Assertion Markup Language 2.0)が統合されている場
合、組織と IAM をセットアップして、ユーザーが組織内のポータルにシームレスにサインし、AWS
マネジメントコンソール に移動するオプションを選択すると、コンソールに自動的に移動するよう
にできます。
• そのほかのシナリオの場合、ID 情報を含む URL を作成するコードを書くことができます。その
URL をユーザーに配布して、AWS マネジメントコンソール に対する安全な直接アクセスを可能に
できます。
トピック
• SAML を使用してフェデレーティッドユーザーに AWS コンソールへのアクセスを許可す
る (p. 57)
• URL を作成してフェデレーティッドユーザーに AWS コンソールへのアクセスを許可す
る (p. 62)
SAML を使用してフェデレーティッドユーザーに
AWS コンソールへのアクセスを許可する
組織で SAML をサポートしている場合、組織で認証されたユーザーに対して、IAM ID がなく、
再度サインインしなくても、AWS マネジメントコンソール へのアクセスを許可することができ
ます。AWS には、コンソールに対するフェデレーティッドアクセスをユーザーに許可するのに使
API Version 2011-06-15
57
AWS Security Token Service 一時
的なセキュリティ認証情報の使用
SAML を使用してフェデレーティッドユーザー
に AWS コンソールへのアクセスを許可する
用される SAML アサーションを受け入れるシングルサインオン(SSO)エンドポイント(https://
signin.aws.amazon.com/saml)が用意されています。
Note
また、ID プロバイダーと AWS を設定して、AWS リソースにプログラムからアクセスする
ときに使用できる一時的なセキュリティ認証情報を取得することもできます。詳細について
は、「AWS STS SAML 2.0 ベースのフェデレーションについて (p. 22)」を参照してくださ
い。
次の図は、SAML 対応のシングルサインオンについて処理の流れを示しています。
1. ユーザーは組織のポータルにアクセスして、AWS マネジメントコンソール に移動するオプショ
ンを選択します。組織のポータルは、組織と AWS 間の信頼の交換を処理する ID プロバイダー
(IdP)として機能します。
2. ポータルが組織内のユーザーの ID を確認します。
3. ポータルは、ユーザーを識別するアサーションを含む SAML アサーションレスポンスを生成し、
ユーザーの属性を含めます。ポータルは、クライアント(ユーザーのブラウザ)にこのレスポンス
を送信します。
4. クライアントは、AWS シングルサインオンエンドポイントに SAML アサーションを送信します。
エンドポイントは、AWS STS の AssumeRoleWithSAML API を使用して一時的なセキュリティ認
証情報をリクエストし、コンソールサインイン URL を作成します。
5. AWS は、クライアントにサインイン URL をリダイレクト付きで送信します。
6. クライアントは、コンソールサインイン URL を受け取り、AWS マネジメントコンソール にリダ
イレクトされます(複数の IAM ロールに対応付けられた属性を認証レスポンスが含む場合は、コン
ソールへのアクセスに使用するロールを選択する画面が表示されます)。
ユーザーの立場では、この処理を意識することはありません。ユーザーは組織の内部ポータルから
AWS 管理コンソールに移動するだけで、AWS 認証情報を指定する必要はありません。
SAML ベースのフェデレーションを使用して AWS リソースにアクセスするには、それを ID プロバ
イダーとして設定するために、組織のネットワーク内の手順を実行します。次に、サービスプロバイ
ダーとして機能するように AWS を設定します。
トピック
API Version 2011-06-15
58
AWS Security Token Service 一時
的なセキュリティ認証情報の使用
AWS の SAML プロバイダー
としてネットワークを設定する
• AWS の SAML プロバイダーとしてネットワークを設定する (p. 59)
• IAM で SAML プロバイダーを作成する (p. 59)
• フェデレーティッドユーザーのために AWS でアクセス権限を確立する (p. 59)
• SAML 認証レスポンスのアサーションを設定する (p. 60)
• SAML 属性と AWS ポリシーキーの対応付け (p. 61)
AWS の SAML プロバイダーとしてネットワークを
設定する
組織のネットワーク内で、組織の ID ストア(Windows Active Directory など)が、Windows Active
Directory Federation Services や Shibboleth などの SAML ベースの ID プロバイダー(IdP)と連携す
るように設定します。IdP を使用して、組織を ID プロバイダーとして記述し、認証キーを含むドキュ
メントメタデータを生成します。また、AWS マネジメントコンソール に対するユーザーリクエスト
を AWS SAML エンドポイントにルーティングして、SAML アサーションを使って認証するように、
組織のポータルを設定します。
IAM で SAML プロバイダーを作成する
次に AWS マネジメントコンソール に移動します。IAM コンソールで、新しい SAML プロバイダーを
作成します。これは、ID プロバイダーとしての組織に関する情報を保持する IAM のエンティティで
す。このプロセスの一環として、組織の SAML ソフトウェアによって生成されたメタデータドキュメ
ントをアップロードします。
詳細については、『IAM ユーザーガイド』の「SAML プロバイダーの管理」を参照してください。
このタスクを完了すると、組織と IAM の間の信頼関係を確立でき、フェデレーション目的で組織をプ
リンシパル(信頼されたエンティティ)として識別する IAM ロールを作成できます。
フェデレーティッドユーザーのために AWS でアク
セス権限を確立する
次のステップでは、組織のユーザーが AWS でどのような操作を許可されているかを定義する IAM
ロールを作成します。このロールは、IAM コンソールを使用して作成できます。ロールの信頼ポリ
シーを作成するときは、以前に IAM で作成した SAML プロバイダーを指定し、ユーザーについて記述
する SAML 属性を指定します。たとえば、SAML の eduPersonOrgDN 値が ExampleOrg であるユー
ザーのみにサインインを許可するように指定できます。ロールウィザードは、そのロールが SSO だ
けで引き受けられるように、saml:aud 属性をテストする条件を自動的に追加します。信頼ロールは
次のようになります。
{
"Version": "2012-10-17",
"Statement": [{
"Effect": "Allow",
"Principal": {"Federated": "arn:aws:iam::ACCOUNT-ID-WITHOUT-HYPHENS:samlprovider/ExampleOrgSSOProvider"},
"Action": "sts:AssumeRoleWithSAML",
"Condition": {"StringEquals": {
"saml:edupersonorgdn": "ExampleOrg",
"saml:aud": "https://signin.aws.amazon.com/saml"
}}
}]
}
API Version 2011-06-15
59
AWS Security Token Service 一時
的なセキュリティ認証情報の使用
SAML 認証レスポンスのアサーションを設定する
ロールのアクセス(アクセス権限)ポリシーでは、どのロールにも付与するアクセス権限を指定しま
す。たとえば、組織のユーザーが Amazon EC2 インスタンスを管理できる場合、Amazon EC2 Full
Access ポリシーテンプレートのように、アクセス権限ポリシーで明示的に Amazon EC2 アクション
を許可します。
詳細については、『IAM ユーザーガイド』の「SAML ベースのフェデレーション用にロールを作成す
る」を参照してください。
SAML 認証レスポンスのアサーションを設定する
組織でユーザーの ID を確認した後、IdP は AWS エンドポイント(https://signin.aws.amazon.com/
saml)に認証レスポンスを送信する必要があります。このレスポンスは、HTTP POST Binding for
SAML 2.0 標準に従った SAML トークンを含み、さらに以下の要素を含む POST リクエストでなくて
はいけません。これらの要素はすべて必要です。
• Subject および NameID. 例を以下に示します。マークされた値はユーザー独自の値に置き換
えます。SubjectConfirmationData 要素内の Recipient 属性の値は、以下の例に示すよう
に、AWS エンドポイント(https://signin.aws.amazon.com/saml)と一致する必要があります。
<Subject>
<NameID Format="urn:oasis:names:tc:SAML:2.0:nameidformat:persistent">_cbb88bf52c2510eabe00c1642d4643f41430fe25e3
</NameID>
<SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer">
<SubjectConfirmationData NotOnOrAfter="2013-11-05T02:06:42.876Z"
Recipient="https://signin.aws.amazon.com/saml"/>
</SubjectConfirmation>
</Subject>
• AudienceRestriction および Audience. Audience 要素の値は、https://
signin.aws.amazon.com/saml または urn:amazon:webservices のどちらかと一致する必
要があります。例を以下に示します。この例では、Audience 要素で可能な値を両方示しています
が、IdP の認証レスポンスは 1 つを含むだけでかまいません。
<Conditions>
<AudienceRestriction>
<Audience>https://signin.aws.amazon.com/saml</Audience>
<Audience>urn:amazon:webservices</Audience>
</AudienceRestriction>
</Conditions>
• Name が https://aws.amazon.com/SAML/Attributes/Role に設定された属性。この属性
は、1 つ以上の AttributeValue 要素を含み、IdP でユーザーが対応付けられた IAM ロールおよ
び SAML プロバイダーを列挙します。ロールとプロバイダーは、カンマ区切りの ARN ペアとして
指定します。これは、AssumeRoleWithSAML に渡す RoleArn および PrincipalArn パラメータ
で使用する形式と同じです。属性は、最低 1 つのロールとプロバイダーのペアを含む必要があり、
複数のペアを含むことができます。属性が複数のペアを含む場合、ユーザーが WebSSO を使用し
て AWS マネジメントコンソール にサインインすると、引き受けるロールを選択する画面が表示さ
れます。
<Attribute Name="https://aws.amazon.com/SAML/Attributes/Role">
<AttributeValue>arn:aws:iam::account-number:role/rolename,arn:aws:iam::account-number:saml-provider/provider-name</
AttributeValue>
<AttributeValue>arn:aws:iam::account-number:role/rolename,arn:aws:iam::account-number:saml-provider/provider-name</
AttributeValue>
API Version 2011-06-15
60
AWS Security Token Service 一時
的なセキュリティ認証情報の使用
SAML 属性と AWS ポリシーキーの対応付け
<AttributeValue>arn:aws:iam::account-number:role/rolename,arn:aws:iam::account-number:saml-provider/provider-name</
AttributeValue>
</Attribute>
• Name が https://aws.amazon.com/SAML/Attributes/RoleSessionName に設定された
属性。属性値は、AWS の一時的認証情報の識別子で、SSO 用に発行され、AWS コンソールで
ユーザー情報を表示するときに使用されます。この値は、長さが 2~32 文字で、英字、数字、下線
(_)、および一部の記号(+=,)のみを使用できます。@-. スペースを含めることはできません。
値は、通常、ユーザー ID(bobsmith)または E メールアドレス([email protected])で
す。スペースを含むユーザーの表示名(Bob Smith)のような値を使用することはできません。
<Attribute Name="https://aws.amazon.com/SAML/Attributes/RoleSessionName">
<AttributeValue>name</AttributeValue>
</Attribute>
SAML 属性と AWS ポリシーキーの対応付け
このセクションの表は、よく使われる SAML 属性と AWS のポリシーキーとの対応関係を示します。
eduPerson および eduOrg 属性テーブルでは、値は文字列または(文字列の)リストとして型付けさ
れています。文字列値の場合、StringEquals または StringLike 条件を使用して、ポリシーでこ
れらの値をテストできます。リスト値の場合、ForAnyValue および ForAllValues ポリシーセット
演算子を使用して、ポリシーで値をテストできます。
Note
AWS キーごとに 1 つのクレームのみを含める必要があります。複数含めた場合は、1 つのク
レームのみが対応付けられます。
eduPerson 属性と eduOrg 属性
eduPerson 属性または eduOrg 属性
AWS キー
タイプ
urn:oid:1.3.6.1.4.1.5923.1.1.1.1
eduPersonAffiliation
文字列のリスト
urn:oid:1.3.6.1.4.1.5923.1.1.1.2
eduPersonNickname
文字列のリスト
urn:oid:1.3.6.1.4.1.5923.1.1.1.3
eduPersonOrgDN
文字列
urn:oid:1.3.6.1.4.1.5923.1.1.1.4
eduPersonOrgUnitDN
文字列のリスト
urn:oid:1.3.6.1.4.1.5923.1.1.1.5
eduPersonPrimaryAffiliation
文字列
urn:oid:1.3.6.1.4.1.5923.1.1.1.6
eduPersonPrincipalName 文字列
urn:oid:1.3.6.1.4.1.5923.1.1.1.7
eduPersonEntitlement
urn:oid:1.3.6.1.4.1.5923.1.1.1.8
eduPersonPrimaryOrgUnitDN
文字列
urn:oid:1.3.6.1.4.1.5923.1.1.1.9
eduPersonScopedAffiliation
文字列のリスト
urn:oid:1.3.6.1.4.1.5923.1.1.1.10
eduPersonTargetedID
文字列のリスト
urn:oid:1.3.6.1.4.1.5923.1.1.1.11
eduPersonAssurance
文字列のリスト
urn:oid:1.3.6.1.4.1.5923.1.2.1.2
eduOrgHomePageURI
文字列のリスト
urn:oid:1.3.6.1.4.1.5923.1.2.1.3
eduOrgIdentityAuthNPolicyURI
文字列のリスト
API Version 2011-06-15
61
文字列のリスト
AWS Security Token Service 一時
的なセキュリティ認証情報の使用
URL を作成してフェデレーティッドユーザー
に AWS コンソールへのアクセスを許可する
eduPerson 属性または eduOrg 属性
AWS キー
タイプ
urn:oid:1.3.6.1.4.1.5923.1.2.1.4
eduOrgLegalName
文字列のリスト
urn:oid:1.3.6.1.4.1.5923.1.2.1.5
eduOrgSuperiorURI
文字列のリスト
urn:oid:1.3.6.1.4.1.5923.1.2.1.6
eduOrgWhitePagesURI
文字列のリスト
urn:oid:2.5.4.3
cn
文字列のリスト
URL を作成してフェデレーティッドユーザーに
AWS コンソールへのアクセスを許可する
コンソールへの安全な直接アクセスを許可する URL を作成するコードを使用して、組織のネットワー
クにサインインしたユーザーに AWS マネジメントコンソール へのアクセスを許可することができま
す。この URL は、AWS から取得したサインイントークンを含み、それを使って AWS に対してユー
ザーを認証します。
Note
組織で SAML を使用している場合は、コードを書かなくても AWS マネジメントコンソー
ル へのアクセスをセットアップできます。詳細については、「SAML を使用してフェデレー
ティッドユーザーに AWS コンソールへのアクセスを許可する (p. 57)」を参照してくださ
い。
URL を作成するには、次のタスクを完了する必要があります。
• ユーザーが認証されていることを確認します。
• AWS Security Token Service の AssumeRole または GetFederationToken API を呼び出して、ユー
ザーの一時的なセキュリティ認証情報を取得します。
• 一時的なセキュリティ認証情報を使用して、AWS フェデレーションエンドポイントを呼び出しま
す。サインイントークンが返されます。
• トークンを使用して、コンソールの URL を作成します。
• URL をユーザーに配布します。
URL は、作成時から 15 分間、有効です。URL に関連付けられた一時的なセキュリティ認証情報は、
認証情報の作成時から、作成時に指定した期間だけ有効です。
Important
URL は、関連付けられた一時的なセキュリティ認証情報でアクセス権限を有効にした範囲
で、AWS マネジメントコンソール を介した AWS リソースへのアクセスを許可することを
忘れないでください。そのため、この URL は機密情報として扱う必要があります。たとえ
ば、SSL 接続による 302 HTTP レスポンスステータスコードを使用して、安全なリダイレク
トによって URL を返すことをお勧めします。302 HTTP レスポンスステータスコードの詳細
については、RFC 2616, section 10.3.3 を参照してください。
トピック
• AWS マネジメントコンソール 用の URL を作成する(クエリ API) (p. 63)
• URL の作成方法を示す例(Python) (p. 65)
• URL の作成方法を示す例(Java) (p. 66)
• URL の作成方法を示す例(Ruby) (p. 67)
API Version 2011-06-15
62
AWS Security Token Service 一時
的なセキュリティ認証情報の使用
AWS マネジメントコンソール 用
の URL を作成する(クエリ API)
シングルサインオンソリューションの実装方法を示すサンプルアプリケーションを確認するに
は、AWS サンプルコードとライブラリの「AWS マネジメントコンソール のフェデレーションプロキ
シのサンプルユースケース」を参照してください。
これらのタスクを完了するために、AWS Identity and Access Management(IAM)と AWS Security
Token Service(AWS STS)の HTTPS クエリ API を使用できます。または、Java、Ruby、C# など
のプログラミング言語を使用することもできます。これらの方法のそれぞれについて、以下のセク
ションで説明します。
AWS マネジメントコンソール 用の URL を作成す
る(クエリ API)
このトピックでは、フェデレーティッドユーザーに AWS マネジメントコンソール への直接アク
セスを許可する URL を作成する方法を説明します。このタスクでは、AWS Identity and Access
Management(IAM)および AWS Security Token Service(AWS STS)の HTTPS クエリ API を使用
します。クエリリクエストの詳細については『IAM ユーザーガイド』の「クエリリクエストを行う」
を参照してください。
Note
以下の手順は、テキスト文字列の例を含んでいます。読みやすくするために、長い例の一部
では改行が追加されています。これらの文字列をご自分で使用するときは、改行をすべて削
除してください。
フェデレーティッドユーザーに AWS マネジメントコンソール からリソースに対するアクセ
スを許可するには
1.
ID および認証システムでユーザーを認証します。
2.
ユーザーの一時的なセキュリティ認証情報を取得します。一時的な認証情報は、アクセスキー
ID、シークレットアクセスキー、およびセキュリティトークンで構成されています。一時的な認
証情報の作成方法の詳細については、「一時的なセキュリティ認証情報の作成 (p. 12)」を参照し
てください。
一時的な認証情報は、AWS Security Token Service の AssumeRole API または
GetFederationToken API を呼び出して取得できます。これらの API の違いの詳細については、
「AWS アカウントへのアクセスを安全に委任する API オプションの理解」を参照してくださ
い。
Important
一時的なセキュリティ認証情報を作成するときに、認証情報を保持するユーザーに与え
るアクセス権限を指定する必要があります。一時的なセキュリティ認証情報のアクセス
権限を制御する方法の詳細については、「一時的なセキュリティ認証情報のアクセス権
限を制御する (p. 40)」を参照してください。
3.
一時的なセキュリティ認証情報を取得した後、それを JSON 文字列として整形し、サインイン
トークンと交換できるようにします。以下の例は、認証情報のエンコード方法を示しています。
プレースホルダーテキストを、作成した認証情報の適切な値に置き換えます。
{"sessionId":"*** temporary access key ID ***",
"sessionKey":"*** temporary secret access key ***",
"sessionToken":"*** security token ***"}
4.
次に、以下の例に示すように、Action および Session パラメータを使用して、AWS フェデ
レーションエンドポイント(https://signin.aws.amazon.com/federation)にリクエストを行いま
す。
API Version 2011-06-15
63
AWS Security Token Service 一時
的なセキュリティ認証情報の使用
AWS マネジメントコンソール 用
の URL を作成する(クエリ API)
Action = getSigninToken
Session = *** the JSON string described in Step 3, form-urlencoded ***
以下の例は、リクエストがどのようになるかを示します。
https://signin.aws.amazon.com/federation?
Action=getSigninToken
&Session=%7B%22sessionId%22%3A%22ASIAEXAMPLEMDLUUAEYQ%22%2C%22sessionKey
%22
%3A%22tpSl9thxr2PkEXAMPLETAnVLVGdwC5zXtGDr%2FqWi%22%2C%22sessionToken
%22%3A
%22AQoDYXdzEXAMPLE4BrM96BJ7btBQRrAcCjQIbg55555555OBT7y8h2YJ7woJkRzsLpJBpklC
qPXxS2AjRorJAm%2BsBtv1YXlZF%2FfHljgORxOevE388GdGaKRfO9W4DxK4HU0fIpwL
%2BQ7oX
2Fj%2BJa%2FAb5u0cL%2BzI1P5rJuDzH%2F0pWEiYfiWXXH20rWruXVXpIIO%2FPhMHlV3Jw
%2B
gDc4ZJ0WItuLPsuyP7BVUXWLcAVyTFbxyLy36FBSXF1z8a
%2FvJN7utcj0mJRGIiIZSV7FQuepa
WP5YARYMrOUMqBB3v308LKBU8Z0xYe2%2FqthrLXf1nX0njbU%2FJTrct
%2BEdG9PRb3907qa5n
VbnnnxdVQJ3mPgQchAZpDI9LsDDbGsa67JHUyFYnyUUUkMRfe7G70gjvbz9gQ%EXAMPLE
レスポンスは、SigninToken 値を持つ JSON ドキュメントです。実際には次のようになりま
す。
{"SigninToken":"*** the SigninToken string ***"}
5.
最後に、フェデレーティッドユーザーが AWS マネジメントコンソール へのアクセスに
使用する URL を作成します。URL は、フェデレーション URL エンドポイント(https://
signin.aws.amazon.com/federation)に以下のパラメータを追加したものです。
Action = login
Issuer = *** the form-urlencoded URL for your internal sign-in page ***
Destination = *** the desired AWS ########### URL, also
form-urlencoded ***
SigninToken = *** the value of SigninToken from the JSON document returned
in Step 4 ***
以下の例は、最終的な URL がどのようになるかを示します。URL は、作成時から 15 分間、有効
です。URL に関連付けられた一時的なセキュリティ認証情報は、認証情報の作成時に指定した期
間、有効です。
https://signin.aws.amazon.com/federation?
Action=login
&Issuer=https%3A%2F%2Fexample.com
&Destination=https%3A%2F%2Fconsole.aws.amazon.com%2Fs
&SigninToken=VCQgs5qZZt3Q6fn8Tr5EXAMPLEmLnwB7JjUc-SHwnUUWabcRdnWsi4DBn-dvC
CZ85wrD0nmldUcZEXAMPLE-vXYH4Q__mleuF_W2BE5HYexbe9y4Ofkje53SsjNNecATfjIzpW1
WibbnH6YcYRiBoffZBGExbEXAMPLE5aiKX4THWjQKC6gg6alHu6JFrnOJoK3dtP6I9a6hi6yPgm
iOkPZMmNGmhsvVxetKzr8mx3pxhHbMEXAMPLETv1pij0rok3IyCR2YVcIjqwfWv32HU2Xlj471u
3fU6uOfUComeKiqTGX974xzJOZbdmX_t_lLrhEXAMPLEDDIisSnyHGw2xaZZqudm4mo2uTDk9Pv
9l5K0ZCqIgEXAMPLEcA6tgLPykEWGUyH6BdSC6166n4M4JkXIQgac7_7821YqixsNxZ6rsrpzwf
nQoS14O7R0eJCCJ684EXAMPLEZRdBNnuLbUYpz2Iw3vIN0tQgOujwnwydPscM9F7foaEK3jwMkg
API Version 2011-06-15
64
AWS Security Token Service 一時
的なセキュリティ認証情報の使用
URL の作成方法を示す例(Python)
Apeb1-6L_OB12MZhuFxx55555EXAMPLEhyETEd4ZulKPdXHkgl6T9ZkIlHz2Uy1RUTUhhUxNtSQ
nWc5xkbBoEcXqpoSIeK7yhje9Vzhd61AEXAMPLElbWeouACEMG6Vd3dAgFYd6i5FYoyFrZLWvm
0LSG7RyYKeYN5VIzUk3YWQpyjP0RiT5KUrsUi-NEXAMPLExMOMdoODBEgKQskiu2ozh6r8bxwC
RNhujg
URL の作成方法を示す例(Python)
以下の例は、Python を使用して、プログラムでフェデレーティッドユーザーに AWS マネジメントコ
ンソール への直接アクセスを許可する URL を作成する方法を示します。この例では、AWS SDK for
Python (Boto) を使用します。
コードでは、AssumeRole API を使用して、一時的なセキュリティ認証情報を取得しています。
import urllib, json
import requests # 'pip install requests'
from boto.sts import STSConnection # AWS SDK for Python (Boto) 'pip install
boto'
# Step 1: Authenticate user in your own identity system.
# Step 2: Using the access keys for an IAM user in your AWS account,
# call "AssumeRole" to get temporary access keys for the federated user
# Note: Calls to AWS STS AssumeRole must be signed using the access key ID
# and secret access key of an IAM user or using existing temporary
credentials.
# The credentials can be in EC2 instance metadata, in environment variables,
# or in a configuration file, and will be discovered automatically by the
# STSConnection() function. For more information, see the Python SDK docs:
# http://boto.readthedocs.org/en/latest/boto_config_tut.html
sts_connection = STSConnection()
assumed_role_object = sts_connection.assume_role(
role_arn="arn:aws:iam::ACCOUNT-ID-WITHOUT-HYPHENS:role/ROLE-NAME",
role_session_name="AssumeRoleSession"
)
# Step 3: Format resulting temporary credentials into JSON
json_string_with_temp_credentials = '{'
json_string_with_temp_credentials += '"sessionId":"' +
assumed_role_object.credentials.access_key + '",'
json_string_with_temp_credentials += '"sessionKey":"' +
assumed_role_object.credentials.secret_key + '",'
json_string_with_temp_credentials += '"sessionToken":"' +
assumed_role_object.credentials.session_token + '"'
json_string_with_temp_credentials += '}'
# Step 4. Make request to AWS federation endpoint to get sign-in token. Pass
# the action and JSON document with temporary credentials as parameters.
request_parameters = "?Action=getSigninToken"
request_parameters += "&Session=" +
urllib.quote_plus(json_string_with_temp_credentials)
request_url = "https://signin.aws.amazon.com/federation" + request_parameters
r = requests.get(request_url)
# Returns a JSON document with a single element named SigninToken.
API Version 2011-06-15
65
AWS Security Token Service 一時
的なセキュリティ認証情報の使用
URL の作成方法を示す例(Java)
signin_token = json.loads(r.text)
# Step 5: Create URL that will let users sign in to the console using the
# sign-in token. This URL must be used within 15 minutes of when the
# sign-in token was issued.
request_parameters = "?Action=login"
request_parameters += "&Issuer=Example.org"
request_parameters += "&Destination=" + urllib.quote_plus("https://
console.aws.amazon.com/")
request_parameters += "&SigninToken=" + signin_token["SigninToken"]
request_url = "https://signin.aws.amazon.com/federation" + request_parameters
# Send final URL to stdout
print request_url
URL の作成方法を示す例(Java)
以下の例は、Java を使用して、プログラムでフェデレーティッドユーザーに AWS マネジメントコ
ンソール への直接アクセスを許可する URL を作成する方法を示します。以下のコード例では、AWS
SDK for Java を使用しています。
import java.net.URLEncoder;
import java.net.URL;
import java.net.URLConnection;
import java.io.BufferedReader;
import java.io.InputStreamReader;
// Available at http://www.json.org/java/index.html
import org.json.JSONObject;
import com.amazonaws.auth.AWSCredentials;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.services.securitytoken.AWSSecurityTokenServiceClient;
import com.amazonaws.services.securitytoken.model.Credentials;
import com.amazonaws.services.securitytoken.model.GetFederationTokenRequest;
import com.amazonaws.services.securitytoken.model.GetFederationTokenResult;
/* Calls to AWS STS APIs must be signed using the access key ID
and secret access key of an IAM user or using existing temporary
credentials. The credentials should not be embedded in code. For
this example, the code looks for the credentials in a
standard configuration file.
*/
AWSCredentials credentials =
new PropertiesCredentials(
AwsConsoleApp.class.getResourceAsStream("AwsCredentials.properties"));
AWSSecurityTokenServiceClient stsClient =
new AWSSecurityTokenServiceClient(credentials);
GetFederationTokenRequest getFederationTokenRequest =
new GetFederationTokenRequest();
getFederationTokenRequest.setDurationSeconds(3600);
getFederationTokenRequest.setName("UserName");
// A sample policy for accessing Amazon SNS in the console.
String policy = "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Action\":
\"sns:*\"," +
API Version 2011-06-15
66
AWS Security Token Service 一時
的なセキュリティ認証情報の使用
URL の作成方法を示す例(Ruby)
"\"Effect\":\"Allow\",\"Resource\":\"*\"}]}";
getFederationTokenRequest.setPolicy(policy);
GetFederationTokenResult federationTokenResult =
stsClient.getFederationToken(getFederationTokenRequest);
Credentials federatedCredentials = federationTokenResult.getCredentials();
// The issuer parameter specifies your internal sign-in
// page, for example https://mysignin.internal.mycompany.com/.
// The console parameter specifies the URL to the destination console of the
// AWS Management Console. This example goes to Amazon SNS.
// The signin parameter is the URL to send the request to.
String issuerURL = "https://mysignin.internal.mycompany.com/";
String consoleURL = "https://console.aws.amazon.com/sns";
String signInURL = "https://signin.aws.amazon.com/federation";
// Create the sign-in token using temporary credentials,
// including the Access Key ID, Secret Access Key, and security token.
String sessionJson = String.format(
"{\"%1$s\":\"%2$s\",\"%3$s\":\"%4$s\",\"%5$s\":\"%6$s\"}",
"sessionId", federatedCredentials.getAccessKeyId(),
"sessionKey", federatedCredentials.getSecretAccessKey(),
"sessionToken", federatedCredentials.getSessionToken());
String getSigninTokenURL = signInURL + "?Action=getSigninToken" +
"&SessionType=json&Session=" + URLEncoder.encode(sessionJson,
"UTF-8");
URL url = new URL(getSigninTokenURL);
URLConnection conn = url.openConnection ();
BufferedReader bufferReader = new BufferedReader(new
InputStreamReader(conn.getInputStream()));
String returnContent = bufferReader.readLine();
String signinToken = new JSONObject(returnContent).getString("SigninToken");
String signinTokenParameter = "&SigninToken=" +
URLEncoder.encode(signinToken,"UTF-8");
// The issuer parameter is optional, but recommended. Use it to direct users
// to your sign-in page when their session expires.
String issuerParameter = "&Issuer=" + URLEncoder.encode(issuerURL, "UTF-8");
String destinationParameter = "&Destination=" +
URLEncoder.encode(consoleURL,"UTF-8");
String loginURL = signInURL + "?Action=login" + signinTokenParameter +
issuerParameter + destinationParameter;
URL の作成方法を示す例(Ruby)
以下の例は、Ruby を使用して、プログラムでフェデレーティッドユーザーに AWS マネジメントコン
ソール への直接アクセスを許可する URL を作成する方法を示します。このコード例では、AWS SDK
for Ruby を使用しています。
require
require
require
require
require
'rubygems'
'json'
'open-uri'
'cgi'
'aws-sdk'
API Version 2011-06-15
67
AWS Security Token Service 一時
的なセキュリティ認証情報の使用
URL の作成方法を示す例(Ruby)
# Create a new AWS::STS instance.
#
# Note: Calls to AWS STS APIs must be signed using an access key ID
# and secret access key. The credentials can be in EC2 instance metadata
# or in environment variables and will be automatically discovered by
# the default credentials provider in the AWS Ruby SDK.
sts = AWS::STS.new
# The following policy grants permissions to work
# in the AWS SNS console.
policy = AWS::STS::Policy.new
policy.allow(:actions => "sns:*",:resources => :any)
# The following call creates a temporary session that returns
# temporary security credentials and a session token.
session = sts.new_federated_session(
"UserName",
:policy => policy,
:duration => 3600)
# The issuer value is the URL where users are directed (such as
# to your internal sign-in page) when their session expires.
#
# The console value specifies the URL to the destination console.
# This example goes to the Amazon SNS console.
#
# The signin value is the URL of the STS federation endpoint.
issuer_url = "https://mysignin.internal.mycompany.com/"
console_url = "https://console.aws.amazon.com/sns"
signin_url = "https://signin.aws.amazon.com/federation"
# Create a block of JSON that contains the temporary credentials
# (including the access key ID, secret access key, and session token).
session_json = {
:sessionId => session.credentials[:access_key_id],
:sessionKey => session.credentials[:secret_access_key],
:sessionToken => session.credentials[:session_token]
}.to_json
# Call the federation endpoint, passing the parameters
# created earlier and the session information as a JSON block.
# The request returns a signin token that's valid for 15 minutes.
get_signin_token_url = signin_url + "?Action=getSigninToken" +
"&SessionType=json&Session=" + CGI.escape(session_json)
returned_content = URI.parse(get_signin_token_url).read
# Extract the signin token from the information returned
# by the federation endpoint.
signin_token = JSON.parse(returned_content)['SigninToken']
signin_token_param = "&SigninToken=" + CGI.escape(signin_token)
# Create the URL to give to the user, which includes the
# signin token and the URL of the console to open.
# The 'issuer' parameter is optional but recommended.
issuer_param = "&Issuer=" + CGI.escape(issuer_url)
destination_param = "&Destination=" + CGI.escape(console_url)
login_url = signin_url + "?Action=login" + signin_token_param +
API Version 2011-06-15
68
AWS Security Token Service 一時
的なセキュリティ認証情報の使用
URL の作成方法を示す例(Ruby)
issuer_param + destination_param
API Version 2011-06-15
69
AWS Security Token Service 一時
的なセキュリティ認証情報の使用
新しいリージョンでの AWS STS の
アクティブ化
デフォルトでは、AWS Security Token Service (AWS STS) はグローバルサービスとして利用でき、す
べての AWS STS リクエストは https://sts.amazonaws.com にある単一のエンドポイントに送信
されます。特定のエンドポイントを使用する場合、米国東部(バージニア北部) リージョンのエンド
ポイント https://sts.us-east-1.amazonaws.com も、デフォルトでアクティブ化され、利用で
きます。その他のリージョンで AWS STS 機能をアクティブ化することもできます。これを選択する
のは、次のような理由からです。
• レイテンシーの低減。お客様のサービスやアプリケーションに地理的に近いエンドポイントに対し
て AWS STS の呼び出しを実行することにより、低いレイテンシーで AWS STS サービスにアクセ
スできます。
• 冗長性の構築。 AWS STS API 呼び出しを他のリージョンに切り替えるアプリケーションにコード
を追加することで、何かの理由で最初のリージョンが応答を停止した場合でも、アプリケーション
は耐障害性が向上し、動作し続けることができます。
別のリージョンの AWS STS エンドポイントを使用する前に、AWS アカウントのそのリージョンで
AWS STS をアクティブ化する必要があります。
リージョンで AWS STS をアクティブ化するには
1.
新しいリージョンで AWS STS をアクティブ化する対象のアカウントに対して、IAM 管理タスク
("iam:*")を実行するアクセス権限を持つ IAM ユーザーとしてサインインします。
2.
IAM コンソールを開き、ナビゲーションペインで [Account Settings] をクリックします。
3.
[STS Regions] リストを展開し、使用するリージョンを見つけて、[Activate] をクリックします。
AWS STS リージョンを使用するコードの記述
リージョンをアクティブ化すると、そのリージョンに AWS STS API 呼び出しを割り振ることができ
ます。次の Java コードスニペットは、setEndpoint を使用して 欧州 (アイルランド) (eu-west-1)
リージョンにリクエストを送信するように AWSSecurityTokenServiceClient オブジェクトを設定
する方法を示しています。
AWSSecurityTokenServiceClient stsClient = new
AWSSecurityTokenServiceClient();
API Version 2011-06-15
70
AWS Security Token Service 一時
的なセキュリティ認証情報の使用
stsClient.setEndpoint("sts.eu-west-1.amazonaws.com");
Important
setRegion メソッドを使用して、AWS STS のリージョンエンドポイントを設定しないでく
ださい。このメソッドは、下位互換性のために、引き続き単一のグローバルエンドポイント
である sts に解決されます。amazonaws.com の CNAME エイリアスとして設定する必要があ
ります。
この例では、最初の行で、stsClient という名前で使用する AWSSecurityTokenServiceClient
オブジェクトをインスタンス化します。2 行目で、唯一のパラメータとしてエンドポイントの URL を
渡して setEndpoint メソッドを呼び出すことによって、stsClient オブジェクトを設定します。こ
の stsClient オブジェクトを使用するすべての API 呼び出しは、指定されたエンドポイントに割り
振られます。
他のすべての言語とプログラミング環境の組み合わせについては、関連する SDK のドキュメントを参
照してください。
新しいリージョンでの AWS STS の使用に関して、他の変更はありません。新しいアクティブリー
ジョンの AWS STS エンドポイントから取得した認証情報は、そのリージョンに制限されず、グロー
バルに使用できます。
次の表にリージョンとそのエンドポイントのリストを示し、デフォルトでアクティブなリージョン
や、お客様がアクティブ化または非アクティブ化できるリージョンを示します。
リージョン名
エンドポイント
デフォルトで
アクティブ化
アクティブ化/
非アクティ
ブ化できる
--グローバル--
sts.amazonaws.com
はい
いいえ
米国東部(バージニア北
部)
sts.us-east-1.amazonaws.com
はい
いいえ
米国西部 (オレゴン)
sts.us-west-2.amazonaws.com
いいえ
はい
米国西部 (北カリフォルニ
ア)
sts.us-west-1.amazonaws.com
いいえ
はい
欧州 (アイルランド)
sts.eu-west-1.amazonaws.com
いいえ
はい
欧州 (フランクフルト)
sts.eucentral-1.amazonaws.com
いいえ
はい
アジアパシフィック (シン
ガポール)
sts.apsoutheast-1.amazonaws.com
いいえ
はい
アジアパシフィック (シド
ニー)
sts.apsoutheast-2.amazonaws.com
いいえ
はい
アジアパシフィック (東
京)
sts.apnortheast-1.amazonaws.com
いいえ
はい
南米 (サンパウロ)
sts.sa-east-1.amazonaws.com
いいえ
はい
Note
リージョンのエンドポイント(sts.us-east-1.amazonaws.com など)に対する呼び出し
は、リージョンのサービスへの呼び出しと同様に CloudTrail のログに記録されます。グロー
API Version 2011-06-15
71
AWS Security Token Service 一時
的なセキュリティ認証情報の使用
バルエンドポイント sts.amazonaws.com への呼び出しは、グローバルサービスへの呼び出
しとして記録されます。詳細については、『IAM ユーザーガイド』の「Cloudtrail 内の重複す
るログエントリの回避」を参照してください。
API Version 2011-06-15
72
AWS Security Token Service 一時
的なセキュリティ認証情報の使用
ウェブ ID フェデレーションのサンプル
AWS Security Token Service のサン
プルアプリケーション
AWS STS を使用して一時的なセキュリティ認証情報を管理する方法を確認するために、完全なシナ
リオ例を実装する以下のサンプルアプリケーションをダウンロードできます。
• 「Active Directory ユースケースのための ID フェデレーションのサンプルアプリケーショ
ン」。Amazon S3 ファイルとバケットにアクセスするために、Active Directory ユーザーに結び
付けられたアクセス権限を使用して一時的なセキュリティ認証情報を発行する方法を示します。
(.NET/C#)
• 「 AWS 管理コンソールのフェデレーションプロキシのサンプルユースケース」。シングルサイ
ンオン(SSO)を有効にするフェデレーションプロキシを作成して、既存の Active Directory ユー
ザーが AWS マネジメントコンソール にサインインできるようにする方法を示します。(.NET/
C#)
• 「Shibboleth を AWS Identity and Access Management と統合する」。Shibboleth と SAML を使用
して、AWS マネジメントコンソール へのシングルサインオン(SSO)アクセスを可能にする方法
を示します。
ウェブ ID フェデレーションのサンプル
以下のサンプルアプリケーションは、ウェブ ID フェデレーションを使用するさまざまな方法を示して
います。これらの方法によって、Login with Amazon、Amazon Cognito、Facebook、Google のよう
なよく知られている ID プロバイダーによる認証を、アプリが AWS サービスにアクセスするために使
用できる一時的な AWS セキュリティ認証情報に交換できます。
Note
モバイル開発では、以下のサンプルで示したアプローチの代わりに、Amazon Cognito と
AWS SDK を使用することをお勧めします。Amazon Cognito は、モバイルアプリの ID を
管理するための最も簡単な方法であり、同期やクロスデバイス ID のような追加機能も利用
できます。Amazon Cognito の詳細については、『AWS Mobile SDK for Android Developer
Guide』の「Amazon Cognito の概要」および『AWS Mobile SDK for iOS Developer Guide』
の「Amazon Cognito の概要」を参照してください。
• Web ID フェデレーションのプレイグラウンド. このウェブサイトでは、ウェブ ID フェデレーショ
ン (p. 14)と AssumeRoleWithWebIdentity API を対話的に試すことができます。
API Version 2011-06-15
73
AWS Security Token Service 一時
的なセキュリティ認証情報の使用
ウェブ ID フェデレーションのサンプル
• 「Elastic Beanstalk と Login with Amazon を使ってフェデレーティッドウェブ ID アプリケーション
を構築し展開する」。このブログ記事は、ウェブ ID フェデレーションと Login with Amazon を使用
して AssumeRoleWithWebIdentity で一時的なセキュリティ認証情報を取得し、その認証情報を
Elastic Beanstalk 上で動作する Python ウェブアプリケーションで使用して AWS を呼び出す方法を
説明しています。
• 「Token Vending Machine を使用して AWS モバイルアプリケーションのユーザー認証を行う」
(AWS の記事とチュートリアル)。このサンプルでは、リモートクライアント(モバイルアプリ
など)に一時的な認証情報を配布して、クライアントが AWS へのウェブリクエストに署名できる
ようにするサーバーベースのプロキシアプリケーションを示します。このサンプルは、AWS SDK
for Android および AWS SDK for iOS に含まれるサンプルクライアントと一緒に使用できます。詳
細については、「モバイルアプリケーションの認証情報管理」を参照してください。モバイルアプ
リケーションでトークン自動販売機(TVM)を使用するときに AWS リソースを保護する方法が詳
細に示されています。
API Version 2011-06-15
74
AWS Security Token Service 一時
的なセキュリティ認証情報の使用
AWS STS をサポートする AWS サービスの一覧
AWS Security Token Service(AWS
STS)をサポートする AWS サービ
ス
このトピックでは、AWS STS API アクションによって生成された一時的なセキュリティ認証情報を
使用して行われるリクエストをサポートする AWS 製品について説明します。
AWS SDK で一時的なセキュリティ認証情報を使用する方法、または、API 呼び出しを行う時期につ
いては、「一時的なセキュリティ認証情報を使用して AWS リソースをリクエストする (p. 52)」を参
照してください。
AWS STS をサポートする AWS サービスの一覧
ここに示すサービスでは、AWS STS API アクションによって生成された一時的なセキュリティ認証
情報を使用して行われるリクエストをサポートします。ここに示されていないサービスでは、一時的
なセキュリティ認証情報を使用して行われるリクエストはサポートされません。
• Amazon API Gateway
• Amazon AppStream
• Auto Scaling
• AWS Billing and Cost Management
• AWS CloudFormation
•
•
•
•
Amazon CloudFront
Amazon CloudSearch
AWS CloudTrail
Amazon CloudWatch
•
•
•
•
•
AWS CodeCommit
AWS CodeDeploy
AWS CodePipeline
Amazon Cognito
AWS Config
• AWS Data Pipeline
API Version 2011-06-15
75
AWS Security Token Service 一時
的なセキュリティ認証情報の使用
AWS STS をサポートする AWS サービスの一覧
• AWS Device Farm
•
•
•
•
•
AWS Direct Connect
AWS Directory Service
Amazon DynamoDB
Amazon EC2 Container Service (Amazon ECS)
AWS Elastic Beanstalk
• Amazon Elastic Block Store(Amazon EBS)
• Amazon Elastic Compute Cloud(Amazon EC2)
• Elastic Load Balancing
• Amazon EMR(Amazon EMR)
• Amazon Elastic Transcoder
• Amazon ElastiCache
• Amazon Glacier
• AWS Identity and Access Management (IAM)
注意: 一時的セキュリティ認証情報を取得する方法 (p. 3) を参照してください
• AWS Import/Export
• AWS Key Management Service(AWS KMS)
• Amazon Kinesis
• AWS Lambda
• Amazon Machine Learning
• AWS Marketplace
• Mobile Analytics
• AWS OpsWorks
• Amazon Redshift
• Amazon Relational Database Service (Amazon RDS)
• Amazon Route 53
• AWS Security Token Service (AWS STS)
注意: 一時的セキュリティ認証情報を取得する方法 (p. 3) を参照してください
• AWS Service Catalog
• Amazon Simple Email Service(Amazon SES)
注: 一時的なセキュリティ認証情報をサポートしているのは、Amazon SES API だけです。Amazon
SES SMTP インターフェイスは、一時的なセキュリティ認証情報から派生した SMTP 認証情報を
サポートしていません。
• Amazon Simple Notification Service(Amazon SNS)
• Amazon Simple Queue Service(Amazon SQS)
• Amazon Simple Storage Service(Amazon S3)
•
•
•
•
•
Amazon Simple Workflow Service (Amazon SWF)
Amazon SimpleDB
AWS Storage Gateway
AWS サポート
AWS Trusted Advisor
• Amazon Virtual Private Cloud (Amazon VPC)
• Amazon WorkDocs
• Amazon WorkSpaces
API Version 2011-06-15
76
AWS Security Token Service 一時
的なセキュリティ認証情報の使用
ドキュメント履歴
次の表は、AWS Security Token Service の今回のリリースの内容をまとめたものです。
• API バージョン: 2011-06-15
• Latest documentation update: October 23, 2014
変更点
説明
リリース日
AWS STS の
リージョン化
追加リージョンでの AWS STS の有効化および新しく有効にした
リージョンのエンドポイントの呼び出しに関する情報を追加しま
した。
2015 年 1 月
22 日
OpenID
OIDC 互換の ID プロバイダーの使用に関する情報を含むように
Connect(OIDC)ID
ウェブ ID フェデレーションに関するドキュメントが更新されまし
プロバイダー た。詳細については、「AWS STS ウェブ ID フェデレーションに
のウェブ ID
ついて (p. 14)」を参照してください。
フェデレー
ションドキュ
メントの更新
2014 年 10 月
23 日
Amazon
Cognito の
ウェブ ID
フェデレー
ションドキュ
メントの更新
Amazon Cognito に関する情報を含むようにウェブ ID フェデレー 2014 年 7 月
ションに関するドキュメントが更新されました。Amazon Cognito 10 日
の詳細については、「AWS Mobile SDK for Android Developer
Guide」および「AWS Mobile SDK for iOS Developer Guide」を参
照してください。
SAML 2.0 を
使った認証
フェデレー
ション
Security Assertion Markup Language(SAML)2.0 を使った ID
フェデレーションのサポートを追加しました。この機能により、
組織は SAML 対応の ID プロバイダーとして機能し、AWS はサー
ビスプロバイダーとして機能します。組織は、AWS リソースに
アクセスし、AWS マネジメントコンソール のシングルサインイ
ン(SSO)をサポートするために、SAML アサーションを使用し
て、一時的なセキュリティ認証情報を取得することができます。
詳細については、「AWS STS SAML 2.0 ベースのフェデレーショ
ンについて (p. 22)」を参照してください。
API Version 2011-06-15
77
2013 年 11 月
7 日2013 年 6
月 11 日
AWS Security Token Service 一時
的なセキュリティ認証情報の使用
変更点
説明
リリース日
Web ID フェ
デレーション
ウェブ ID フェデレーションのサポートを追加しました。この機
能を使用すると、Login with Amazon、Facebook、または Google
を使用してサインインしたユーザーについて、一時的なセキュ
リティ認証情報を取得することができます。詳細については、
「AWS STS ウェブ ID フェデレーションについて (p. 14)」を参照
してください。
2013 年 5 月
29 日
MFA 保護 API
アクセス
MFA で保護された API アクセス機能を導入しました。お客様
は、AWS 多要素認証(MFA)を使って AWS API 上のセキュリ
ティレベルを高めることができます。詳細については、「多要素
認証(MFA)による IAM ユーザーの一時的なセキュリティ認証情
報 (p. 38)」を参照してください。
2012 年 7 月
10 日
ドキュメント
の API バー
ジョンの修正
『一時的なセキュリティ認証情報の使用』に表示される API バー
ジョンを修正しました。AWS Security Token Service の API バー
ジョンは、AWS Identity and Access Management IAM の API
バージョンと同じではありません。
2012 年 4 月
26 日
新規ガイド
このリリースで『一時的なセキュリティ認証情報の使用』が導入
されました。
2012 年 1 月
19 日
API Version 2011-06-15
78
AWS Security Token Service 一時
的なセキュリティ認証情報の使用
AWS の用語集
最新の AWS の用語については、『AWS General Reference』の「AWS の用語集」を参照してくださ
い。
API Version 2011-06-15
79