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「 ユーザーガイド」の「最小権限を付与する」を参照してください。

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

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

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

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

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

  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を返します。ID プールからこのタイプの条件がないIAMロールへのクロスアカウントAssumeRoleWithWebIdentityオペレーションは許可 AWS STS しません。

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

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

cognito-identity.amazonaws.com:aud

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

cognito-identity.amazonaws.com:amr

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

cognito-identity.amazonaws.com:sub

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

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

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

ID に対して ID プールが発行するトークンには、ID プール AWS アカウント の発信元に関する情報が含まれています。AssumeRoleWithWebIdentity API リクエストで ID プールトークンを提示すると、 AWS STS は、発信元の ID プールがIAMロール AWS アカウント と同じ にあるかどうかを確認します。がリクエストがクロスアカウントである AWS STS と判断した場合、ロール信頼ポリシーに aud 条件があるかどうかをチェックします。ロール信頼ポリシーにこのような条件が存在しない場合、 assume-role 呼び出しは失敗します。リクエストがクロスアカウントでない場合は、この制限を適用 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 条件を使用して、アクセスポリシーIDs内のアクションを 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 はバックグラウンドでAssumeRoleWithWebIdentityAPIリクエストを行います。このリクエストのパラメータとしては、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 Location Service

ゲーム開発

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 ログ

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

Amazon API Gateway

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

Amazon Cognito ユーザープール

ストレージ

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*

Amazon Location Service

SearchPlaceIndex*

GetPlace

CalculateRoute*

*Geofence

*Geofences

*DevicePosition*

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

ゲストユーザーのインラインセッションポリシー

Amazon Cognito はまずIAM、認証情報のリクエストにインラインポリシーを適用します。インラインセッションポリシーでは、ユーザーの有効な権限に、以下のリストにある 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ロールにアタッチするポリシーでも付与する必要があります。引き受けロールセッションに対するユーザーの有効なアクセス許可は、ロールに割り当てられたIAMポリシーとセッションポリシーの交差点です。詳細については、AWS Identity and Access Management ユーザーガイドの「セッションポリシー」を参照してください。

この AWS マネージドポリシーおよびその他のセッションポリシーの正味効果の概要については、「」を参照してください認証されていないユーザーがアクセスできるサービス

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

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "rum:PutRumEvents", "polly:*", "comprehend:*", "translate:*", "transcribe:*", "rekognition:*", "mobiletargeting:*", "firehose:*", "personalize:*", "sagemaker:InvokeEndpoint", "geo:GetMap*", "geo:SearchPlaceIndex*", "geo:GetPlace", "geo:CalculateRoute*", "geo:*Geofence", "geo:*Geofences", "geo:*DevicePosition*" ], "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:::amzn-s3-demo-bucket/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:::amzn-s3-demo-bucket/us-east-1:12345678-1234-1234-1234-123456790ab に配置およびリストできます。ただし、この ID には arn:aws:s3:::amzn-s3-demo-bucket の他のオブジェクトへのアクセスは許可されません。

{ "Version": "2012-10-17", "Statement": [ { "Action": ["s3:ListBucket"], "Effect": "Allow", "Resource": ["arn:aws:s3:::amzn-s3-demo-bucket"], "Condition": {"StringLike": {"s3:prefix": ["${cognito-identity.amazonaws.com:sub}/*"]}} }, { "Action": [ "s3:GetObject", "s3:PutObject" ], "Effect": "Allow", "Resource": ["arn:aws:s3:::amzn-s3-demo-bucket/${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 デベロッパーガイド」の「 を使用した Amazon Kinesis Data Streams リソースへのアクセスの制御IAM」を参照してください。 Amazon Kinesis

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

ロールの信頼とアクセス権限

これらのロールが異なる点は、それらの信頼関係です。未認証ロールの信頼ポリシーの例を次に示します。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Federated": "cognito-identity.amazonaws.com" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "cognito-identity.amazonaws.com:aud": "us-east-1:12345678-corner-cafe-123456790ab" }, "ForAnyValue:StringLike": { "cognito-identity.amazonaws.com:amr": "unauthenticated" } } } ] }

このポリシーは、cognito-identity.amazonaws.com (OpenID Connect トークンの発行者) のフェデレーティッドユーザーに、このロールを引き受ける許可を与えます。さらに、ポリシーでは、ID プールに一致させるためにトークンの aud が制限されます (この場合は ID プール ID)。最後に、ポリシーは、Amazon Cognito GetOpenIdTokenAPIオペレーションによって発行されたトークンの複数値amrクレームの配列メンバーの 1 つに値 があることを指定しますunauthenticated

Amazon Cognito がトークンを作成すると、トークンの amrunauthenticated またはauthenticated のいずれかに設定します。amrauthenticated の場合、トークンには、認証中に使用されるすべてのプロバイダーが含まれます。これにより、amr 条件を次のように変更するだけで、Facebook 経由でログインしたユーザーのみを信頼するロールを作成できます。

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

ロールで信頼関係を変更するときや、ID プール間でロールの使用を試みるときは注意が必要です。ID プールを信頼するようにロールを正しく設定しない場合、次のようなSTS結果からの例外です。

AccessDenied -- Not authorized to perform sts:AssumeRoleWithWebIdentity

このメッセージが表示された場合は、ID プールと認証タイプに適切なロールがあることを確認します。