IAM ロール - Amazon Cognito

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

IAM ロール

ID プールの作成中に、ユーザーが引き受ける IAM ロールを更新するよう求められます。IAM ロールは次のように動作します。ユーザーがアプリにログインすると、Amazon Cognito はユーザーの一時的な AWS 認証情報を生成します。これらの一時的な認証情報は、特定の IAM ロールに関連付けられます。IAM ロールを使用すると、 AWS リソースにアクセスするための一連のアクセス許可を定義できます。

認証されたユーザーと認証されていないユーザー用に、デフォルトの IAM ロールを指定できます。また、ユーザーの ID トークンのクレームに基づいて、各ユーザーのロールを選択するルールを定義できます。詳細については、「ロールベースアクセスコントロールの使用」を参照してください。

Amazon Cognito コンソールは、Amazon Mobile Analytics および Amazon Cognito Sync へのアクセス権を提供する IAM ロールをデフォルトで作成します。または、既存の IAM ロールの使用を選択できます。

IAM ロールを変更して、他のサービスへのアクセスを許可または制限します。これを行うためには、IAM コンソールにログインします。次に、[Roles] (ロール) を選択し、ロールを選択します。選択されたロールにアタッチされたポリシーが、[Permissions] (アクセス許可) タブに表示されます。対応する [Manage Policy] (ポリシーの管理) リンクを選択してアクセスポリシーをカスタマイズできます。ポリシーの使用と定義の詳細については、「IAM ポリシーの概要」を参照してください。

注記

ベストプラクティスとして、最小権限の付与の原則に準拠したポリシーを定義します。つまり、ポリシーには、ユーザーがタスクを実行するために必要なアクセス権限のみを含めます。詳細については、「IAM ユーザーガイド」「Grant Least Privilege」(最小権限を付与する) を参照してください。

認証されていない ID は、アプリにログインしていないユーザーが引き受けることに注意してください。通常、認証されていない ID に割り当てるアクセス権限は、認証された ID に割り当てるアクセス権限よりも制限が厳しいものである必要があります。

信頼ポリシーのセットアップ

Amazon Cognito は IAM ロールを使用して、アプリケーションのユーザー用の一時的な認証情報を生成します。アクセス権限へのアクセスは、ロールの信頼関係によって制御されます。詳細情報 ロールの信頼とアクセス権限

に提示されるトークン AWS STS は、ユーザープール、ソーシャルプロバイダートークン、OIDC プロバイダートークン、または SAML アサーションを独自のトークンに変換する ID プールによって生成されます。アイデンティティプールトークンには、アイデンティティプール ID として aud クレームが含まれています。

次のロール信頼ポリシーの例では、フェデレーティッドサービスプリンシパルが AWS STS API を呼び出すcognito-identity.amazonaws.comことを許可しますAssumeRoleWithWebIdentity。リクエストが成功するのは、API リクエストのアイデンティティプールトークンに以下のクレームが含まれている場合のみです。

  1. アイデンティティプール ID audus-west-2:abcdefg-1234-5678-910a-0e8443553f95 クレーム。

  2. ユーザーがログインしていて、ゲストユーザーではない場合に追加される authenticatedamr クレーム。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "cognito-identity.amazonaws.com" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "cognito-identity.amazonaws.com:aud": "us-west-2:abcdefg-1234-5678-910a-0e8443553f95" }, "ForAnyValue:StringLike": { "cognito-identity.amazonaws.com:amr": "authenticated" } } } ] }

基本 (クラシック) 認証における IAM ロールの信頼ポリシー

ID プールで使用するロールの信頼ポリシーを制限する条件を少なくとも 1 つ適用する必要があります。ID プールのロール信頼ポリシーを作成または更新するときに、ソース ID を制限する条件キーを少なくとも 1 つ使用せずに変更を保存しようとすると、IAM AWS STS はエラーを返します。ID プールからこのタイプの条件を持たない IAM ロールへのクロスアカウントAssumeRoleWithWebIdentityオペレーションは許可されません。

このトピックには、ID プールのソース ID を制限するいくつかの条件が含まれています。詳細なリストについては、AWS 「ウェブ ID フェデレーションで使用できるキー」を参照してください。

