

# Amazon CloudFront에 대한 자격 증명 기반 정책 예시
<a name="security_iam_id-based-policy-examples"></a>

기본적으로 사용자 및 역할에는 CloudFront 리소스를 생성하거나 수정할 수 있는 권한이 없습니다. 사용자에게 사용자가 필요한 리소스에서 작업을 수행할 권한을 부여하려면 IAM 관리자가 IAM 정책을 생성하면 됩니다.

이러한 예제 JSON 정책 문서를 사용하여 IAM ID 기반 정책을 생성하는 방법을 알아보려면 *IAM 사용 설명서*의 [IAM 정책 생성(콘솔)](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create-console.html)을 참조하세요.

각 리소스 유형에 대한 ARN 형식을 포함하여 CloudFront에서 정의한 작업 및 리소스 유형에 대한 자세한 내용은 **서비스 승인 참조의 [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 계정에 비용이 발생할 수 있습니다. ID 기반 정책을 생성하거나 편집할 때는 다음 지침과 권장 사항을 따르세요.
+ **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 Access Analyzer를 통해 IAM 정책을 확인하여 안전하고 기능적인 권한 보장** - IAM Access Analyzer에서는 IAM 정책 언어(JSON)와 모범 사례가 정책에서 준수되도록 새로운 및 기존 정책을 확인합니다. IAM Access Analyzer는 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 사용자가 자신의 사용자 ID에 연결된 인라인 및 관리형 정책을 볼 수 있도록 허용하는 정책을 생성하는 방법을 보여줍니다. 이 정책에는 콘솔에서 또는 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의 목록은 **서비스 승인 참조의 [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가 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 원본 액세스 ID에 대한 액세스 권한을 부여할 수 있도록 허용합니다. 자세한 내용은 [오리진 액세스 ID 사용(레거시, 권장하지 않음)](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 보안 절감형 번들](https://console.aws.amazon.com//cloudfront/v3/home#/savings-bundle/overview) 페이지에서 다음 CloudFront 작업을 수행할 수 있습니다. API 작업은 코드에서 호출할 수 없으며 AWS CLI 및 AWS SDK에 포함되지 않습니다.


****  

| 작업 | 설명 | 
| --- | --- | 
|  `CreateSavingsPlan`  |  새로운 절감형 플랜을 만들 수 있는 권한을 부여합니다.  | 
|   `GetSavingsPlan`   |  절감형 플랜을 가져올 수 있는 권한을 부여합니다.  | 
|  `ListRateCards`  |  계정에 대한 CloudFront 요금 카드를 나열할 수 있는 권한을 부여합니다.  | 
|   `ListSavingsPlans`   |  계정의 절감형 플랜을 나열할 수 있는 권한을 부여합니다.  | 
|   `ListUsages`   |  CloudFront 사용을 나열할 수 있는 권한을 부여합니다.  | 
|   `UpdateSavingsPlan`   |  절감형 플랜을 업데이트할 수 있는 권한을 부여합니다.  | 

**참고**  
CloudFront 절감형 플랜에 대한 자세한 내용은 [Amazon CloudFront FAQ](https://aws.amazon.com/cloudfront/faqs/)의 CloudFront 보안 절감형 번들 섹션을 참조하시기 바랍니다.
CloudFront에 대한 절감형 플랜을 만든 다음, 나중에 삭제하려면 [AWS Support](https://console.aws.amazon.com/support/home#/case/create?issueType=customer-service)에 문의하시기 바랍니다.

## 고객 관리형 정책 예
<a name="security_iam_id-based-policy-examples-sdk-cli"></a>

CloudFront API 작업에 대한 권한을 허용하는 고유의 사용자 지정 IAM 정책을 생성할 수 있습니다. 지정된 권한이 필요한 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 버킷의 객체에 액세스할 권한을 기존 원본 액세스 ID에 자동으로 부여할 수 있습니다. 또한 사용자가 원본 액세스 ID를 생성할 수 있도록 하려면 `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 정책 요소: 리소스](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": "*"
        }
    ]
}
```

------