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 ポリシーの概要」を参照してください。Amazon Cognito が動作するためには、IAM ポリシーでは次の例のように、少なくとも各 ID 用の Amazon Cognito ストアへのアクセスを有効にする必要があります。

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

次のポリシーは、Amazon Cognito Sync ストア全体へのアクセス権を提供します。

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

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

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 によって提供された認証情報にスコープを絞り込んだポリシーを提供し、非認証ユーザー用以外のサービスへのアクセスを防止します。

  • CloudWatch

  • Amazon Cognito ID

  • Amazon Cognito Sync

  • DynamoDB

  • Amazon Kinesis Data Firehose

  • GameLift

  • AWS IoT

  • Amazon Kinesis Data Streams

  • AWS KMS

  • AWS Lambda

  • Amazon Lex

  • Amazon Machine Learning

  • Amazon Mobile Analytics

  • Amazon Polly

  • Amazon Rekognition

  • Amazon S3

  • Amazon SimpleDB

  • Amazon SES

  • Amazon SNS

  • Amazon SQS

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

S3 プレフィックス

S3 バケットでユーザーに特定のプレフィックス「folder」を与えることができます。そのためには、このプレフィックスを ${cognito-identity.amazonaws.com:sub} 変数にマッピングします。

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

Amazon DynamoDB へのファイングレインアクセス

Amazon Cognito 変数を使用して、Amazon DynamoDB リソースへのファイングレインアクセス制御を提供できます。アイデンティティ ID によって DynamoDB のアイテムへのアクセス権限を付与します。

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