ID プールによる基本またはクラシックの認証では、適切な信頼ポリシー AWS STS がある場合、 で任意の IAM ロールを引き受けることができます。Amazon Cognito アイデンティティプールの IAM ロールは、サービスプリンシパル cognito-identity.amazonaws.com を信頼してロールを引き受けます。この設定では、リソースへの意図しないアクセスから IAM ロールを保護するには不十分です。このタイプのロールは、ロール信頼ポリシーに追加の条件を適用する必要があります。次の条件の少なくとも 1 つがないと、ID プールのロールを作成または変更することはできません。

cognito-identity.amazonaws.com:aud

ロールを 1 つ以上の ID プールからのオペレーションに制限します。Amazon Cognito は、ID プールトークンの audクレーム内のソース ID プールを示します。

cognito-identity.amazonaws.com:amr

ロールを authenticatedまたは unauthenticated (ゲスト) ユーザーに制限します。Amazon Cognito は、ID プールトークンの amrクレームの認証状態を示します。

cognito-identity.amazonaws.com:sub

ロールを UUID で 1 人以上のユーザーに制限します。この UUID は、ID プール内のユーザーの ID です。この値は、ユーザーの元の ID プロバイダーsubの値ではありません。Amazon Cognito は、アイデンティティプールトークンの subクレームでこの UUID を示します。

拡張フロー認証では、IAM ロールが ID プール AWS アカウント と同じ にある必要がありますが、基本認証ではそうではありません。

クロスアカウントの IAM ロールを引き受ける Amazon Cognito アイデンティティプールには、その他の考慮事項が適用されます。これらのロールの信頼ポリシーは、cognito-identity.amazonaws.comサービスプリンシパルを受け入れ特定のcognito-identity.amazonaws.com:aud条件を含める必要があります。 AWS リソースへの意図しないアクセスを防ぐため、 aud条件キーは、 条件値の ID プールからユーザーにロールを制限します。

ID プールが ID に対して発行するトークンには、ID プール AWS アカウント の送信元に関する情報が含まれます。AssumeRoleWithWebIdentity API リクエストで ID プールトークンを提示すると、 は発信元の ID プールが IAM ロール AWS アカウント と同じ にある AWS STS かどうかを確認します。は、リクエストがクロスアカウントである AWS STS と判断すると、ロール信頼ポリシーに aud条件があるかどうかを確認します。ロール信頼ポリシーにそのような条件が存在しない場合、継承ロール呼び出しは失敗します。リクエストがクロスアカウントでない場合は、この制限を適用 AWS STS しないでください。ベストプラクティスとして、常にこのタイプの条件を ID プールロールの信頼ポリシーに適用します。

追加の信頼ポリシー条件

ID プール間でのロールの再利用

複数の ID プール間でロールを再利用するには、ロールが共通のアクセス権限のセットを共有するため、次のように複数の ID プールを含めることができます。

"StringEquals": { "cognito-identity.amazonaws.com:aud": [ "us-east-1:12345678-abcd-abcd-abcd-123456790ab", "us-east-1:98765432-dcba-dcba-dcba-123456790ab" ] }
特定の ID へのアクセスの制限

特定のアプリユーザーに限定されたポリシーを作成するには、cognito-identity.amazonaws.com:sub の値を確認します。

"StringEquals": { "cognito-identity.amazonaws.com:aud": "us-east-1:12345678-abcd-abcd-abcd-123456790ab", "cognito-identity.amazonaws.com:sub": [ "us-east-1:12345678-1234-1234-1234-123456790ab", "us-east-1:98765432-1234-1234-1243-123456790ab" ] }
特定のプロバイダーへのアクセスの制限

特定のプロバイダー (おそらくはユーザー独自のログインプロバイダー) でログインしたユーザーに制限されたポリシーを作成するには、cognito-identity.amazonaws.com:amr の値を確認します。

"ForAnyValue:StringLike": { "cognito-identity.amazonaws.com:amr": "login.myprovider.myapp" }

たとえば、Facebook のみを信頼するアプリに、次の amr 句があるとします。

"ForAnyValue:StringLike": { "cognito-identity.amazonaws.com:amr": "graph.facebook.com" }

