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 ロールを利用して、アプリケーションのユーザー用の一時的な認証情報を生成します。アクセス権限へのアクセスは、ロールの信頼関係によって制御されます。詳細情報 ロールの信頼とアクセス権限.

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" }

アクセスポリシー

ロールにアタッチされたアクセス権限は、そのロールを引き受けるすべてのユーザー間で有効です。ユーザーのアクセスをパーティション化する場合、ポリシー変数によってこれを行うことができます。アクセスポリシーにユーザーのアイデンティティ ID を含める場合 (特に、認証されていない ID) は注意が必要です。これらの ID は、ユーザーがログインする選択をした場合に変更される可能性があります。

セキュリティ保護を向上させるために、Amazon Cognito は GetCredentialForIdentity によって提供された認証情報にスコープダウンポリシーを適用して、認証されていないユーザーが以下にリストされているサービス以外のサービスにアクセスしないようにします。つまり、このポリシーでは、これらの認証情報を使用する ID に以下のサービスへのアクセスのみ許可します。

  • AWS AppSync

  • Amazon CloudWatch

  • Amazon Cognito ID

  • Amazon Cognito Sync

  • Amazon Comprehend

  • Amazon DynamoDB

  • Amazon GameLift

  • AWS IoT

  • AWS Key Management Service (AWS KMS)

  • Amazon Kinesis Data Firehose

  • Amazon Kinesis Data Streams

  • AWS Lambda

  • Amazon Lex

  • Amazon Machine Learning

  • Amazon Mobile Analytics

  • Amazon Pinpoint

  • Amazon Polly

  • Amazon Rekognition

  • Amazon SimpleDB

  • Amazon Simple Email Service (Amazon SES)

  • Amazon Simple Notification Service (Amazon SNS)

  • Amazon Simple Queue Service (Amazon SQS)

  • Amazon Simple Storage Service (Amazon S3)

  • Amazon Sumerian

  • Amazon Transcribe

  • Amazon Translate

さらに、認証されていないユーザーに対して許可されているサービスであっても、認証されていないユーザーにはサービスの一部のアクションが許可されないサービスもあります。次の表に、制限されているアクションのあるサービスを示します。

サービス 認証されていないユーザーに対して許可されるアクセス権限
AWS Key Management Service Encrypt, Decrypt, ReEncrypt , GenerateDataKey
Amazon SageMaker InvokeEndpoint
Amazon Textract DetectDocumentText, AnalyzeDocument
Amazon Sumerian View*

非認証ユーザー用以外の何らかのサービスにアクセスする必要がある場合、基本認証フローを使用する必要があります。NotAuthorizedException を取得しており、非認証ロールポリシーでサービスへのアクセスが有効になっている場合は、おそらくそれが理由です。

アクセスポリシーの例

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

注記

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

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

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

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

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

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

このポリシーでは、us-east-1:12345678-1234-1234-1234-123456790ab を使用して挿入された ${cognito-identity.amazonaws.com:sub} などの 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}/*"] } ] }

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

次のアクセスポリシーは、アイデンティティ ID ごとに DynamoDB の項目へのアクセスを許可する Amazon Cognito 変数を使用して、Amazon 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}"] } } } ] }

例 4: アイデンティティに AWS Lambda 関数呼び出しの実行を許可する

以下のアクセスポリシーは、AWS Lambda 関数を実行する許可をアイデンティティに付与します。

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

例 5: 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" ] } ] }

例 6: 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}/*"] }] }