「翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。」
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 ロールを利用して、アプリケーションのユーザー用の一時的な認証情報を生成します。アクセス権限へのアクセスは、ロールの信頼関係によって制御されます。詳細情報 ロールの信頼とアクセス権限.
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 開発者ガイドの「IAM を使用した Amazon Kinesis Data 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 ストア内のデータのみへのアクセス権限を 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}/*"] }] }