アクセスポリシー

ロールにアタッチするアクセス許可は、そのロールを引き受けるすべてのユーザーに適用されます。ユーザーのアクセスをパーティション化するには、ポリシー条件と変数を使用します。詳細については、「IAM ポリシーの要素: 変数とタグ」を参照してください。sub 条件を使用して、アクションをアクセスポリシーの Amazon Cognito アイデンティティ ID に制限できます。このオプションは注意して使用してください。特に、一貫したユーザー ID を持たない認証されていない ID には注意が必要です。Amazon Cognito とのウェブフェデレーションの IAM ポリシー変数の詳細については、「 AWS Identity and Access Management ユーザーガイド」の「IAM および AWS STS 条件コンテキストキー」を参照してください。

セキュリティ保護を向上させるために、Amazon Cognito は GetCredentialsForIdentity を使用して、拡張フローで認証されていないユーザーを割り当てる認証情報にスコープダウンポリシーを適用します。スコープダウンポリシーは、認証されていないロールに適用する IAM ポリシーに インラインセッションポリシーAWS マネージドセッションポリシー を追加します。ロールの IAM ポリシーとセッションポリシーの両方でアクセスを許可する必要があるため、スコープダウンポリシーでは、次のリストに示すサービス以外のサービスへのユーザーアクセスが制限されます。

注記

基本 (クラシック) フローでは、独自の AssumeRoleWithWebIdentity API リクエストを作成し、そのリクエストにこれらの制限を適用できます。セキュリティのベストプラクティスとして、このスコープダウンポリシーを超えるアクセス許可を認証されていないユーザーに割り当てないでください。

また、Amazon Cognito は、認証されたユーザーと認証されていないユーザーが Amazon Cognito ID プールと Amazon Cognito Sync に API リクエストを実行できないようにします。ウェブ ID からのサービスアクセスに制限が課せられる AWS のサービス 場合もあります。

拡張フローでリクエストが成功すると、Amazon Cognito はバックグラウンドで AssumeRoleWithWebIdentity API リクエストを行います。このリクエストのパラメータとしては、Amazon Cognito に次のものが含まれます。

  1. ユーザーのアイデンティティ ID。

  2. ユーザーが引き受ける IAM ロールの ARN。

  3. インラインセッションポリシーを追加する policy パラメータ。

  4. 値が Amazon で追加のアクセス許可を付与する AWS マネージドポリシーであるPolicyArns.member.Nパラメータ CloudWatch。

認証されていないユーザーがアクセスできるサービス

拡張フローを使用すると、Amazon Cognito がユーザーセッションに適用するスコープダウンポリシーにより、次の表に記載されている以外のサービスを使用できなくなります。一部のサービスでは、特定のアクションのみが許可されます。

カテゴリ サービス

分析

Amazon Data Firehose

Amazon Managed Service for Apache Flink

アプリケーション統合

Amazon Simple Queue Service

AR とバーチャルリアリティ

Amazon Sumerian¹

ビジネスアプリケーション

Amazon Mobile Analytics

Amazon Simple Email Service

コンピューティング

AWS Lambda

暗号化と PKI

AWS Key Management Service 1

データベース

Amazon DynamoDB

Amazon SimpleDB

フロントエンドウェブおよびモバイル

AWS AppSync

Amazon Location Service

Amazon Simple Notification Service

Amazon Pinpoint

ゲーム開発

Amazon GameLift

IoT

AWS IoT

機械学習

Amazon CodeWhisperer

Amazon Comprehend

Amazon Lex

Amazon Machine Learning

Amazon Personalize

Amazon Polly

Amazon Rekognition

Amazon SageMaker1

Amazon Textract¹

Amazon Transcribe

Amazon Translate

管理とガバナンス

Amazon CloudWatch

Amazon CloudWatch Logs

ネットワーキングとコンテンツ配信

Amazon API Gateway

セキュリティ、アイデンティティ、コンプライアンス

Amazon Cognito ユーザープール

[Storage (ストレージ)]

Amazon Simple Storage Service

1 次の表の AWS のサービス の場合、インラインポリシーはアクションのサブセットを付与します。表には、それぞれで実行可能なアクションが表示されています。

