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 を作成することができます。

  • Amazon API Gateway

  • AWS AppSync

  • Amazon CloudWatch

  • Amazon CloudWatch Logs

  • Amazon Cognito ID

  • Amazon Cognito Sync

  • Amazon Cognito ユーザープール

  • 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 Location Service

  • Amazon Machine Learning

  • Amazon Mobile Analytics

  • Amazon Personalize

  • Amazon Pinpoint

  • Amazon Polly

  • Amazon Rekognition

  • Amazon SageMaker

  • 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 Textract

  • 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 に Amazon 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 に 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}/*"] } ] }

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

次のアクセスポリシーは、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}"] } } } ] }

例 4: Lambda 関数を呼び出すためのアクセス権限を ID に与えます。

次のアクセスポリシーは、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 デベロッパーガイドの「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}/*"] }] }