翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
IAM ロール
ID プールの作成中に、ユーザーが引き受ける IAM ロールを更新するよう求められます。IAM ロールは次のように動作します。ユーザーがアプリにログインすると、Amazon Cognito がそのユーザー用に一時的な AWS 認証情報を生成します。これらの一時的な認証情報は、特定の IAM ロールに関連付けられます。IAM ロールでは、AWS リソースにアクセスするための許可一式を定義できます。
認証されたユーザーと認証されていないユーザー用に、デフォルトの IAM ロールを指定できます。また、ユーザーの ID トークンのクレームに基づいて、各ユーザーのロールを選択するルールを定義できます。詳細については、「ロールベースアクセスコントロールの使用」を参照してください。
Amazon Cognito コンソールは、Amazon Mobile Analytics および Amazon Cognito Sync へのアクセス権を提供する IAM ロールをデフォルトで作成します。または、既存の IAM ロールの使用を選択できます。
IAM ロールを変更して、他のサービスへのアクセスを許可または制限します。これを行うためには、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 リクエストのアイデンティティプールトークンに以下のクレームが含まれている場合のみです。
-
アイデンティティプール ID
aud
のus-west-2:abcdefg-1234-5678-910a-0e8443553f95
クレーム。 -
ユーザーがログインしていて、ゲストユーザーではない場合に追加される
authenticated
のamr
クレーム。
{ "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 に次のものが含まれます。
-
ユーザーのアイデンティティ ID。
-
ユーザーが引き受ける IAM ロールの ARN。
-
インラインセッションポリシーを追加する
policy
パラメータ。 -
値が 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 |
|
Amazon SageMaker |
|
Amazon Textract |
|
Amazon Sumerian |
|
このリスト外で 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}/*"] }] }