ウェブ ID または OpenID Connect フェデレーション用のロールの作成 (コンソール)
AWS アカウント アカウントで AWS Identity and Access Management ユーザーを作成する代わりに、ウェブ ID または OpenID Connect (OIDC) フェデレーション ID プロバイダーを使用できます。ID プロバイダー (IdP) を使用すると、AWS の外部のユーザー ID を管理して、これらの外部ユーザー ID にアカウント内の AWS リソースに対するアクセス許可を付与できます。フェデレーションおよび IdPs (ID プロバイダー) について詳しくは、「ID プロバイダーとフェデレーション」を参照してください。
ウェブ ID または OIDC 用のロールを作成するための前提条件
ウェブ ID フェデレーション用のロールを作成する前に、次の必要なステップを実行する必要があります。
ウェブ ID フェデレーション用のロールを作成する準備を行うには
-
フェデレーション OIDC ID を提供する 1 つ以上のサービスにサインアップします。AWS リソースにアクセスする必要があるアプリを作成する場合は、プロバイダー情報も合わせてアプリを設定します。サインアップすると、プロバイダーからアプリに固有のアプリケーション ID または対象者 ID が提供されます。(プロバイダーが異なれば、このプロセスには異なる用語が使用されます。このガイドでは、プロバイダーでアプリを識別するプロセスに設定という用語を使用します。) プロバイダーごとに複数のアプリを設定できます。または 1 つのアプリに複数のプロバイダーを設定できます。ID プロバイダーの使用に関する情報は以下で確認してください。
-
Facebook 開発者サイトの「アプリまたはウェブサイトに Facebook ログインを追加する
」 -
Google 開発者サイトの「ログインでの OAuth 2.0 の使用 (OpenID Connect)
」
-
IdP から必要な情報を受け取ったら、IAM で IdP を作成します。詳細については、「OpenID Connect (OIDC) ID プロバイダーの作成」を参照してください。
重要
Google、Facebook、または Amazon Cognito の OIDC IdP を使用している場合は、AWS Management Console に個別の IAM IdP を作成しないでください。これらの OIDC ID プロバイダーは、すでに AWS に組み込まれており、ユーザーが使用できます。この手順をスキップして、次の手順で IdP を使用して新しいロールを作成します。
-
IdP 認証ユーザーが引き受けるロールのポリシーを準備します。すべてのロールに該当することですが、モバイルアプリ用のロールにも 2 つのポリシーがあります。1 つは、ロールの引き受け先を指定する信頼ポリシーです。もう 1 つはアクセス許可ポリシーです。このポリシーでは、モバイルアプリにアクセスを許可または拒否する AWS アクションやリソースを指定します。
ウェブ IdP については、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
}-
一部の一般的な OIDC IdP の場合、
は URL です。以下の例では、いくつかの一般的な IdP のプリンシパルを指定する方法を示します。providerUrl
"Principal":{"Federated":"cognito-identity.amazonaws.com"}
"Principal":{"Federated":"www.amazon.com"}
"Principal":{"Federated":"graph.facebook.com"}
"Principal":{"Federated":"accounts.google.com"}
-
他の OIDC プロバイダーの場合は、次の例のように、ステップ 2 で作成した OIDC IdP の Amazon リソースネーム (ARN) を使用します。
"Principal":{"Federated":"arn:aws:iam::123456789012:oidc-provider/server.example.com"}
-
-
Condition
要素で、StringEquals
条件を使用してアクセス許可を制限します。ID プール ID (Amazon Cognito の場合) またはアプリ ID (他のプロバイダーの場合) をテストします。この ID プール ID は、IdP でアプリを設定したときに取得したアプリ ID と一致する必要があります。この 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 ごとに異なります。ウェブ ID または OIDC 用のロールで指定できるプリンシパルは 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 Management Console でウェブ ID または OIDC フェデレーション用のロールを作成する方法について説明します。AWS CLI または AWS API からロールを作成するには、「サードパーティー ID プロバイダー (フェデレーション) 用のロールの作成」の手順を参照してください。
重要
Amazon Cognito を使用する場合は、Amazon Cognito コンソールを使用してロールをセットアップします。それ以外の場合は、IAM コンソールを使用して、ウェブ ID フェデレーション用のロールを作成できます。
ウェブ ID フェデレーション用に IAM ロールを作成するには
AWS Management Console にサインインして、IAM コンソール (https://console.aws.amazon.com/iam/)
を開きます。 -
ナビゲーションペインで [ロール] を選択した後、[ロールの作成] を選択します。
-
[Web Identity] (ウェブ ID) ロールタイプを選択します。
-
[Identity provider] (ID プロバイダー) で、ロールの IdP を選択します。
-
個々のウェブ IdP 用のロールを作成する場合は、Login with Amazon、Facebook、Google のいずれかを選択します。
注記
サポートする各 IdP に対して別々のロールを作成する必要があります。
-
Amazon Cognito 用の高度なシナリオのロールを作成する場合は、Amazon Cognito を選択します。
注記
高度なシナリオで作業する場合に限り、Amazon Cognito で使用するロールを手動で作成する必要があります。それ以外の場合は、Amazon Cognito で自動的にロールを作成できます。Amazon Cognito の詳細については、[ Amazon Cognito Developer Guide ]の[Identity pools (federated) external identity providers]を参照してください。
-
-
アプリケーション用の ID を入力します。ID のラベルは、選択するプロバイダーによって異なります。
-
Login with Amazon 用のロールを作成する場合は、アプリ ID を [Application ID] (アプリケーション ID) ボックスに入力します。
-
Facebook 用のロールを作成する場合は、アプリ ID を [Application ID] (アプリケーション ID) ボックスに入力します。
-
Google 用のロールを作成する場合は、対象者名を [Audience] (対象者) ボックスに入力します。
-
Amazon Cognito 用のロールを作成する場合は、Amazon Cognito アプリケーション用に作成した ID プールの ID を、[Identity Pool ID] (ID プール ID) ボックスに入力します。
-
-
(オプション) [Condition](optional) (条件の追加) (オプション) を選択して、ロールによって付与されたアクセス許可を使用する前にアプリケーションのユーザーが満たしておく必要がある追加条件を作成します。例えば、特定の IAM ユーザー ID にのみ AWS リソースに対するアクセス許可を付与する条件を追加できます。
-
ウェブ ID 情報を確認し、[Next] (次へ) を選択します。
-
IAM には、アカウント内の AWS 管理ポリシーとカスタマー管理ポリシーのリストがあります。アクセス許可ポリシーとして使用するポリシーを選択するか、[Create policy] (ポリシーの作成) を選択して新しいブラウザタブを開き、新しいポリシーをゼロから作成します。詳細については、「IAM ポリシーの作成」を参照してください。ポリシーを作成したら、そのタブを閉じて元のタブに戻ります。ウェブ ID ユーザーに許可するアクセス許可ポリシーの横にあるチェックボックスをオンにします。必要に応じて、この時点でポリシーを選択せずに、後でポリシーをロールにアタッチすることもできます。デフォルトでは、ロールにはいずれのアクセス権限もありません。
-
(オプション) アクセス許可の境界を設定します。これはアドバンスド機能です。
[Permissions boundary] (アクセス許可の境界) セクションを開き、[Use a permissions boundary to control the maximum role permissions] (アクセス許可の境界を使用してロールのアクセス許可の上限を設定する) を選択します。アクセス許可の境界として使用するポリシーを選択します。
-
[Next] (次へ) をクリックします。
-
[Role name] (ロール名) に、ロールの名前を入力します。ロール名は AWS アカウント アカウント内で一意である必要があります。大文字と小文字は区別されません。例えば、
PRODROLE
とprodrole
というロール名を両方作成することはできません。他の AWS リソースがロールを参照している場合があるため、作成後はロールの名前を編集できません。 -
(オプション) [Description] (説明) には、新しいロールの説明を入力します。
-
[Step 1: Select trusted entities] (ステップ 1: 信頼済みエンティティの選択) または [Step 2: Add permissions] (ステップ 2: 権限の追加) のセクションで [Edit] (編集) を選択し、ロールのユースケースと権限を変更します。
-
(オプション) ロールにメタデータを追加するには、キーバリューのペアとしてタグを添付します。IAM におけるタグの使用の詳細については、「IAM リソースのタグ付け」を参照してください。
-
ロール情報を確認し、[Create role (ロールの作成)] を選択します。
GitHub OIDC ID プロバイダーのロールの設定
GitHub を OIDC IdP として使用する場合、ベストプラクティスは、IAM IdP に関連付けられたロールを引き受けることができるエンティティを制限することです。信頼ポリシーに条件ステートメントを含めると、ロールを特定の GitHub Organization、リポジトリ、またはブランチに制限できます。ロールの制限については、「GitHub Docs - About security hardening with OpenID Connecttoken.actions.githubusercontent.com:sub
を使用してアクセスを制限できます。条件を特定のリポジトリまたはブランチのセットに制限することをお勧めします。この条件を含めない場合、管理外の Organization またはリポジトリの GitHub Actions は、AWS アカウント で GitHub IAM IdP に関連付けられたロールを引き受けることができます。AWS を GitHub の OIDC のフェデレーティッド ID として信頼するよう設定する方法については、「GitHub Docs - Configuring OpenID Connect in Amazon Web Services
以下の信頼ポリシー例は、定義済みの GitHub Organization、リポジトリ、ブランチへのアクセスを制限します。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::012345678910:oidc-provider/token.actions.githubusercontent.com" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "token.actions.githubusercontent.com:aud": "sts.amazonaws.com", "token.actions.githubusercontent.com:sub": "repo:
GitHubOrg
/GitHubRepo
:ref:refs/heads/GitHubBranch
" } } } ] }
次の例の条件は、定義された GitHub Organization とリポジトリへのアクセスを制限しますが、リポジトリ内の任意のブランチへのアクセスを許可します。
"Condition": { "StringLike": { "token.actions.githubusercontent.com:aud": "sts.amazonaws.com", "token.actions.githubusercontent.com:sub": "repo:
GitHubOrg
/GitHubRepo
:*
" } }
以下の条件例は、定義された GitHub Organization 内の任意のリポジトリまたはブランチへのアクセスを制限します。これは、GitHub を OIDC IdP として使用するロールの最小信頼ポリシー条件として推奨します。
"Condition": { "StringLike": { "token.actions.githubusercontent.com:aud": "sts.amazonaws.com", "token.actions.githubusercontent.com:sub": "repo:
GitHubOrg
/*
" } }
ポリシーの条件チェックで利用可能なウェブ ID フェデレーションのキーの詳細については、「AWS ウェブ ID フェデレーションで利用可能なキー」を参照してください。