

# Amazon CloudFront のアイデンティティベースのポリシー例
<a name="security_iam_id-based-policy-examples"></a>

デフォルトでは、ユーザーおよびロールには、CloudFront リソースを作成または変更するアクセス許可がありません。IAM 管理者は、リソースで必要なアクションを実行するための権限をユーザーに付与する IAM ポリシーを作成できます。

これらのサンプルの JSON ポリシードキュメントを使用して IAM アイデンティティベースのポリシーを作成する方法については、「*IAM ユーザーガイド*」の「[IAM ポリシーを作成する (コンソール)](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create-console.html)」を参照してください。

CloudFront が定義するアクションとリソースタイプ (リソースタイプごとの ARN の形式を含む) の詳細については、「サービス認証リファレンス」の「[Actions, resources, and condition keys for Amazon CloudFront](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazoncloudfront.html)」を参照してください。**

**Topics**
+ [ポリシーに関するベストプラクティス](#security_iam_service-with-iam-policy-best-practices)
+ [ユーザーが自分の権限を表示できるようにする](#security_iam_id-based-policy-examples-view-own-permissions)
+ [プログラムで CloudFront にアクセスするための許可](#security_iam_id-based-policy-examples-programmatic-access-all)
+ [CloudFront コンソールの使用に必要なアクセス許可](#security_iam_id-based-policy-examples-console-required-permissions)
+ [カスタマーマネージドポリシーの例](#security_iam_id-based-policy-examples-sdk-cli)

## ポリシーに関するベストプラクティス
<a name="security_iam_service-with-iam-policy-best-practices"></a>

アイデンティティベースのポリシーは、アカウント内で、CloudFront リソースを作成、アクセス、または削除できるかどうかを決定します。これらのアクションでは、AWS アカウント に費用が発生する場合があります。アイデンティティベースポリシーを作成したり編集したりする際には、以下のガイドラインと推奨事項に従ってください:
+ **AWS マネージドポリシーの使用を開始し、最小特権のアクセス許可に移行する** – ユーザーとワークロードへのアクセス許可の付与を開始するには、多くの一般的なユースケースのためにアクセス許可を付与する *AWS マネージドポリシー*を使用します。これらは AWS アカウントで使用できます。ユースケースに固有の AWS カスタマー管理ポリシーを定義して、アクセス許可を絞り込むことをお勧めします。詳細については、*IAM ユーザーガイド* の [AWS マネージドポリシー](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#aws-managed-policies) または [ジョブ機能の AWS マネージドポリシー](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_job-functions.html) を参照してください。
+ **最小特権を適用する** – IAM ポリシーでアクセス許可を設定する場合は、タスクの実行に必要な許可のみを付与します。これを行うには、特定の条件下で特定のリソースに対して実行できるアクションを定義します。これは、*最小特権アクセス許可*とも呼ばれています。IAM を使用して許可を適用する方法の詳細については、*IAM ユーザーガイド* の [IAM でのポリシーとアクセス許可](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html) を参照してください。
+ **IAM ポリシーで条件を使用してアクセスをさらに制限する** - ポリシーに条件を追加して、アクションやリソースへのアクセスを制限できます。たとえば、ポリシー条件を記述して、すべてのリクエストを SSL を使用して送信するように指定できます。また、CloudFormation などの特定の AWS のサービス を介して使用する場合、条件を使用してサービスアクションへのアクセスを許可することもできます。詳細については、*IAM ユーザーガイド* の [IAM JSON ポリシー要素:条件](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition.html) を参照してください。
+ **IAM アクセスアナライザー を使用して IAM ポリシーを検証し、安全で機能的な権限を確保する** - IAM アクセスアナライザー は、新規および既存のポリシーを検証して、ポリシーが IAM ポリシー言語 (JSON) および IAM のベストプラクティスに準拠するようにします。IAM アクセスアナライザーは 100 を超えるポリシーチェックと実用的な推奨事項を提供し、安全で機能的なポリシーの作成をサポートします。詳細については、*IAM ユーザーガイド* の [IAM Access Analyzer でポリシーを検証する](https://docs.aws.amazon.com/IAM/latest/UserGuide/access-analyzer-policy-validation.html) を参照してください。
+ **多要素認証 (MFA) を要求する** – AWS アカウントで IAM ユーザーまたはルートユーザーを要求するシナリオがある場合は、セキュリティを強化するために MFA をオンにします。API オペレーションが呼び出されるときに MFA を必須にするには、ポリシーに MFA 条件を追加します。詳細については、*IAM ユーザーガイド* の [MFA を使用した安全な API アクセス](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_mfa_configure-api-require.html) を参照してください。

IAM でのベストプラクティスの詳細については、「*IAM ユーザーガイド*」の「[IAM でのセキュリティベストプラクティス](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)」を参照してください。

## ユーザーが自分の権限を表示できるようにする
<a name="security_iam_id-based-policy-examples-view-own-permissions"></a>

この例では、ユーザーアイデンティティにアタッチされたインラインおよびマネージドポリシーの表示を IAM ユーザーに許可するポリシーの作成方法を示します。このポリシーには、コンソールで、または AWS CLI か AWS API を使用してプログラム的に、このアクションを完了するアクセス許可が含まれています。

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "ViewOwnUserInfo",
            "Effect": "Allow",
            "Action": [
                "iam:GetUserPolicy",
                "iam:ListGroupsForUser",
                "iam:ListAttachedUserPolicies",
                "iam:ListUserPolicies",
                "iam:GetUser"
            ],
            "Resource": ["arn:aws:iam::*:user/${aws:username}"]
        },
        {
            "Sid": "NavigateInConsole",
            "Effect": "Allow",
            "Action": [
                "iam:GetGroupPolicy",
                "iam:GetPolicyVersion",
                "iam:GetPolicy",
                "iam:ListAttachedGroupPolicies",
                "iam:ListGroupPolicies",
                "iam:ListPolicyVersions",
                "iam:ListPolicies",
                "iam:ListUsers"
            ],
            "Resource": "*"
        }
    ]
}
```

## プログラムで CloudFront にアクセスするための許可
<a name="security_iam_id-based-policy-examples-programmatic-access-all"></a>

以下に示しているのは、アクセス権限ポリシーです。`Sid` (ステートメント ID) はオプションです。

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [
      {
         "Sid": "AllowAllCloudFrontPermissions",
         "Effect": "Allow",
         "Action": ["cloudfront:*"],
         "Resource": "*"
      }
   ]
}
```

------

ポリシーでは、すべての CloudFront オペレーションを実行するアクセス許可を付与します。これは、プログラムで CloudFront にアクセスするのに十分なアクセス許可です。コンソールを使用して CloudFront にアクセスする場合は、「[CloudFront コンソールの使用に必要なアクセス許可](#security_iam_id-based-policy-examples-console-required-permissions)」を参照してください。

各アクションを使用するアクセス許可を付与または拒否するために指定するアクションおよび ARN のリストについては、「サービス認証リファレンス」の「[Actions, resources, and condition keys for Amazon CloudFront](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazoncloudfront.html)」を参照してください。**

## CloudFront コンソールの使用に必要なアクセス許可
<a name="security_iam_id-based-policy-examples-console-required-permissions"></a>

CloudFront コンソールへのフルアクセスを許可するには、以下のアクセス許可ポリシーでアクセス許可を付与します。

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement":[
      {
         "Effect":"Allow",
         "Action":[
            "acm:ListCertificates", 
            "cloudfront:*", 
            "cloudwatch:DescribeAlarms",
            "cloudwatch:PutMetricAlarm",
            "cloudwatch:GetMetricStatistics",
            "elasticloadbalancing:DescribeLoadBalancers",
            "iam:ListServerCertificates",
            "sns:ListSubscriptionsByTopic",
            "sns:ListTopics",
            "waf:GetWebACL",
            "waf:ListWebACLs"
         ],
         "Resource":"*"
      },
      {
         "Effect":"Allow",
         "Action":[
            "s3:ListAllMyBuckets",
            "s3:PutBucketPolicy"
         ],
         "Resource":"arn:aws:s3:::*"
      }
   ]
}
```

------

アクセス許可が必要な理由は次のとおりです。

**`acm:ListCertificates`**  
CloudFront コンソールを使用してディストリビューションを作成および更新していて、ビューワーと CloudFront 間、または CloudFront とオリジン間で HTTPS を必須とするように CloudFront を設定するときに、ACM 証明書のリストを表示できるようにします。  
CloudFront コンソールを使用していない場合、このアクセス許可は必要ありません。

**`cloudfront:*`**  
すべての CloudFront アクションを実行できるようにします。

**`cloudwatch:DescribeAlarms` と `cloudwatch:PutMetricAlarm`**  
CloudFront コンソールで CloudWatch アラームを作成および表示できるようにします。`sns:ListSubscriptionsByTopic` と `sns:ListTopics` も参照してください。  
CloudFront コンソールを使用していない場合、これらのアクセス許可は必要ありません。

**`cloudwatch:GetMetricStatistics`**  
CloudFront コンソールで CloudWatch メトリクスを表示できるようにします。  
CloudFront コンソールを使用していない場合、このアクセス許可は必要ありません。

**`elasticloadbalancing:DescribeLoadBalancers`**  
ディストリビューションを作成および更新するときに、使用できるオリジンのリストで、Elastic Load Balancing ロードバランサーのリストを表示できるようにします。  
CloudFront コンソールを使用していない場合、このアクセス許可は必要ありません。

**`iam:ListServerCertificates`**  
CloudFront コンソールを使用してディストリビューションを作成および更新していて、ビューワーと CloudFront 間、または CloudFront とオリジン間で HTTPS を必須とするように CloudFront を設定するときに、IAM 証明書ストアで証明書のリストを表示できるようにします。  
CloudFront コンソールを使用していない場合、このアクセス許可は必要ありません。

**`s3:ListAllMyBuckets`**  
ディストリビューションを作成および更新するときに、以下のオペレーションを実行できるようにします。  
+ 使用できるオリジンのリストで S3 バケットのリストを表示する
+ アクセスログを保存できる S3 バケットのリストを表示する
CloudFront コンソールを使用していない場合、このアクセス許可は必要ありません。

**`S3:PutBucketPolicy`**  
S3 バケットへのアクセスを制限するディストリビューションを作成または更新するときに、CloudFront オリジンのアクセスアイデンティティにアクセスできるようにバケットポリシーを更新することをユーザーに許可します。詳しくは、「[オリジンアクセスアイデンティティを使用する (レガシー、非推奨)](private-content-restricting-access-to-s3.md#private-content-restricting-access-to-s3-oai)」を参照してください。  
CloudFront コンソールを使用していない場合、このアクセス許可は必要ありません。

**`sns:ListSubscriptionsByTopic` と `sns:ListTopics`**  
CloudFront コンソールで CloudWatch アラームを作成するときに、通知用の SNS トピックを選択できるようにします。  
CloudFront コンソールを使用していない場合、これらのアクセス許可は必要ありません。

**`waf:GetWebACL` と `waf:ListWebACLs`**  
CloudFront コンソールで AWS WAF ウェブ ACL のリストを表示できるようにします。  
CloudFront コンソールを使用していない場合、これらのアクセス許可は必要ありません。

### CloudFront コンソールのアクセス許可のみのアクション
<a name="console-only-actions"></a>

[[CloudFront Security Savings Bundle]](https://console.aws.amazon.com//cloudfront/v3/home#/savings-bundle/overview) ページで以下の CloudFront アクションを実行できます。以下の API アクションは、コードで呼び出すことを意図したものではなく、AWS CLI と AWS SDK には含まれていません。


****  

| アクション | 説明 | 
| --- | --- | 
|  `CreateSavingsPlan`  |  新しい Savings Plans を作成するアクセス許可を付与します。  | 
|   `GetSavingsPlan`   |  Savings Plans を取得するアクセス許可を付与します。  | 
|  `ListRateCards`  |  アカウントの CloudFront レートカードを一覧表示するアクセス許可を付与します。  | 
|   `ListSavingsPlans`   |  アカウント内の Savings Plans を一覧表示するアクセス許可を付与します。  | 
|   `ListUsages`   |  CloudFront の使用状況を一覧表示するアクセス許可を付与します。  | 
|   `UpdateSavingsPlan`   |  Savings Plans を更新するアクセス許可を付与します。  | 

**注意事項**  
CloudFront Savings Plans の詳細については、「[Amazon CloudFront についてのよくある質問](https://aws.amazon.com/cloudfront/faqs/)」の「CloudFront Security Savings Bundle」セクションを参照してください。
CloudFront の Savings Plans を作成し、後で削除する場合は、[AWS サポート](https://console.aws.amazon.com/support/home#/case/create?issueType=customer-service)にお問い合わせください。

## カスタマーマネージドポリシーの例
<a name="security_iam_id-based-policy-examples-sdk-cli"></a>

独自のカスタム IAM ポリシーを作成して、CloudFront API アクションに対するアクセス許可を付与できます。これらのカスタムポリシーは、指定されたアクセス許可が必要な IAM ユーザーまたはグループにアタッチできます。これらのポリシーは、CloudFront API、AWS SDK、または AWS CLI を使用しているときに機能します。次の例では、いくつかの一般的ユースケースのアクセス権限を示します。CloudFront へのフルアクセスをユーザーに許可するポリシーについては、「[CloudFront コンソールの使用に必要なアクセス許可](#security_iam_id-based-policy-examples-console-required-permissions)」を参照してください。

**Topics**
+ [例 1: すべてのディストリビューションへの読み取りアクセスを許可する](#security_iam_id-based-policy-examples-allow-read-all-distributions)
+ [例 2: ディストリビューションの作成、更新、削除を許可する](#security_iam_id-based-policy-examples-allow-create-update-delete-distributions)
+ [例 3: 無効化の作成と一覧表示を許可する](#security_iam_id-based-policy-examples-allow-create-list-invalidations)
+ [例 4: ディストリビューションの作成を許可する](#create-distribution-iam-policy)

### 例 1: すべてのディストリビューションへの読み取りアクセスを許可する
<a name="security_iam_id-based-policy-examples-allow-read-all-distributions"></a>

以下のアクセス許可ポリシーでは、CloudFront コンソールですべてのディストリビューションを表示するアクセス許可をユーザーに付与します。

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement":[
      {
         "Effect":"Allow",
         "Action":[
            "acm:ListCertificates", 
            "cloudfront:GetDistribution",
            "cloudfront:GetDistributionConfig",
            "cloudfront:ListDistributions",
            "cloudfront:ListCloudFrontOriginAccessIdentities",
            "elasticloadbalancing:DescribeLoadBalancers",
            "iam:ListServerCertificates",
            "sns:ListSubscriptionsByTopic",
            "sns:ListTopics",
            "waf:GetWebACL",
            "waf:ListWebACLs"
         ],
         "Resource":"*"
      },
      {
         "Effect":"Allow",
         "Action":[
            "s3:ListAllMyBuckets"
         ],
         "Resource":"arn:aws:s3:::*"
      }
   ]
}
```

------

### 例 2: ディストリビューションの作成、更新、削除を許可する
<a name="security_iam_id-based-policy-examples-allow-create-update-delete-distributions"></a>

以下のアクセス許可ポリシーでは、CloudFront コンソールを使用して、ディストリビューションを作成、更新、削除することをユーザーに許可します。

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement":[
      {
         "Effect":"Allow",
         "Action":[
            "acm:ListCertificates", 
            "cloudfront:CreateDistribution",
            "cloudfront:DeleteDistribution",
            "cloudfront:GetDistribution",
            "cloudfront:GetDistributionConfig",
            "cloudfront:ListDistributions",
            "cloudfront:UpdateDistribution",
            "cloudfront:ListCloudFrontOriginAccessIdentities",
            "elasticloadbalancing:DescribeLoadBalancers",
            "iam:ListServerCertificates",
            "sns:ListSubscriptionsByTopic",
            "sns:ListTopics",
            "waf:GetWebACL",
            "waf:ListWebACLs"
         ],
         "Resource":"*"
      },
      {
         "Effect":"Allow",
         "Action":[
            "s3:ListAllMyBuckets",
            "s3:PutBucketPolicy"
         ],
         "Resource":"arn:aws:s3:::*"
      }
   ]
}
```

------

`cloudfront:ListCloudFrontOriginAccessIdentities` アクセス許可では、ユーザーは、Amazon S3 バケットのオブジェクトを操作するアクセス許可が既存のオリジンアクセスアイデンティティに自動的に付与されるようにできます。また、ユーザーがオリジンアクセスアイデンティティを作成できるようにする場合は、`cloudfront:CreateCloudFrontOriginAccessIdentity` アクセス権限も許可する必要があります。

### 例 3: 無効化の作成と一覧表示を許可する
<a name="security_iam_id-based-policy-examples-allow-create-list-invalidations"></a>

次のアクセス権限ポリシーでは、ユーザーが無効化を作成し、一覧表示できるようにします。これに CloudFront ディストリビューションへの読み取りアクセスが含まれているのは、最初にディストリビューション用の設定を表示して、無効化を作成および表示するためです。

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement":[
      {
         "Effect":"Allow",
         "Action":[
            "acm:ListCertificates", 
            "cloudfront:GetDistribution",
            "cloudfront:GetStreamingDistribution",
            "cloudfront:GetDistributionConfig",
            "cloudfront:ListDistributions",
            "cloudfront:ListCloudFrontOriginAccessIdentities",
            "cloudfront:CreateInvalidation",
            "cloudfront:GetInvalidation",
            "cloudfront:ListInvalidations",
            "elasticloadbalancing:DescribeLoadBalancers",
            "iam:ListServerCertificates",
            "sns:ListSubscriptionsByTopic",
            "sns:ListTopics",
            "waf:GetWebACL",
            "waf:ListWebACLs"
         ],
         "Resource":"*"
      },
      {
         "Effect":"Allow",
         "Action":[
            "s3:ListAllMyBuckets"
         ],
         "Resource":"arn:aws:s3:::*"
      }
   ]
}
```

------

### 例 4: ディストリビューションの作成を許可する
<a name="create-distribution-iam-policy"></a>

次のアクセス許可ポリシーでは、CloudFront コンソールでディストリビューションを作成して表示するためのアクセス許可をユーザーに付与します。`CreateDistribution` アクションでは、ディストリビューション ARN (`arn:aws:cloudfront::123456789012:distribution/*`) のワイルドカードの代わりに、`Resource` のワイルドカード (\$1) 文字を指定します。`Resource` 要素の詳細については、「IAM ユーザーガイド」の「[IAM JSON ポリシー要素: Resource](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_resource.html)」を参照してください。**

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "cloudfront:CreateDistribution",
            "Resource": "*"
        },
        {
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": "cloudfront:ListDistributions",
            "Resource": "*"
        }
    ]
}
```

------