ユーザー認証のためのウェブフェデレーテッド ID の使用 - AWS SDK for JavaScript

AWS SDK for JavaScript v2 のサポート終了が間近に迫っていることが発表されています。AWS SDK for JavaScript v3 に移行することをお勧めします。日付、その他の詳細、移行方法については、リンク先の発表内容を参照してください。

ユーザー認証のためのウェブフェデレーテッド ID の使用

ウェブ ID フェデレーションを使用して AWS リソースにアクセスするように個々のアイデンティティプロバイダーを直接設定できます。AWS は現在、複数のアイデンティティプロバイダーによるウェブ ID フェデレーションを使用したユーザー認証をサポートしています。

まず、アプリケーションがサポートするプロバイダーにアプリケーションを登録する必要があります。次に、IAM ロールを作成し、その許可を設定します。作成した IAM ロールは、それぞれのアイデンティティプロバイダーを介して自分に設定された許可を付与するのに使用されます。例えば、Facebook を介してログインしたユーザーに、自分が管理している特定の Amazon S3 バケットへの読み取りアクセスを許可するロールを設定できます。

IAM ロールに特権を設定し、選択したアイデンティティプロバイダーにアプリケーションを登録したら、次に示すように、ヘルパーコードを使用して IAM ロールの認証情報を取得するように SDK を設定できます。

AWS.config.credentials = new AWS.WebIdentityCredentials({ RoleArn: 'arn:aws:iam::<AWS_ACCOUNT_ID>/:role/<WEB_IDENTITY_ROLE_NAME>', ProviderId: 'graph.facebook.com|www.amazon.com', // this is null for Google WebIdentityToken: ACCESS_TOKEN });

ProviderId パラメータの値は、指定された ID プロバイダーによって異なります。WebIdentityToken パラメータの値は、ID プロバイダーへの正常なログインから取得されたアクセストークンです。各 ID プロバイダーのアクセストークンの設定方法および取得方法の詳細については、ID プロバイダーのドキュメントを参照してください。

ステップ 1: ID プロバイダーへの登録

開始するには、サポートを選択した ID プロバイダーにアプリケーションを登録します。アプリケーションと、場合によってはその作者を識別する情報を提供するように求められます。これにより、ID プロバイダーは、誰が自分のユーザー情報を受信しているのかを把握することができます。いずれの場合も、ID プロバイダーは、ユーザーロールを設定するために使用するアプリケーション ID を発行します。

ステップ 2: Iアイデンティティプロバイダー用の IAM ロールを作成する

アイデンティティプロバイダーからアプリケーション ID を取得したら、IAM コンソール (https://console.aws.amazon.com/iam/) に移動し、新しい IAM ロールを作成します。

アイデンティティプロバイダー用の IAM ロールを作成するには
  1. コンソールの [ロール] セクションに移動し、[新しいロールの作成] を選択します。

  2. facebookIdentity など、新しいロールの使用状況を追跡するのに役立つ名前を入力し、[次のステップ] を選択します。

  3. [ロールタイプの選択] で、[ID プロバイダーアクセス用のロール] を選択します。

  4. [ウェブ ID プロバイダーにアクセスを付与] で、[選択] を選択します。

  5. [アイデンティティプロバイダー] リストから、この IAM ロールに使用するアイデンティティプロバイダーを選択します。

    ID プロバイダーアクセス用のロールの選択
  6. ID プロバイダーによって提供されたアプリケーション ID を [アプリケーション ID] に入力してから、[次のステップ] を選択します。

  7. 公開するリソースに対するアクセス許可を設定し、特定のリソースに対して特定のオペレーションへのアクセスを許可します。IAM の許可に関する詳細については、IAM ユーザーガイドAWS IAM ユーザーの許可の概要を参照してください。ロールの信頼関係を確認し、必要に応じてカスタマイズしてから、[次のステップ] を選択します。

  8. 必要な追加のポリシーをアタッチしてから、[次のステップ] を選択します。IAM ポリシーの詳細については、IAM ユーザーガイドIAM ポリシーの概要を参照してください。

  9. 新しいロール情報を確認してから、[ロールの作成] を選択します。

特定のユーザー ID へのスコーピングなど、他の制約をロールに加えることができます。ロールがリソースへの書き込みアクセス許可を付与する場合は、正しい権限を持つユーザーにロールを正しく適用するようにしてください。そうしないと、Amazon、Facebook、または Google の ID を持つユーザーはだれでもアプリケーションのリソースに変更を加えることができます。

ウェブ ID フェデレーションの詳細については、IAM ユーザーガイドウェブ ID フェデレーションについてを参照してください。

ステップ 3: ログイン後にプロバイダーアクセストークンを取得する

ID プロバイダーの SDK を使用して、アプリケーションのログインアクションを設定します。OAuth または OpenID を使用してユーザーログインを可能にする JavaScript SDK を、ID プロバイダーからダウンロードしてインストールできます。SDK コードをダウンロードしてアプリケーションに設定する方法については、ID プロバイダーの SDK ドキュメントを参照してください。

ステップ 4: 一時的な認証情報を取得する

アプリケーション、ロール、およびリソースに対するアクセス許可を設定したら、一時的な認証情報を取得するためのコードをアプリケーションに追加します。これらの認証情報は、ウェブ ID フェデレーションを使用して AWS Security Token Service 経由で提供されます。ユーザーは ID プロバイダーにログインし、ID プロバイダーはアクセストークンを返します。このアイデンティティプロバイダー用に作成した IAM ロールの ARN を使用して AWS.WebIdentityCredentials オブジェクトを設定します。

AWS.config.credentials = new AWS.WebIdentityCredentials({ RoleArn: 'arn:aws:iam::<AWS_ACCOUNT_ID>:role/<WEB_IDENTITY_ROLE_NAME>', ProviderId: 'graph.facebook.com|www.amazon.com', // Omit this for Google WebIdentityToken: ACCESS_TOKEN // Access token from identity provider });

その後、作成されるサービスオブジェクトは適切な認証情報を持ちます。AWS.config.credentials プロパティを設定する前に作成されたオブジェクトには、現在の認証情報はありません。

アクセストークンを取得する前に AWS.WebIdentityCredentials を作成することもできます。これにより、認証情報に依存するサービスオブジェクトを、アクセストークンをロードする前に作成できます。これを行うには、WebIdentityToken パラメータを指定せずに認証情報オブジェクトを作成します。

AWS.config.credentials = new AWS.WebIdentityCredentials({ RoleArn: 'arn:aws:iam::<AWS_ACCOUNT_ID>:role/<WEB_IDENTITY_ROLE_NAME>', ProviderId: 'graph.facebook.com|www.amazon.com' // Omit this for Google }); // Create a service object var s3 = new AWS.S3;

次に、アクセストークンを含む ID プロバイダー SDK からのコールバックで WebIdentityToken を設定します。

AWS.config.credentials.params.WebIdentityToken = accessToken;