

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

# アクセスコントロールへの属性の使用
<a name="attributes-for-access-control"></a>

アクセスコントロールの属性は、アクセスコントロール (ABAC) の Amazon Cognito アイデンティティプール実装です。ユーザー属性に基づく Amazon Cognito の ID プール経由で AWS リソースへのアクセスを制御するには、IAM ポリシーを使用することができます。これらの属性は、ソーシャル ID プロバイダーおよび企業 ID プロバイダーから収集できます。プロバイダーのアクセストークンと ID トークン、または SAML アサーション内の属性を、IAM 許可ポリシーで参照できるタグにマップできます。

Amazon Cognito ID プールでは、デフォルトのマッピングを選択する、または独自のカスタムマッピングを作成することが可能です。デフォルトのマッピングでは、ユーザー属性の固定セットに基づいた IAM ポリシーを記述できます。カスタムマッピングでは、IAM 許可ポリシーで参照されるユーザー属性のカスタムセットを選択できます。Amazon Cognito コンソールの [**Attribute names**] (属性名) は、IAM 許可ポリシーで参照される [**Tag key for principal**] (プリンシパルのタグキー) にマップされます。

例えば、無料と有料のメンバーシップがあるメディアストリーミングサービスを所有しているとしましょう。メディアファイルを Amazon S3 に保存し、無料タグまたはプレミアムタグでそれらをタグ付けします。アクセスコントロールの属性を使用して、ユーザーのプロファイルの一部であるユーザーメンバーシップレベルに基づいて、無料コンテンツと有料コンテンツへのアクセスを許可できます。メンバーシップ属性は、IAM 許可ポリシーに渡されるプリンシパルのタグキーにマップできます。そうすることで、単一の許可ポリシーを作成し、メンバーシップレベルの値とコンテンツファイルのタグに基づいて、プレミアムコンテンツへのアクセスを条件的に許可することができます。

