

AWS SDK for JavaScript v2 はサポート終了となりました。[AWS SDK for JavaScript v3](https://docs.aws.amazon.com//sdk-for-javascript/v3/developer-guide/) に移行することをお勧めします。その他の詳細、移行方法については、こちらの[発表内容](https://aws.amazon.com/blogs//developer/announcing-end-of-support-for-aws-sdk-for-javascript-v2/)を参照してください。

# ユーザー認証のためのウェブフェデレーテッド ID の使用
<a name="loading-browser-credentials-federated-id"></a>

ウェブ ID フェデレーションを使用して AWS リソースにアクセスするように個々のアイデンティティプロバイダーを直接設定できます。AWS は現在、複数のアイデンティティプロバイダーによるウェブ ID フェデレーションを使用したユーザー認証をサポートしています。
+ [Login with Amazon](https://login.amazon.com)
+ [Facebook Login](https://www.facebook.com/about/login)
+ [Google Sign-in](https://developers.google.com/identity/)

まず、アプリケーションがサポートするプロバイダーにアプリケーションを登録する必要があります。次に、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 プロバイダーへの登録
<a name="config-web-identity-register"></a>

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

## ステップ 2: Iアイデンティティプロバイダー用の IAM ロールを作成する
<a name="config-web-identity-role"></a>

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

**アイデンティティプロバイダー用の IAM ロールを作成するには**

1. コンソールの [**ロール**] セクションに移動し、[**新しいロールの作成**] を選択します。

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

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

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

1. [**アイデンティティプロバイダー**] リストから、この IAM ロールに使用するアイデンティティプロバイダーを選択します。  
![\[ID プロバイダーアクセス用のロールの選択\]](http://docs.aws.amazon.com/ja_jp/sdk-for-javascript/v2/developer-guide/images/iam-provider-select.png)

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

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

1. 必要な追加のポリシーをアタッチしてから、[**次のステップ**] を選択します。IAM ポリシーの詳細については、*IAM ユーザーガイド*の [IAM ポリシーの概要](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html)を参照してください。

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

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

ウェブ ID フェデレーションの詳細については、*IAM ユーザーガイド*の[ウェブ ID フェデレーションについて](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_oidc.html)を参照してください。

## ステップ 3: ログイン後にプロバイダーアクセストークンを取得する
<a name="config-web-identity-obtain-token"></a>

ID プロバイダーの SDK を使用して、アプリケーションのログインアクションを設定します。OAuth または OpenID を使用してユーザーログインを可能にする JavaScript SDK を、ID プロバイダーからダウンロードしてインストールできます。SDK コードをダウンロードしてアプリケーションに設定する方法については、ID プロバイダーの SDK ドキュメントを参照してください。
+ [Login with Amazon](https://login.amazon.com/website)
+ [Facebook Login](https://developers.facebook.com/docs/javascript)
+ [Google Sign-in](https://developers.google.com/identity/)

## ステップ 4: 一時的な認証情報を取得する
<a name="config-web-identity-get-credentials"></a>

アプリケーション、ロール、およびリソースに対するアクセス許可を設定したら、一時的な認証情報を取得するためのコードをアプリケーションに追加します。これらの認証情報は、ウェブ 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;
```