AWS のサービス 認証されていない拡張フローユーザーの最大アクセス許可
AWS Key Management Service

Encrypt

Decrypt

ReEncrypt

GenerateDataKey

Amazon SageMaker

InvokeEndpoint

Amazon Textract

DetectDocumentText

AnalyzeDocument

Amazon Sumerian

View*

このリスト AWS のサービス 以外の へのアクセスを許可するには、ID プールで基本 (クラシック) 認証フローを有効にします。認証されていないユーザーの IAM ロールに割り当てられたポリシーで許可されている AWS のサービス からの NotAuthorizedException エラーがユーザーに表示された場合は、そのサービスをユースケースから削除できるかどうかを評価してください。できない場合は、基本フローに切り替えてください。

インラインセッションポリシー

インラインセッションポリシーは、ユーザーの有効なアクセス許可に、次のリストの AWS のサービス 外部へのアクセスを含めることを制限します。また、ユーザーの IAM ロールに適用するポリシー AWS のサービス で、これらにアクセス許可を付与する必要があります。ロールを引き受けたセッションにおけるユーザーの有効なアクセス許可は、そのユーザーのロールに割り当てられたポリシーとセッションポリシーが交差したものです。詳細については、AWS Identity and Access Management ユーザーガイドの「セッションポリシー」を参照してください。

Amazon Cognito は、デフォルトで有効になっている  AWS リージョン  ユーザーのセッションに次のインラインポリシーを追加します。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "cloudwatch:*", "logs:*", "dynamodb:*", "kinesis:*", "mobileanalytics:*", "s3:*", "ses:*", "sns:*", "sqs:*", "lambda:*", "machinelearning:*", "execute-api:*", "iot:*", "gamelift:*", "scs:*", "cognito-identity:*", "cognito-idp:*", "lex:*", "polly:*", "comprehend:*", "translate:*", "transcribe:*", "rekognition:*", "mobiletargeting:*", "firehose:*", "appsync:*", "personalize:*", "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "sagemaker:InvokeEndpoint", "cognito-sync:*", "sumerian:View*", "codewhisperer:*", "textract:DetectDocumentText", "textract:AnalyzeDocument", "sdb:*" ], "Resource": [ "*" ] } ] }

他のすべてのリージョンの場合、インラインスコープダウンポリシーには、次の Action ステートメントを除いて、デフォルトのリージョンにリストされているものがすべて含まれます。

"cognito-sync:*", "sumerian:View*", "codewhisperer:*", "textract:DetectDocumentText", "textract:AnalyzeDocument", "sdb:*"

AWS マネージドセッションポリシー

また、Amazon Cognito は、 AWS  マネージドポリシー AmazonCognitoUnAuthedIdentitiesSessionPolicy による未認証ユーザーのアクセス許可の範囲を、拡張フローの未認証ユーザーに制限します。また、認証されていない IAM ロールに適用するポリシーでこのアクセス許可を付与する必要があります。

AmazonCognitoUnAuthedIdentitiesSessionPolicy 管理ポリシーには以下のアクセス許可が記載されています。

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "rum:PutRumEvents", "polly:*", "comprehend:*", "translate:*", "transcribe:*", "rekognition:*", "mobiletargeting:*", "firehose:*", "personalize:*", "sagemaker:InvokeEndpoint" ], "Resource": "*" }] }

アクセスポリシーの例

このセクションでは、特定のオペレーションの実行に必要な最小限のアクセス許可を付与する Amazon Cognito アクセスポリシーの例を示します。可能な場合は、ポリシー変数を使用して特定のアイデンティティ ID のアクセス権限をさらに制限できます。たとえば、${cognito-identity.amazonaws.com:sub} を使用します。詳細については、AWS モバイルブログで「Understanding Amazon Cognito Authentication Part 3: Roles and Policies」を参照してください。

注記

セキュリティのベストプラクティスとして、ポリシーには、ユーザーがタスクを実行するために必要なアクセス権限のみを含めてください。つまり、可能であれば必ずオブジェクトの個々の ID ごとにアクセスを設定するようにしてください。

ID に Amazon S3 内の単一のオブジェクトへの読み取りアクセスを許可する