**Topics**
+ [Amazon Cognito の ID プールを用いたアクセスコントロールへの属性の使用](#using-afac-with-cognito-identity-pools)
+ [アクセスコントロールポリシーへの属性の使用例](#using-attributes-for-access-control-policy-example)
+ [アクセスコントロールの属性をオフにする (コンソール)](#disable-afac)
+ [デフォルトのプロバイダーマッピング](#provider-mappings)

属性を使用したアクセスの制御には、いくつかのメリットがあります。
+ アクセスコントロールに属性を使用すると、許可の管理がより効率的になります。異なるジョブ機能のために複数のポリシーを作成するのではなく、ユーザー属性を使用する基本的な許可ポリシーを作成できます。
+ アプリケーションのリソースやユーザーを追加または削除するたびにポリシーを更新する必要がなくなる。許可ポリシーは、一致するユーザー属性を持つユーザーのみにアクセス権を付与します。例えば、ユーザーの役職に基づいて、特定の S3 バケットへのアクセスを制御する必要がある場合があります。この場合、定義された役職のユーザーのみにこれらのファイルへのアクセスを許可する許可ポリシーを作成できます。詳細については、「[IAM チュートリアル: ABAC で SAML セッションタグを使用する](https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_abac-saml.html)」を参照してください。
+ 属性の値に基づいて許可を許可または拒否するポリシーに、プリンシパルタグとしてこれらの属性を渡すことができる。

## Amazon Cognito の ID プールを用いたアクセスコントロールへの属性の使用
<a name="using-afac-with-cognito-identity-pools"></a>

アクセスコントロールに属性を使用する前に、以下の前提条件を満たしていることを確認します。
+ [AWS アカウント](https://docs.aws.amazon.com/cognito/latest/developerguide/getting-started-with-identity-pools.html#aws-sign-up-identity-pools)
+ [ユーザープール](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pool-as-user-directory.html)
+ [ID プール](https://docs.aws.amazon.com/cognito/latest/developerguide/getting-started-with-identity-pools.html#create-identity-pools)
+ [SDKE の設定](getting-started-with-identity-pools.md#install-the-mobile-or-javascript-sdk)
+ [統合された ID プロバイダー](https://docs.aws.amazon.com/cognito/latest/developerguide/getting-started-with-identity-pools.html##integrate-the-identity-providers)
+ [認証情報](https://docs.aws.amazon.com/cognito/latest/developerguide/getting-started-with-identity-pools.html#get-credentials)

アクセスコントロールに属性を使用するには、データソースとして設定した**クレーム**によって、選択した**タグキー**の値が設定されます。Amazon Cognito はタグキーと値をユーザーのセッションに適用します。IAM ポリシーでは、`${aws:PrincipalTag/tagkey}` 条件からユーザーのアクセスを評価できます。IAM は、ユーザーのタグの値をポリシーに照らして評価します。

ユーザーに認証情報を渡したい IAM ロールを準備する必要があります。これらのロールの信頼ポリシーで、Amazon Cognito がユーザーのロールを引き継ぐことを許可されている必要があります。アクセスコントロール用の属性については、Amazon Cognito がユーザーの一時セッションにプリンシパルタグを適用することも許可しなければなりません。アクション[AssumeRoleWithWebIdentity](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithWebIdentity.html) を使って、ロールを引き受ける権限を付与します。[権限のみのアクション](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awssecuritytokenservice.html#awssecuritytokenservice-actions-as-permissions) `sts:TagSession` を使って、ユーザーのセッションにタグを付ける権限を付与します。詳細については、*「AWS Identity and Access Management  ユーザーガイド」*の[「 AWS Security Token Service でのタグ付けの規則」](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_session-tags.html)を参照してください。たとえば、`sts:AssumeRoleWithWebIdentity` と`sts:TagSession` 権限をAmazon Cognito サービスプリンシパル `cognito-identity.amazonaws.com` に付与する信頼ポリシーの例については、「[アクセスコントロールポリシーへの属性の使用例](#using-attributes-for-access-control-policy-example)」を参照してください。

**コンソールでアクセスコントロールの属性を無効にするには**

1. [Amazon Cognito コンソール](https://console.aws.amazon.com/cognito/home)にサインインし、**アイデンティティプール**を選択します。アイデンティティプールを選択します。

1. **[ユーザーアクセス]** タブを選択します。

1. **ID プロバイダー**を見つけます。編集する ID プロバイダーを選択します。新しい IdP を追加する場合は、**[ID プロバイダーを追加]** を選択します。

1. Amazon Cognito がこのプロバイダーで認証されたユーザーに認証情報を発行するときに割り当てるプリンシパルタグを変更するには、**[アクセスコントロールの属性]** で **[編集]** を選択します。

   1. プリンシパルタグを適用しない場合は、**[非アクティブ]** を選択します。

   1. `sub` および `aud` クレームに基づいてプリンシパルタグを適用するには、**[デフォルトマッピングを使用]** を選択します。

   1. プリンシパルタグへの属性の独自のカスタムスキーマを作成するには、**[カスタムマッピングを使用]** を選択します。次に、タグに表示したい各**クレーム**から取得する**タグキー**を入力します。

1. **[変更を保存]** を選択します。

## アクセスコントロールポリシーへの属性の使用例
<a name="using-attributes-for-access-control-policy-example"></a>

ある企業の法務部門の従業員が、その部門に属しており、セキュリティレベルで分類されているバケット内のすべてのファイルをリストする必要があるというシナリオを考えてみましょう。この従業員が ID プロバイダーから取得するトークンには、以下のクレームが含まれているとします。

**クレーム**

```
            { .
              .
            "sub" : "57e7b692-4f66-480d-98b8-45a6729b4c88",
            "department" : "legal",
            "clearance" : "confidential",
             .
             .
            }
```

これらの属性は、タグにマップして、IAM 許可ポリシーでプリンシパルタグとして参照できます。これで、ID プロバイダー側でユーザープロファイルを変更することによって、アクセスを管理できるようになります。または、ポリシー自体を変更せずに、名前またはタグを使用することによって、リソース側の属性を変更することもできます。

以下の許可ポリシーは、以下の 2 つを行います。
+ ユーザーの部門名に一致するプレフィックスで終わるすべての S3 バケットへのリストアクセスを許可します。
+ ファイルのクリアランスタグがユーザーのクリアランス属性と一致している限り、これらのバケット内のファイルに対する読み取りアクセスを許可する。

**アクセス許可ポリシー**

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

****  

```
   {
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "s3:List*",
            "Resource": "arn:aws:s3:::*-${aws:PrincipalTag/department}"
        },
        {
            "Effect": "Allow",
            "Action": "s3:GetObject*",
            "Resource": "arn:aws:s3:::*-${aws:PrincipalTag/department}/*",
            "Condition": {
                "StringEquals": {
                    "s3:ExistingObjectTag/clearance": "${aws:PrincipalTag/clearance}"
                }
            }
        }
    ]
}
```

------

信頼ポリシーは、誰がこのロールを引き受けられるのかを決定します。信頼関係ポリシーは、アクセスを許可するための `sts:AssumeRoleWithWebIdentity` と `sts:TagSession` の使用を可能にします。これは、ポリシーをユーザーが作成したアイデンティティプールに制限する条件を追加し、それが認証されたロール用であることを確実にします。

**信頼ポリシー**

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Federated": "cognito-identity.amazonaws.com"
      },
      "Action": [
        "sts:AssumeRoleWithWebIdentity",
        "sts:TagSession"
      ],
      "Condition": {
        "StringEquals": {
          "cognito-identity.amazonaws.com:aud": "IDENTITY-POOL-ID"
        },
        "ForAnyValue:StringLike": {
          "cognito-identity.amazonaws.com:amr": "authenticated"
        }
      }
    }
  ]
}
```

------

## アクセスコントロールの属性をオフにする (コンソール)
<a name="disable-afac"></a>

アクセスコントロールの属性を非アクティブにするには、以下の手順に従います。

**コンソールでアクセスコントロールの属性を非アクティブにするには**

1. [Amazon Cognito コンソール](https://console.aws.amazon.com/cognito/home)にサインインし、**アイデンティティプール**を選択します。アイデンティティプールを選択します。

1. **[ユーザーアクセス]** タブを選択します。

1. **ID プロバイダー**を見つけます。編集する ID プロバイダーを選択します。

1. **[アクセスコントロールの属性]** で、**[編集]** を選択します。

1. プリンシパルタグを適用しない場合は、**[非アクティブ]** を選択します。

1. **[変更を保存]** を選択します。

## デフォルトのプロバイダーマッピング
<a name="provider-mappings"></a>

以下の表には、Amazon Cognito がサポートする認証プロバイダーのデフォルトマッピング情報が記載されています。


| プロバイダー | トークンタイプ | プリンシパルタグの値 | 例 | 
| --- | --- | --- | --- | 
|  Amazon Cognito ユーザープール  |  ID トークン  |  aud (クライアント ID) および sub (ユーザー ID)  |  "6jk8ltokc7ac9es6jrtg9q572f"、"57e7b692-4f66-480d-98b8-45a6729b4c88"  | 
|  Facebook  |  アクセストークン  |  aud(app\$1id)、sub(user\$1id)  |  「492844718097981」、「112177216992379」  | 
|  Google  |  ID トークン  |  aud (クライアント ID) および sub (ユーザー ID)  |  「620493171733-eebk7c0hcp5lj3e1tlqp1gntt3k0rncv.apps.googleusercontent.com」、「109220063452404746097」  | 
|  SAML  |  アサーション  |  「http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier」、「http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name」   |  "auth0\$15e28d196f8f55a0eaaa95de3"、"user123@gmail.com"  | 
|  Apple  |  ID トークン  |  aud (クライアント ID) および sub (ユーザー ID)  |  「com.amazonaws.ec2-54-80-172-243.compute-1.client」、「001968.a6ca34e9c1e742458a26cf8005854be9.0733」  | 
|  Amazon  |  アクセストークン  |  aud (Amzn Dev Ac のクライアント ID)、user\$1id (ユーザー ID)  |  「amzn1.application-oa2-client.9d70d9382d3446108aee3dd763a0fa6」、「amzn1.account.Aghnifjqmfsbg3g6xcPVB35orqaa」  | 
|  標準 OIDC プロバイダー  |  ID トークンとアクセストークン  |  aud (client\$1id として)、sub (ユーザー ID として)  |  「620493171733-eebk7c0hcp5lj3e1tlqp1gntt3k0rncv.apps.googleusercontent.com」、「109220063452404746097」  | 
|  Twitter  |  アクセストークン  |  aud (アプリID; アプリシークレット)、サブ (ユーザー ID)  |  "DfwifTtKEX1FiIBRnOTlR0CFK;Xgj5xb8xIrIVCPjXgLIdkW7fXmwcJJrFvnoK9gwZkLexo1y5z1"、"1269003884292222976"  | 
|  DevAuth  |  マップ  |  該当なし  |  「tag1」、「tag2」  | 

**注記**  
デフォルト属性マッピングオプションは、[**Tag Key for Principal**] (プリンシパルのタグキー) と [**Attribute**] (属性) の名前に自動で入力されます。デフォルトマッピングを変更することはできません。