メニュー
AWS Identity and Access Management
ユーザーガイド

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

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

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

  1. IdP(1 つまたは複数)の開発者としてサインアップすることから開始します。そのプロバイダーを使用してアプリの設定も行います。その際に、プロバイダーからそのアプリ固有のアプリケーション ID または利用者 ID が与えられます。(プロバイダーによって、このプロセスを指す用語は異なります。ここでは、プロバイダーに対してアプリを識別するプロセスを設定と呼びます)。プロバイダーごとにプロバイダーに特有のアプリ ID が与えられるため、複数のプロバイダーの設定をすれば、アプリは複数のアプリ ID を持ちます。プロバイダーごとに複数のアプリを設定できます。以下の外部リンクで、ID プロバイダーそれぞれの使用方法に関する情報が入手できます。

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

  3. IdP 認証ユーザーが引き受けるロールのポリシーを準備します。あらゆるロールと同様に、モバイルアプリ用のロールにもポリシーが 2 つ含まれています。1 つは、誰がロールを引き受けることができるか(信頼されたエンティティまたはプリンシパル)を指定する信頼ポリシーです。もう 1 つは、モバイルアプリでアクセスが許可または拒否される実際の AWS アクションおよびリソースを指定するアクセスポリシーです(ユーザーポリシーやリソースポリシーに似たものです)。

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

    Copy
    { "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 を手動で設定する場合、信頼ポリシーは sts:AssumeRoleWithWebIdentity アクションに Allow 効果を付与する必要があります。このロールでは、ロールをお客様のアプリケーションのみが引き受けることができるように、次の 2 つの値を使用します。

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

      • 一部の一般的な OpenID Connect (OIDC) IdPs の場合、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 (他のプロバイダーの場合) が、IdP を使用してアプリを設定した際に取得したアプリ ID と一致するかどうかをテストします。これにより、リクエストが自分のアプリからであることを確認できます。使用している IdP によって異なる次のポリシー変数を対象としてアプリ ID をテストします。

      "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 とアプリ ID を表すポリシー変数を使用するため、ポリシーの Version 要素を 2012-10-17 またはそれ以降のサポートされているバージョンに設定する必要があります。

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

    Copy
    { "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"}} }] }

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

    Copy
    { "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 からサインインした場合に、モバイルアプリで引き受けるロールの信頼ポリシーを示しています。この例では、666777888999000 は Google によって割り当てられたアプリ ID を表します。

    Copy
    { "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 を表します。

    Copy
    { "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": "us-east:12345678-ffff-ffff-ffff-123456"}} }] }

    必要な手順が完了したら、ロール自体を作成できます。次の手順では、AWS マネジメントコンソールでウェブ ID/OIDC フェデレーション用のロールを作成する方法について説明します。AWS CLI、Tools for Windows PowerShell、または AWS API を使用してロールを作成する場合は、「サードパーティの ID プロバイダー(フェデレーション)用のロールの作成」の手順を参照してください。

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

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

  1. https://console.aws.amazon.com/iam/ にある IAM コンソールを開きます。

  2. ナビゲーションペインで [Roles] をクリックし、続いて [Create role] をクリックします。

  3. [Web identity] ロールタイプを選択します。

  4. [Identity provider] リストで、ロールを作成する対象の 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 を入力します。ID 設定で変更する名前は、選択するプロバイダーによって異なります。

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

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

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

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

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

  7. ウェブ ID 情報を確認し、[Next: Permissions] を選択します。

  8. ロールにアタッチするアクセス権限ポリシーを 1 つ以上選択します。デフォルト設定では、ロールには何も許可されていません。ウェブ ID ユーザーに許可するアクセス権限を割り当てるポリシーの横にあるボックスを選択します。続いて、[Next: Review] を選択します。

  9. [Role name] に、このロールの目的を識別しやすくするロール名を入力します。ロール名は AWS アカウント内で一意でなければなりません。大文字と小文字は区別されません。たとえば、PRODROLEprodrole というロール名を両方作成することはできません。多くのエンティティによりロールが参照されるため、作成後にロール名を変更することはできません。

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

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