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 として aud クレームが含まれています。

次のロール信頼ポリシーの例では、フェデレーションサービスプリンシパル cognito-identity.amazonaws.com が AWS STS API 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" } } } ] }

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 リクエストを実行できないようにします。その他の AWS のサービス では、ウェブ ID からのサービスアクセスに制限を課す場合があります。

拡張フローでリクエストが成功すると、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 Service1

データベース

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

¹ 次の表の AWS のサービス では、インラインポリシーによりアクションのサブセットが許可されます。表には、それぞれで実行可能なアクションが表示されています。

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

Encrypt

Decrypt

ReEncrypt

GenerateDataKey

Amazon SageMaker

InvokeEndpoint

Amazon Textract

DetectDocumentText

AnalyzeDocument

Amazon Sumerian

View*

このリスト外で AWS のサービス へのアクセスを許可するには、アイデンティティプールの基本 (クラシック) 認証フローを有効にします。認証されていないユーザーの 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}/*"] }] }