

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# IAM ロール
<a name="iam-roles"></a>

ID プールの作成中に、ユーザーが引き受ける IAM ロールを更新するよう求められます。IAM ロールは次のように動作します。ユーザーがアプリにログインすると、Amazon Cognito がそのユーザー用に一時的な AWS 認証情報を生成します。これらの一時的な認証情報は、特定の IAM ロールに関連付けられます。IAM ロールでは、 AWS リソースにアクセスするための許可一式を定義できます。

認証されたユーザーと認証されていないユーザー用に、デフォルトの IAM ロールを指定できます。また、ユーザーの ID トークンのクレームに基づいて、各ユーザーのロールを選択するルールを定義できます。詳細については、「[ロールベースアクセスコントロールの使用](role-based-access-control.md)」を参照してください。

Amazon Cognito コンソールは、Amazon Mobile Analytics および Amazon Cognito Sync へのアクセス権を提供する IAM ロールをデフォルトで作成します。または、既存の IAM ロールの使用を選択できます。

IAM ロールを変更して、他のサービスへのアクセスを許可または制限します。これを行うためには、[IAM コンソールにログインします](https://console.aws.amazon.com/iam/home)。次に、**[Roles]** (ロール) を選択し、ロールを選択します。選択されたロールにアタッチされたポリシーが、**[Permissions]** (アクセス許可) タブに表示されます。対応する **[Manage Policy]** (ポリシーの管理) リンクを選択してアクセスポリシーをカスタマイズできます。ポリシーの使用と定義の詳細については、「[IAM ポリシーの概要](https://docs.aws.amazon.com/IAM/latest/UserGuide/PoliciesOverview.html)」を参照してください。

**注記**  
ベストプラクティスとして、*最小権限*の付与の原則に準拠したポリシーを定義します。つまり、ポリシーには、ユーザーがタスクを実行するために必要なアクセス権限のみを含めます。詳細については、*「IAM ユーザーガイド」*の[「Grant Least Privilege」](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege)(最小権限を付与する) を参照してください。  
認証されていない ID は、アプリにログインしていないユーザーが引き受けることに注意してください。通常、認証されていない ID に割り当てるアクセス権限は、認証された ID に割り当てるアクセス権限よりも制限が厳しいものである必要があります。

**Topics**
+ [信頼ポリシーのセットアップ](#trust-policies)
+ [アクセスポリシー](#access-policies)
+ [ロールの信頼とアクセス権限](#role-trust-and-permissions)

## 信頼ポリシーのセットアップ
<a name="trust-policies"></a>

Amazon Cognito は IAM ロールを使用して、アプリケーションのユーザー用の一時的な認証情報を生成します。アクセス権限へのアクセスは、ロールの信頼関係によって制御されます。詳細情報 [ロールの信頼とアクセス権限](#role-trust-and-permissions)。Amazon Cognito は、 AWS STS と ID プール IdPs。

に提示されるトークン AWS STS は、ユーザープール、ソーシャルまたは OIDC プロバイダートークン、または SAML アサーションを独自のトークンに変換する ID プールによって生成されます。アイデンティティプールトークンには、アイデンティティプール ID として `aud` クレームが含まれています。

IAM ロール信頼ポリシーの `Principal` が `cognito-identity.amazonaws.com` のような アイデンティティプールサービスプリンシパルである場合、アイデンティティプールがロールを引き受けることを許可するようにロール信頼ポリシーを作成または変更することはできません。アイデンティティプールのプリンシパルの場合、`Action` 要素には `Condition` が必要であり、これによって、(`cognito-identity.amazonaws.com:aud` などの条件キーで指定したとおり) アイデンティティプールのみが `AssumeRoleWithWebIndentity` を実行するよう要求します。他の条件キーも使用できますが、`aud` は必須です。このタイプの条件なしでロール信頼ポリシーを保存しようとすると、IAM はエラーを返します。

OIDC (ウェブ ID) フェデレーションキーの詳細については、[「OIDC AWS フェデレーションで使用できるキー](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_iam-condition-keys.html#condition-keys-wif)」を参照してください。

Amazon Cognito で使用できる OIDC フェデレーション条件キーは、以下のとおりです。

**`cognito-identity.amazonaws.com:aud`**  
ロールを 1 つ以上のアイデンティティプールからのオペレーションに制限します。Amazon Cognito は、アイデンティティプールトークンの `aud` クレーム内のソース ID プールを示します。

**`cognito-identity.amazonaws.com:amr`**  
ロールを `authenticated` または `unauthenticated` (ゲスト) ユーザーに制限します。Amazon Cognito は、アイデンティティプールトークンの `amr` クレームの認証状態を示します。

**`cognito-identity.amazonaws.com:sub`**  
[UUID](cognito-terms.md#terms-uuid) によってロールを 1 人以上のユーザーに制限します。この UUID は、アイデンティティプール内のユーザーのアイデンティティ ID です。この値は、ユーザーの元の ID プロバイダーの `sub` 値ではありません。Amazon Cognito は、アイデンティティプールトークンの `sub` クレームにこの UUID を示します。

次のロール信頼ポリシーの例では、フェデレーティッドサービスプリンシパルが AWS STS API `cognito-identity.amazonaws.com`を呼び出すことを許可します`AssumeRoleWithWebIdentity`。リクエストが成功するのは、API リクエストのアイデンティティプールトークンに以下のクレームが含まれている場合のみです。

1. アイデンティティプール ID `aud` の `us-west-2:abcdefg-1234-5678-910a-0e8443553f95` クレーム。

1. ユーザーがログインしていて、ゲストユーザーではない場合に追加される `authenticated` の `amr` クレーム。

------
#### [ JSON ]

****  

```
{
    "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 ロールの信頼ポリシー
<a name="trust-policies-classic"></a>

**概要**  
アイデンティティプールは、ターゲットのロール信頼ポリシーに `aud` 条件が含まれている場合にのみ、[基本認証フロー](authentication-flow.md#authentication-flow-basic)でユーザーに代わってロールを引き受けることができます。

基本認証には、拡張認証と同じように、安全でないロール信頼ポリシーに関する制限があります。つまり、サポートされているアイデンティティプールを `aud` 条件で制限できないロール信頼ポリシーを保存できません。この制限は、サービスのリリース時には適用されていませんでした。この要件の適用前は、追加のセキュリティ条件がないロール信頼ポリシーを作成できました。この要件の適用後、 は、 条件で保護されていないロールを引き受けるウェブ ID AWS STS を許可しますが、これらの条件を導入しない限り、それらのロール**を変更することはできません**。

拡張フロー認証では、IAM ロールがアイデンティティプールと同じ AWS アカウント に存在する必要があります。一方、基本認証では、アプリケーションが `AssumeRoleWithWebIdentity` リクエストを作成し、別のアカウントのロールを引き受けることをリクエストできます。ただし、送信先ロールに `aud` 条件を適用しないレガシー信頼ポリシーがある場合、[クロスアカウント](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies-cross-account-resource-access.html)のロール引き受けリクエストは失敗します。

ID プールが ID に対して発行するトークンには、ID プール AWS アカウント の発信元に関する情報が含まれています。[AssumeRoleWithWebIdentity](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithWebIdentity.html) API リクエストで ID プールトークンを提示すると、 は、発信元の ID プールが IAM ロール AWS アカウント と同じ にある AWS STS かどうかを確認します。がリクエストがクロスアカウントである AWS STS と判断した場合、ロール信頼ポリシーに `aud`条件があるかどうかをチェックします。そのような条件がロール信頼ポリシーに存在しない場合、**ロール引き受け呼び出し**は失敗します。リクエストがクロスアカウントでない場合は、この制限を適用 AWS STS しません。ベストプラクティスとして、このタイプの条件をアイデンティティプールロールの信頼ポリシーに常に適用します。

次に示すのは、複数のアイデンティティプールを使用した基本認証において、IAM ロールの*最小*要件を満たす信頼ポリシーの例です。ベストプラクティスとして、`"cognito-identity.amazonaws.com:amr": "authenticated"` 条件でも認証済み ID のみを許可するようにします。

------
#### [ JSON ]

****  

```
{
    "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",
                        "us-west-2:hijklmo-5678-9101-112b-0e4221776g96",
                        "us-west-2:pqrstuv-9101-1121-314c-0e2110887h97"
                    ]
                }
            }
        }
    ]
}
```

------

### その他の信頼ポリシー条件
<a name="trust-policies-examples"></a>

以下の信頼ポリシー条件を使用して、IAM ロールを引き受けることができる送信元アイデンティティプール、ID、プロバイダーを定義できます。

**注記**  
アイデンティティプールが[拡張認証フロー](authentication-flow.md#authentication-flow-enhanced)で引き受ける IAM ロールの信頼ポリシーに、[aws:SourceIp](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceip) 条件キーを実装しないでください。拡張フローはアプリケーションに代わって [AssumeRoleWithWebIdentity](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithWebIdentity.html) リクエストを生成するため、リクエストの送信元 IP がアプリケーションクライアントの IP になることはなく、条件は満たされないためです。ネットワークベースの条件キーは、アイデンティティプールが[基本フロー](authentication-flow.md#authentication-flow-basic)*のみ*を通じて引き受けるロールに対して有効です。基本フローには、拡張フローのサービス側の機能がありません。

**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"
}
```

## アクセスポリシー
<a name="access-policies"></a>

ロールにアタッチするアクセス許可は、そのロールを引き受けるすべてのユーザーに適用されます。ユーザーのアクセスをパーティション化するには、ポリシー条件と変数を使用します。詳細については、「[IAM ポリシーの要素: 変数とタグ](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_variables.html)」を参照してください。`sub` 条件を使用して、アクションをアクセスポリシーの Amazon Cognito アイデンティティ ID に制限できます。このオプションは注意して使用してください。特に、一貫したユーザー ID を持たない認証されていない ID には注意が必要です。Amazon Cognito とのウェブフェデレーションの IAM ポリシー変数の詳細については、*AWS Identity and Access Management 「 ユーザーガイド*」の[「IAM および AWS STS 条件コンテキストキー](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_iam-condition-keys.html#condition-keys-wif)」を参照してください。

セキュリティ保護を向上させるために、Amazon Cognito は `GetCredentialsForIdentity` を使用して、[拡張フロー](https://docs.aws.amazon.com/cognito/latest/developerguide/authentication-flow.html)で認証されていないユーザーを割り当てる認証情報にスコープダウンポリシーを適用します。スコープダウンポリシーは、認証されていないロールに適用する IAM ポリシーに [インラインセッションポリシー](#access-policies-inline-policy) と [AWS マネージドセッションポリシー](#access-policies-managed-policy) を追加します。ロールの IAM ポリシーとセッションポリシーの両方でアクセスを許可する必要があるため、スコープダウンポリシーでは、次のリストに示すサービス以外のサービスへのユーザーアクセスが制限されます。

**注記**  
基本 (クラシック) フローでは、独自の [https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithWebIdentity.html](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithWebIdentity.html) API リクエストを作成し、そのリクエストにこれらの制限を適用できます。セキュリティのベストプラクティスとして、このスコープダウンポリシーを超えるアクセス許可を認証されていないユーザーに割り当てないでください。

また、Amazon Cognito は、認証されたユーザーと認証されていないユーザーが Amazon Cognito ID プールと Amazon Cognito Sync に API リクエストを実行できないようにします。他の は、ウェブ ID からのサービスアクセスを制限する AWS のサービス 場合があります。

拡張フローでリクエストが成功すると、Amazon Cognito はバックグラウンドで `AssumeRoleWithWebIdentity` API リクエストを行います。このリクエストのパラメータとしては、Amazon Cognito に次のものが含まれます。

1. ユーザーのアイデンティティ ID。

1. ユーザーが引き受ける IAM ロールの ARN。

1. *インラインセッションポリシー*を追加する `policy` パラメータ。

1. Amazon CloudWatch で追加のアクセス許可を付与する *AWS マネージドポリシー*を値として持つ `PolicyArns.member.N` パラメータ。

### 認証されていないユーザーがアクセスできるサービス
<a name="access-policies-scope-down-services"></a>

拡張フローを使用すると、Amazon Cognito がユーザーセッションに適用するスコープダウンポリシーにより、次の表に記載されている以外のサービスを使用できなくなります。一部のサービスでは、特定のアクションのみが許可されます。


| Category | サービス | 
| --- | --- | 
| 分析 | Amazon Data Firehose<br />Amazon Managed Service for Apache Flink | 
| アプリケーション統合 | Amazon Simple Queue Service | 
| AR とバーチャルリアリティ | Amazon Sumerian¹ | 
| ビジネスアプリケーション | Amazon Mobile Analytics<br />Amazon Simple Email Service | 
| コンピューティング | AWS Lambda | 
| 暗号化と PKI | AWS Key Management Service 1 | 
| データベース | Amazon DynamoDB<br />Amazon SimpleDB | 
| フロントエンドウェブおよびモバイル | AWS AppSync<br />Amazon Location Service<br />Amazon Simple Notification Service<br />Amazon Pinpoint<br />Amazon Location Service | 
| ゲーム開発 | Amazon GameLift Servers | 
| IoT | AWS IoT | 
| 機械学習 | Amazon CodeWhisperer<br />Amazon Comprehend<br />Amazon Lex<br />Amazon Machine Learning<br />Amazon Personalize<br />Amazon Polly<br />Amazon Rekognition<br />Amazon SageMaker AI¹<br />Amazon Textract¹<br />Amazon Transcribe<br />Amazon Translate | 
| 管理とガバナンス | Amazon CloudWatch<br />Amazon CloudWatch Logs | 
| ネットワーキングとコンテンツ配信 | Amazon API Gateway | 
| セキュリティ、アイデンティティ、コンプライアンス | Amazon Cognito ユーザープール | 
| Storage | Amazon Simple Storage Service | 

1 次の表の AWS のサービス の場合、インラインポリシーはアクションのサブセットを付与します。表には、それぞれで実行可能なアクションが表示されています。


| AWS のサービス | 認証されていない拡張フローユーザーの最大アクセス許可 | 
| --- | --- | 
| AWS Key Management Service | `Encrypt`<br />`Decrypt`<br />`ReEncryptTo`<br />`ReEncryptFrom`<br />`GenerateDataKey`<br />`GenerateDataKeyPair`<br />`GenerateDataKeyPair`<br />`GenerateDataKeyPairWithoutPlaintext`<br />`GenerateDataKeyWithoutPlaintext` | 
| Amazon SageMaker AI | `InvokeEndpoint` | 
| Amazon Textract | `DetectDocumentText`<br />`AnalyzeDocument` | 
| Amazon Sumerian | `View*` | 
| Amazon Location Service | `SearchPlaceIndex*`<br />`GetPlace`<br />`CalculateRoute*`<br />`*Geofence`<br />`*Geofences`<br />`*DevicePosition*` | 

このリスト AWS のサービス 以外の へのアクセスを許可するには、ID プールで**基本 (クラシック) 認証フロー**をアクティブ化します。認証されていないユーザーの IAM ロールに割り当てられたポリシーで許可されている`NotAuthorizedException`エラー AWS のサービス が からユーザーに表示される場合は、そのサービスをユースケースから削除できるかどうかを評価します。できない場合は、基本フローに切り替えてください。

### ゲストユーザー用のインラインセッションポリシー
<a name="access-policies-inline-policy"></a>

Amazon Cognito はまず、IAM 認証情報のリクエストにインラインポリシーを適用します。インラインセッションポリシーでは、ユーザーの有効な権限に、以下のリストにある AWS のサービス 外部へのアクセスが含まれないように制限しています。また、ユーザーの IAM ロールに適用するポリシー AWS のサービス で、これらにアクセス許可を付与する必要があります。ロールを引き受けたセッションにおけるユーザーの有効なアクセス許可は、そのユーザーのロールに割り当てられたポリシーとセッションポリシーが交差したものです。詳細については、AWS Identity and Access Management ユーザーガイドの「[セッションポリシー](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session)」を参照してください。

Amazon Cognito は、デフォルトで有効になっている  AWS リージョン  ユーザーのセッションに次のインラインポリシーを追加します。インラインポリシーおよびその他のセッションポリシーによる正味の効果の概要については、「[認証されていないユーザーがアクセスできるサービス](#access-policies-scope-down-services)」を参照してください。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "cloudwatch:*",
                "logs:*",
                "dynamodb:*",
                "kinesis:*",
                "mobileanalytics:*",
                "s3:*",
                "ses:*",
                "sns:*",
                "sqs:*",
                "lambda:*",
                "machinelearning:*",
                "execute-api:*",
                "iot:*",
                "gamelift:*",
                "cognito-identity:*",
                "cognito-idp:*",
                "lex:*",
                "polly:*",
                "comprehend:*",
                "translate:*",
                "transcribe:*",
                "rekognition:*",
                "mobiletargeting:*",
                "firehose:*",
                "appsync:*",
                "personalize:*",
                "sagemaker:InvokeEndpoint",
                "cognito-sync:*",
                "codewhisperer:*",
                "textract:DetectDocumentText",
                "textract:AnalyzeDocument",
                "sdb:*"
            ],
            "Resource": [
                "*"
            ]
        }
    ]
}
```

------

他のすべてのリージョンの場合、インラインスコープダウンポリシーには、次の `Action` ステートメントを除いて、デフォルトのリージョンにリストされているものがすべて含まれます。

```
                "cognito-sync:*",
                "sumerian:View*",
                "codewhisperer:*",
                "textract:DetectDocumentText",
                "textract:AnalyzeDocument",
                "sdb:*"
```

### ゲストの AWS マネージドセッションポリシー
<a name="access-policies-managed-policy"></a>

また、Amazon Cognito は、認証されていないゲストの拡張フローセッションにセッションポリシーとして AWS 管理ポリシーを適用します。このポリシーは、ポリシー `AmazonCognitoUnAuthedIdentitiesSessionPolicy` を使用して、認証されていないユーザーのアクセス許可の範囲を制限します。

また、認証されていない IAM ロールに適用するポリシーでこのアクセス許可を付与する必要があります。ロールを引き受けたセッションにおけるユーザーの有効なアクセス許可は、そのユーザーのロールに割り当てられた IAM ポリシーとセッションポリシーが交差したものです。詳細については、*AWS Identity and Access Management ユーザーガイド*の「[セッションポリシー](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session)」を参照してください。

この AWS 管理ポリシーおよびその他のセッションポリシーの正味効果の概要については、「」を参照してください[認証されていないユーザーがアクセスできるサービス](#access-policies-scope-down-services)。

`AmazonCognitoUnAuthedIdentitiesSessionPolicy` 管理ポリシーには以下のアクセス許可が記載されています。

------
#### [ JSON ]

****  

```
{
    "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*",
            "kms:Encrypt",
            "kms:Decrypt",
            "kms:ReEncryptTo",
            "kms:ReEncryptFrom",
            "kms:GenerateDataKey",
            "kms:GenerateDataKeyPair",
            "kms:GenerateDataKeyPairWithoutPlaintext",
            "kms:GenerateDataKeyWithoutPlaintext"
        ],
        "Resource": "*"
    }]
}
```

------

### アクセスポリシーの例
<a name="access-policy-examples"></a>

このセクションでは、特定のオペレーションの実行に必要な最小限のアクセス許可を付与する Amazon Cognito アクセスポリシーの例を示します。可能な場合は、ポリシー変数を使用して特定のアイデンティティ ID のアクセス権限をさらに制限できます。たとえば、${cognito-identity.amazonaws.com:sub} を使用します。詳細については、*AWS モバイルブログ*で「[Understanding Amazon Cognito Authentication Part 3: Roles and Policies](https://aws.amazon.com/blogs/mobile/understanding-amazon-cognito-authentication-part-3-roles-and-policies/)」を参照してください。

**注記**  
セキュリティのベストプラクティスとして、ポリシーには、ユーザーがタスクを実行するために必要なアクセス権限のみを含めてください。つまり、可能であれば必ずオブジェクトの個々の ID ごとにアクセスを設定するようにしてください。

**ID に Amazon S3 内の単一のオブジェクトへの読み取りアクセスを許可する**  
次のアクセスポリシーは、特定の S3 バケットから 1 つのオブジェクトを取得するための読み取りアクセス権限を ID に付与します。

------
#### [ JSON ]

****  

```
{
  "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` の他のオブジェクトへのアクセスは許可されません。

------
#### [ JSON ]

****  

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

------

同様のアクセスモデルは、[Amazon S3 Access Grants](https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-grants.html) で実現されます。

**ID に Amazon DynamoDB への詳細に設定されたアクセスを割り当てる**  
次のアクセスポリシーは、Amazon Cognito 環境変数を使用して、Amazon DynamoDB リソースへの詳細に設定されたアクセスコントロールを行います。これらの変数は、アイデンティティ ID によって DynamoDB のアイテムへのアクセス権限を付与します。詳細については、*Amazon DynamoDB デベロッパーガイド*の「[詳細に設定されたアクセスコントロールのための IAM ポリシー条件の使用](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/specifying-conditions.html)」を参照してください。

------
#### [ JSON ]

****  

```
{
  "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 に付与します。

------
#### [ JSON ]

****  

```
{
    "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 リソースへのアクセスを制御する](https://docs.aws.amazon.com/streams/latest/dev/controlling-access.html)」を参照してください。

------
#### [ JSON ]

****  

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

------
#### [ JSON ]

****  

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

------

## ロールの信頼とアクセス権限
<a name="role-trust-and-permissions"></a>

これらのロールが異なる点は、それらの信頼関係です。未認証ロールの信頼ポリシーの例を次に示します。

------
#### [ JSON ]

****  

```
{
  "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 プールと認証タイプに適切なロールがあることを確認します。