翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
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「 ユーザーガイド」の「最小権限を付与する」を参照してください。
認証されていない ID は、アプリにログインしていないユーザーが引き受けることに注意してください。通常、認証されていない ID に割り当てるアクセス権限は、認証された ID に割り当てるアクセス権限よりも制限が厳しいものである必要があります。
信頼ポリシーのセットアップ
Amazon Cognito はIAMロールを使用して、アプリケーションのユーザーの一時的な認証情報を生成します。アクセス権限へのアクセスは、ロールの信頼関係によって制御されます。詳細情報 ロールの信頼とアクセス権限。
に提示されるトークン AWS STS は、ユーザープール、ソーシャルトークン、OIDCプロバイダートークン、またはSAMLアサーションを独自のトークンに変換する ID プールによって生成されます。アイデンティティプールトークンには、アイデンティティプール ID として aud
クレームが含まれています。
次のロール信頼ポリシーの例では、フェデレーティッドサービスプリンシパルが AWS STS API cognito-identity.amazonaws.com
を呼び出すことを許可しますAssumeRoleWithWebIdentity
。リクエストは、APIリクエスト内の ID プールトークンに次のクレームがある場合にのみ成功します。
-
アイデンティティプール 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" } } } ] }
基本 (クラシック) 認証のIAMロールの信頼ポリシー
ID プールで使用するロールの信頼ポリシーを制限する条件を少なくとも 1 つ適用する必要があります。ID プールのロール信頼ポリシーを作成または更新するときに、ソース ID を制限する条件キーを少なくとも 1 つ使用せずに変更を保存しようとすると、 はエラーIAMを返します。ID プールからこのタイプの条件がないIAMロールへのクロスアカウントAssumeRoleWithWebIdentityオペレーションは許可 AWS STS しません。
このトピックには、ID プールのソース ID を制限するいくつかの条件が含まれています。完全なリストについては、AWS 「ウェブ ID フェデレーションで使用できるキー」を参照してください。
ID プールによる基本またはクラシックの認証では、適切な信頼ポリシー AWS STS がある場合、 で任意のIAMロールを引き受けることができます。IAM Amazon Cognito ID プールの ロールは、サービスプリンシパルを信頼cognito-identity.amazonaws.com
してロールを引き受けます。この設定では、リソースへの意図しないアクセスからIAMロールを保護するには不十分です。このタイプのロールは、ロール信頼ポリシーに追加の条件を適用する必要があります。ID プールのロールを作成または変更するには、次のいずれかの条件が必要です。
cognito-identity.amazonaws.com:aud
-
ロールを 1 つ以上の ID プールからのオペレーションに制限します。Amazon Cognito は、ID プールトークンの
aud
クレーム内のソース ID プールを示します。 cognito-identity.amazonaws.com:amr
-
ロールを
authenticated
またはunauthenticated
(ゲスト) ユーザーに制限します。Amazon Cognito は、アイデンティティプールトークンのamr
クレームの認証状態を示します。 cognito-identity.amazonaws.com:sub
-
によってロールを 1 人以上のユーザーに制限しますUUID。これは、ID プール内のユーザーの ID UUIDです。この値は、ユーザーの元の ID プロバイダー
sub
の値ではありません。Amazon Cognito は、アイデンティティプールトークンUUIDのsub
クレームでこれを示します。
拡張フロー認証では、IAMロールが ID プールと同じ AWS アカウント にある必要がありますが、基本認証ではそうではありません。
クロスアカウントIAMロールを引き受ける Amazon Cognito ID プールには、追加の考慮事項が適用されます。これらのロールの信頼ポリシーは、cognito-identity.amazonaws.com
サービスプリンシパルを受け入れ、特定のcognito-identity.amazonaws.com:aud
条件を含める必要があります。 AWS リソースへの意図しないアクセスを防ぐため、aud
条件キーは、条件値の ID プールからユーザーにロールを制限します。
ID に対して ID プールが発行するトークンには、ID プール AWS アカウント の発信元に関する情報が含まれています。AssumeRoleWithWebIdentity API リクエストで ID プールトークンを提示すると、 AWS STS は、発信元の ID プールがIAMロール AWS アカウント と同じ にあるかどうかを確認します。がリクエストがクロスアカウントである AWS STS と判断した場合、ロール信頼ポリシーに aud
条件があるかどうかをチェックします。ロール信頼ポリシーにこのような条件が存在しない場合、 assume-role 呼び出しは失敗します。リクエストがクロスアカウントでない場合は、この制限を適用 AWS STS しません。ベストプラクティスとして、常にこのタイプの条件を ID プールロールの信頼ポリシーに適用します。
追加の信頼ポリシー条件
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
条件を使用して、アクセスポリシーIDs内のアクションを 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リクエストを行うことを防ぎます。他の は、ウェブ ID からのサービスアクセスを制限する AWS のサービス 場合があります。
拡張フローでリクエストが成功すると、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 Service 1 |
データベース |
Amazon DynamoDB Amazon SimpleDB |
フロントエンドウェブおよびモバイル |
AWS AppSync Amazon Location Service Amazon Simple Notification Service Amazon Pinpoint Amazon Location Service |
ゲーム開発 |
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 ログ |
ネットワーキングとコンテンツ配信 |
Amazon API Gateway |
セキュリティ、アイデンティティ、コンプライアンス |
Amazon Cognito ユーザープール |
ストレージ |
Amazon Simple Storage Service |
1 次の表 AWS のサービス の の場合、インラインポリシーはアクションのサブセットを付与します。表には、それぞれで実行可能なアクションが表示されています。
AWS のサービス | 認証されていない拡張フローユーザーの最大アクセス許可 |
---|---|
AWS Key Management Service |
|
Amazon SageMaker |
|
Amazon Textract |
|
Amazon Sumerian |
|
Amazon Location Service |
|
このリスト AWS のサービス 以外の へのアクセスを許可するには、ID プールで基本 (クラシック) 認証フローを有効にします。認証されていないユーザーのIAMロールに割り当てられたポリシーで許可されているNotAuthorizedException
エラー AWS のサービス が からユーザーに表示される場合は、そのサービスをユースケースから削除できるかどうかを評価します。できない場合は、基本フローに切り替えてください。
ゲストユーザーのインラインセッションポリシー
Amazon Cognito はまずIAM、認証情報のリクエストにインラインポリシーを適用します。インラインセッションポリシーでは、ユーザーの有効な権限に、以下のリストにある 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ロールにアタッチするポリシーでも付与する必要があります。引き受けロールセッションに対するユーザーの有効なアクセス許可は、ロールに割り当てられたIAMポリシーとセッションポリシーの交差点です。詳細については、AWS Identity and Access Management ユーザーガイドの「セッションポリシー」を参照してください。
この AWS マネージドポリシーおよびその他のセッションポリシーの正味効果の概要については、「」を参照してください認証されていないユーザーがアクセスできるサービス。
AmazonCognitoUnAuthedIdentitiesSessionPolicy
管理ポリシーには以下のアクセス許可が記載されています。
{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "rum:PutRumEvents", "polly:*", "comprehend:*", "translate:*", "transcribe:*", "rekognition:*", "mobiletargeting:*", "firehose:*", "personalize:*", "sagemaker:InvokeEndpoint", "geo:GetMap*", "geo:SearchPlaceIndex*", "geo:GetPlace", "geo:CalculateRoute*", "geo:*Geofence", "geo:*Geofences", "geo:*DevicePosition*" ], "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:::
amzn-s3-demo-bucket
/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:::amzn-s3-demo-bucket/us-east-1:12345678-1234-1234-1234-123456790ab
に配置およびリストできます。ただし、この ID には arn:aws:s3:::amzn-s3-demo-bucket
の他のオブジェクトへのアクセスは許可されません。
{ "Version": "2012-10-17", "Statement": [ { "Action": ["s3:ListBucket"], "Effect": "Allow", "Resource": ["arn:aws:s3:::
amzn-s3-demo-bucket
"], "Condition": {"StringLike": {"s3:prefix": ["${cognito-identity.amazonaws.com:sub}/*"]}} }, { "Action": [ "s3:GetObject", "s3:PutObject" ], "Effect": "Allow", "Resource": ["arn:aws:s3:::amzn-s3-demo-bucket
/${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 デベロッパーガイド」の「 を使用した Amazon Kinesis Data Streams リソースへのアクセスの制御IAM」を参照してください。 Amazon Kinesis
{ "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}/*"] }] }
ロールの信頼とアクセス権限
これらのロールが異なる点は、それらの信頼関係です。未認証ロールの信頼ポリシーの例を次に示します。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Federated": "cognito-identity.amazonaws.com" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "cognito-identity.amazonaws.com:aud": "us-east-1:12345678-corner-cafe-123456790ab" }, "ForAnyValue:StringLike": { "cognito-identity.amazonaws.com:amr": "unauthenticated" } } } ] }
このポリシーは、cognito-identity.amazonaws.com
(OpenID Connect トークンの発行者) のフェデレーティッドユーザーに、このロールを引き受ける許可を与えます。さらに、ポリシーでは、ID プールに一致させるためにトークンの aud
が制限されます (この場合は ID プール ID)。最後に、ポリシーは、Amazon Cognito GetOpenIdToken
APIオペレーションによって発行されたトークンの複数値amr
クレームの配列メンバーの 1 つに値 があることを指定しますunauthenticated
。
Amazon Cognito がトークンを作成すると、トークンの amr
を unauthenticated
またはauthenticated
のいずれかに設定します。amr
が authenticated
の場合、トークンには、認証中に使用されるすべてのプロバイダーが含まれます。これにより、amr
条件を次のように変更するだけで、Facebook 経由でログインしたユーザーのみを信頼するロールを作成できます。
"ForAnyValue:StringLike": { "cognito-identity.amazonaws.com:amr": "graph.facebook.com" }
ロールで信頼関係を変更するときや、ID プール間でロールの使用を試みるときは注意が必要です。ID プールを信頼するようにロールを正しく設定しない場合、次のようなSTS結果からの例外です。
AccessDenied -- Not authorized to perform sts:AssumeRoleWithWebIdentity
このメッセージが表示された場合は、ID プールと認証タイプに適切なロールがあることを確認します。