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 Comprehend

GameLift

Amazon Lex

Amazon Polly

Amazon SimpleDB

Amazon Transcribe

CloudWatch

DynamoDB

AWS IoT

Amazon Machine Learning

Amazon Rekognition

Amazon SES

Amazon Translate

Amazon Cognito ID

Amazon Kinesis Data Firehose

AWS KMS Amazon Mobile Analytics

Amazon Sumerian

Amazon SNS

Amazon Cognito Sync

Amazon Kinesis Data Streams

AWS Lambda

Amazon Pinpoint

Amazon S3

Amazon SQS

非認証ユーザー用以外の何らかのサービスにアクセスする必要がある場合、基本認証フローを使用する必要があります。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」にアクセスする読み取りおよび書き込みアクセス権限を付与します。

このポリシーでは、${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}/*"] } ] }

例 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: ID に AWS Lambda 関数呼び出しの実行を許可する

次のアクセスポリシーは、AWS Lambda 関数を実行するアクセス権限を ID に付与します。

{ "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 開発者ガイド』の「Controlling Access to Amazon Kinesis Data Streams Resources Using IAM」を参照してください。

{ "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 ストア内のデータのみへのアクセス権限を ID に付与します。

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