AWS Identity and Access Management
ユーザーガイド

ウェブ ID または OpenID Connect フェデレーション用のロールを作成する (コンソール)

AWS アカウントで IAM ユーザーを作成する代わりに、ウェブ ID または OpenID Connect フェデレーション (OIDC) ID プロバイダーを使用できます。ID プロバイダー (IdP) を使用すると、AWS の外部のユーザー ID を管理して、これらの外部ユーザー ID にアカウント内の AWS リソースに対するアクセス許可を付与できます。フェデレーションおよび認証プロバイダーについて詳しくは、「ID プロバイダーとフェデレーション」を参照してください。

ウェブ ID または OIDC 用のロールを作成するための前提条件

ウェブ ID フェデレーション用のロールを作成する前に、次の必要なステップを実行する必要があります。

ウェブ ID フェデレーション用のロールを作成する準備を行うには

  1. 1 つまたは複数の IdP に開発者としてサインアップします。AWS リソースにアクセスする必要があるアプリを作成する場合は、プロバイダー情報も合わせてアプリを設定します。サインアップすると、プロバイダーからアプリに固有のアプリケーション ID または対象者 ID が提供されます(プロバイダーが異なると、このプロセスを指す用語も異なります。ここでは、プロバイダーに対してアプリを識別するプロセスを設定と呼びます)。 プロバイダーごとに複数のアプリを設定できます。または 1 つのアプリに複数のプロバイダーを設定できます。ID プロバイダーの使用に関する情報は以下で確認してください。

  2. ID プロバイダーから必要な情報を取得したら、IAM で ID プロバイダーを作成します。詳細については、「OpenID Connect(OIDC)ID プロバイダーの作成」を参照してください。

  3. IdP 認証ユーザーが引き受けるロールのポリシーを準備します。すべてのロールに該当することですが、モバイルアプリ用のロールにも 2 つのポリシーがあります。1 つは、ロールの引き受け先を指定する信頼ポリシーです。もう 1 つはアクセス許可ポリシーです。このポリシーでは、モバイルアプリにアクセスを許可または拒否する AWS アクションやリソースを指定します。

    ウェブ ID プロバイダーについては、Amazon Cognito を使用して ID を管理することをお勧めします。この場合、次の例に示すような信頼ポリシーを使用します。

    { "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Principal": {"Federated": "cognito-identity.amazonaws.com"}, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": {"cognito-identity.amazonaws.com:aud": "us-east-2:12345678-abcd-abcd-abcd-123456"}, "ForAnyValue:StringLike": {"cognito-identity.amazonaws.com:amr": "unauthenticated"} }] }

    us-east-2:12345678-abcd-abcd-abcd-123456 は、Amazon Cognito から割り当てられた ID プールの ID に置き換えます。

    ウェブ ID IdP を手動で設定する場合は、信頼ポリシーの作成時に以下の 3 つの値を使用して当該アプリにのみロールを引き受けることを許可します。

    • Action 要素で、sts:AssumeRoleWithWebIdentity アクションを使用します。

    • Principal 要素で、{"Federated":providerUrl/providerArn} 文字列を使用します。

      • 一部の一般的な OpenID Connect (OIDC) IdP の場合、providerUrl は URL です。以下の例では、いくつかの一般的な IdP のプリンシパルを指定する方法を示します。

        "Principal":{"Federated":"cognito-identity.amazonaws.com"}

        "Principal":{"Federated":"www.amazon.com"}

        "Principal":{"Federated":"graph.facebook.com"}

        "Principal":{"Federated":"accounts.google.com"}

      • 他の OIDC プロバイダーの場合は、次の例のように、「ステップ 2」で作成した OIDC ID プロバイダーの ARN を使用します。

        "Principal":{"Federated":"arn:aws:iam::123456789012:oidc-provider/server.example.com"}

    • Condition 要素で、StringEquals 条件を使用してアクセス許可を制限します。ID プール ID (Amazon Cognito の場合) またはアプリ ID (他のプロバイダーの場合) をテストします。この ID は、IdP でアプリを設定したときに取得したアプリ ID と一致する必要があります。これにより、リクエストが自分のアプリからであることを確認できます。使用している IdP に応じて、以下の例に示すような、条件要素を作成します。

      "Condition": {"StringEquals": {"cognito-identity.amazonaws.com:aud": "us-east:12345678-ffff-ffff-ffff-123456"}}

      "Condition": {"StringEquals": {"www.amazon.com:app_id": "amzn1.application-oa2-123456"}}

      "Condition": {"StringEquals": {"graph.facebook.com:app_id": "111222333444555"}}

      "Condition": {"StringEquals": {"accounts.google.com:aud": "66677788899900pro0"}}

      OIDC プロバイダーの場合は、次の例に示すように、OIDC IdP の完全修飾 URL と aud コンテキストキーを使用します。

      "Condition": {"StringEquals": {"server.example.com:aud": "appid_from_oidc_idp"}}

    ロールの信頼ポリシーでプリンシパルとして指定する値は、IdP ごとに異なることに注意してください。ロールで指定できるプリンシパルは 1 種類のみです。したがって、モバイルアプリで複数の IdP からのサインインをユーザーに許可する場合は、サポートする IdP ごとに別個のロールを作成する必要があります。また、IdP ごとに別個の信頼ポリシーを作成する必要があります。

    次の例では、ユーザーが Login with Amazon からサインインする場合のモバイルアプリ用の信頼ポリシーを示します。この例では、amzn1.application-oa2-123456 は Login with Amazon を使用するアプリを設定したときに Amazon が割り当てたアプリ ID を表します。

    { "Version": "2012-10-17", "Statement": [{ "Sid": "RoleForLoginWithAmazon", "Effect": "Allow", "Principal": {"Federated": "www.amazon.com"}, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": {"StringEquals": {"www.amazon.com:app_id": "amzn1.application-oa2-123456"}} }] }

    次の例では、ユーザーが Facebook からサインインする場合のモバイルアプリ用の信頼ポリシーを示します。この例では、111222333444555 は Facebook によって割り当てられたアプリ ID を表します。

    { "Version": "2012-10-17", "Statement": [{ "Sid": "RoleForFacebook", "Effect": "Allow", "Principal": {"Federated": "graph.facebook.com"}, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": {"StringEquals": {"graph.facebook.com:app_id": "111222333444555"}} }] }

    次の例では、ユーザーが Google からサインインする場合のモバイルアプリ用の信頼ポリシーを示します。この例では、666777888999000 は Google によって割り当てられたアプリ ID を表します。

    { "Version": "2012-10-17", "Statement": [{ "Sid": "RoleForGoogle", "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", "Statement": [{ "Sid": "RoleForCognito", "Effect": "Allow", "Principal": {"Federated": "cognito-identity.amazonaws.com"}, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": {"StringEquals": {"cognito-identity.amazonaws.com:aud": "us-east:12345678-ffff-ffff-ffff-123456"}} }] }

ウェブ ID または OIDC 用のロールの作成

前提条件を満たしたら、IAM でロールを作成できます。次の手順では、AWS マネジメントコンソールでウェブ ID/OIDC フェデレーション用のロールを作成する方法について説明します。AWS CLI または AWS API からロールを作成するには、「サードパーティーの ID プロバイダー (フェデレーション) 用のロールの作成」の手順を参照してください。

重要

Amazon Cognito を使用している場合は、Amazon Cognito コンソールを使用してロールをセットアップする必要があります。それ以外の場合は、IAM コンソールを使用して、ウェブ ID フェデレーション用のロールを作成できます。

ウェブ ID フェデレーション用に IAM ロールを作成するには

  1. AWS マネジメントコンソール にサインインし、IAM コンソール(https://console.aws.amazon.com/iam/)を開きます。

  2. ナビゲーションペインで [Roles] を選択した後、[Create role] を選択します。

  3. [ウェブ ID] ロールタイプを選択します。

  4. [ID プロバイダー] で、ロールの ID プロバイダーを選択します。

    • 個々のウェブ ID プロバイダー用のロールを作成している場合は、[Login with Amazon]、[Facebook]、[Google] のいずれかを選択します。

      注記

      サポートする各 ID プロバイダーに対して別々のロールを作成する必要があります。

    • Amazon Cognito 用の高度なシナリオのロールを作成する場合は、[Amazon Cognito] を選択します。

      注記

      高度なシナリオで作業する場合に限り、Amazon Cognito 用のロールを手動で作成する必要があります。それ以外の場合は、Amazon Cognito で自動的にロールを作成できます。Amazon Cognito の詳細については、iOS 向け AWS モバイル SDK 開発者ガイドの「Amazon Cognito ID」および Android 向け AWS モバイル SDK 開発者ガイドの「Amazon Cognito ID」を参照してください。

  5. アプリケーション用の ID を入力します。識別子のラベルは、選択するプロバイダーによって異なります。

    • Login with Amazon 用のロールを作成している場合は、アプリ ID を [アプリケーション ID] ボックスに入力します。

    • Facebook 用のロールを作成している場合は、アプリ ID を [アプリケーション ID] ボックスに入力します。

    • Google 用のロールを作成している場合は、対象者名を [対象者] ボックスに入力します。

    • Amazon Cognito 用のロールを作成している場合は、Amazon Cognito アプリケーション用に作成した ID プールの ID を、[ID プールの ID] ボックスに入力します。

  6. (オプション) [条件の追加 (オプション)] をクリックして、ロールによって付与されたアクセス許可を使用する前にアプリケーションのユーザーが満たしておく必要がある追加条件を作成します。たとえば、特定の IAM ユーザー ID にのみ AWS リソースに対するアクセス許可を付与する条件を追加できます。

  7. ウェブ ID 情報を確認し、[Next: Permissions (次へ: アクセス許可)] を選択します。

  8. IAM には、アカウント内の AWS 管理ポリシーとカスタマー管理ポリシーのリストがあります。アクセス許可ポリシーとして使用するポリシーを選択するか、[ポリシーの作成] を選択して新しいブラウザタブを開き、新しいポリシーをゼロから作成します。詳細については、「IAM ポリシーの作成 (コンソール)」のステップ 4 を参照してください。ポリシーを作成したら、そのタブを閉じて元のタブに戻ります。ウェブ ID ユーザーに許可するアクセス許可ポリシーの横にあるチェックボックスをオンにします。必要に応じて、この時点でポリシーを選択せずに、後でポリシーをロールにアタッチすることもできます。デフォルトでは、ロールにはいずれのアクセス権限もありません。

  9. (オプション) アクセス許可の境界を設定します。これはアドバンスド機能です。

    [Set permissions boundary (アクセス許可の境界の設定)] セクションを開き、[Use a permissions boundary to control the maximum role permissions (アクセス許可の境界を使用してロールのアクセス許可の上限を設定する)] を選択します。アクセス許可の境界として使用するポリシーを選択します。

  10. [次へ: タグ] を選択します。

  11. (オプション) タグをキー – 値のペアとしてアタッチして、メタデータをロールに追加します。IAM におけるタグの使用の詳細については、「IAM エンティティのタグ付け」を参照してください。

  12. [Next: Review] を選択します。

  13. [ロール名] にロールの名前を入力します。ロール名は AWS アカウント内で一意でなければなりません。大文字と小文字は区別されません。たとえば、PRODROLEprodrole というロール名を両方作成することはできません。他の AWS リソースがロールを参照している場合があるため、作成後はロールの名前を変更できません。

  14. (オプション) [Role description] に、新しいロールの説明を入力します。

  15. ロール情報を確認し、[Create role] を選択します。