次のアクセスポリシーは、特定の S3 バケットから 1 つのオブジェクトを取得するための読み取りアクセス権限を ID に付与します。

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "s3:GetObject" ], "Effect": "Allow", "Resource": ["arn:aws:s3:::mybucket/assets/my_picture.jpg"] } ] }

ID に Amazon S3 の ID 固有のパスへの読み取りおよび書き込みアクセスを許可する

次のアクセスポリシーは、プレフィックスを ${cognito-identity.amazonaws.com:sub} 変数にマッピングすることで、S3 バケット内の特定のプレフィックス「folder」にアクセスする読み取りおよび書き込みアクセス権限を付与します。

このポリシーでは、${cognito-identity.amazonaws.com:sub} を使用して挿入された us-east-1:12345678-1234-1234-1234-123456790ab などの ID は、オブジェクトを取得し、arn:aws:s3:::mybucket/us-east-1:12345678-1234-1234-1234-123456790ab に配置およびリストできます。ただし、この ID には arn:aws:s3:::mybucket の他のオブジェクトへのアクセスは許可されません。

{ "Version": "2012-10-17", "Statement": [ { "Action": ["s3:ListBucket"], "Effect": "Allow", "Resource": ["arn:aws:s3:::mybucket"], "Condition": {"StringLike": {"s3:prefix": ["${cognito-identity.amazonaws.com:sub}/*"]}} }, { "Action": [ "s3:GetObject", "s3:PutObject" ], "Effect": "Allow", "Resource": ["arn:aws:s3:::mybucket/${cognito-identity.amazonaws.com:sub}/*"] } ] }

ID に Amazon DynamoDB への詳細に設定されたアクセスを割り当てる

次のアクセスポリシーは、Amazon Cognito 環境変数を使用して、Amazon DynamoDB リソースへの詳細に設定されたアクセスコントロールを行います。これらの変数は、アイデンティティ ID によって DynamoDB のアイテムへのアクセス権限を付与します。詳細については、Amazon DynamoDB デベロッパーガイドの「詳細に設定されたアクセスコントロールのための IAM ポリシー条件の使用」を参照してください。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "dynamodb:GetItem", "dynamodb:BatchGetItem", "dynamodb:Query", "dynamodb:PutItem", "dynamodb:UpdateItem", "dynamodb:DeleteItem", "dynamodb:BatchWriteItem" ], "Resource": [ "arn:aws:dynamodb:us-west-2:123456789012:table/MyTable" ], "Condition": { "ForAllValues:StringEquals": { "dynamodb:LeadingKeys": ["${cognito-identity.amazonaws.com:sub}"] } } } ] }

Lambda 関数を呼び出すためのアクセス権限を ID に与えます。

次のアクセスポリシーは、Lambda 関数を呼び出すアクセス権限を ID に付与します。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "lambda:InvokeFunction", "Resource": [ "arn:aws:lambda:us-west-2:123456789012:function:MyFunction" ] } ] }

Amazon Kinesis Data Stream へのレコードを発行するアクセス権限を ID に付与する

次のアクセスポリシーでは、ID が任意の Kinesis Data Streams で PutRecord オペレーションを使用することを許可します。これは、アカウント内のすべてのストリームにデータレコードを追加する必要があるユーザーに適用できます。詳細については、Amazon Kinesis Data Streams デベロッパーガイドの「IAM を使用して Amazon Kinesis Streams リソースへのアクセスを制御する」を参照してください。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "kinesis:PutRecord", "Resource": [ "arn:aws:kinesis:us-east-1:111122223333:stream/stream1" ] } ] }

ID に Amazon Cognito Sync ストアのデータへのアクセス権を付与する

以下のアクセスポリシーは、アイデンティティに Amazon Cognito Sync ストア内のデータのみに対するアクセス権限を付与します。

{ "Version": "2012-10-17", "Statement":[{ "Effect":"Allow", "Action":"cognito-sync:*", "Resource":["arn:aws:cognito-sync:us-east-1:123456789012:identitypool/${cognito-identity.amazonaws.com:aud}/identity/${cognito-identity.amazonaws.com:sub}/*"] }] }