

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# CloudFormation 후크에 대한 IAM 권한 부여
<a name="grant-iam-permissions-for-hooks"></a>

기본적으로의 새 사용자는 AWS Management Console, AWS Command Line Interface (AWS CLI) 또는 AWS API를 사용하여 후크를 관리할 수 있는 권한이 AWS 계정 없습니다. 사용자에게 권한을 부여하기 위해 IAM 관리자는 IAM 정책을 생성할 수 있습니다. 그런 다음 관리자가 IAM 정책을 역할에 추가하고, 사용자가 역할을 맡을 수 있습니다.

이 주제의 정책 예제를 사용하여 사용자 지정 IAM 정책을 생성하여 사용자에게 후크 작업 권한을 부여합니다.

이러한 예제 JSON 정책 문서를 사용하여 IAM 자격 증명 기반 정책을 생성하는 방법을 알아보려면 [IAM 사용 설명서의 고객 관리형 정책을 사용하여 사용자 지정 IAM 권한 정의를](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html) 참조하세요. ** 

이 주제에서는 다음을 수행하는 데 필요한 권한을 다룹니다.
+ **후크 관리** - 계정에서 후크를 생성, 수정 및 비활성화합니다.
+ **공개적으로 후크 게시** - 사용자 지정 후크를 등록, 테스트 및 게시하여 CloudFormation 레지스트리에서 공개적으로 사용할 수 있도록 합니다.
+ **호출 결과 보기** - 계정의 후크 호출 결과에 액세스하고 쿼리합니다.
+ **호출 결과에 대한 세부 정보 보기** - 계정의 특정 후크 호출 결과에 대한 세부 정보 및 수정 지침에 액세스합니다.

IAM 정책을 생성할 때 `cloudformation` 서비스 *권한 부여 참조*의 작업, 리소스 및 조건 키 섹션에서 서비스 접두사와 연결된 모든 [작업, 리소스 및 조건 키에 대한 CloudFormation](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awscloudformation.html) 설명서를 찾을 수 있습니다.

**Topics**
+ [사용자가 후크를 관리하도록 허용](#iam-permissions-to-manage-hooks)
+ [사용자가 사용자 지정 후크를 공개적으로 게시하도록 허용](#iam-permissions-for-public-hook-publishing)
+ [사용자가 후크 호출 결과를 볼 수 있도록 허용](#iam-permissions-to-request-invocation-results)
+ [사용자가 자세한 후크 호출 결과를 볼 수 있도록 허용](#get-detailed-hook-invocation-results)
+ [AWS KMS 유휴 CloudFormation Hooks 결과를 암호화하기 위한 키 정책 및 권한](hooks-kms-key-policy.md)

## 사용자가 후크를 관리하도록 허용
<a name="iam-permissions-to-manage-hooks"></a>

사용자가 CloudFormation 레지스트리에서 공개하지 않고 후크를 포함한 확장을 관리하도록 허용해야 하는 경우 다음 예제 IAM 정책을 사용할 수 있습니다.

**중요**  
`ActivateType` 및 `SetTypeConfiguration` API 호출은 함께 작동하여 계정에서 후크를 생성합니다. 사용자에게 `SetTypeConfiguration` API를 호출할 수 있는 권한을 부여하면 기존 후크를 수정하고 비활성화할 수 있는 권한이 자동으로 부여됩니다. 리소스 수준 권한을 사용하여이 API 호출에 대한 액세스를 제한할 수 없습니다. 따라서 계정의 승인된 사용자에게만이 권한을 부여해야 합니다.

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "cloudformation:ActivateType",
                "cloudformation:DescribeType",
                "cloudformation:ListTypes",
                "cloudformation:SetTypeConfiguration"
            ],
            "Resource": "*"
        }
    ]
}
```

------

후크를 관리하는 사용자는 다음과 같은 몇 가지 관련 권한이 필요할 수 있습니다.
+ CloudFormation 콘솔의 Control Catalog에서 사전 예방적 제어를 보려면 사용자에게 IAM 정책에 대한 `controlcatalog:ListControls` 권한이 있어야 합니다.
+ CloudFormation 레지스트리에서 사용자 지정 후크를 프라이빗 확장으로 등록하려면 사용자에게 IAM 정책에 대한 `cloudformation:RegisterType` 권한이 있어야 합니다.

## 사용자가 사용자 지정 후크를 공개적으로 게시하도록 허용
<a name="iam-permissions-for-public-hook-publishing"></a>

다음 예제 IAM 정책은 게시 기능에 특히 중점을 둡니다. 사용자가 CloudFormation 레지스트리에서 후크를 포함한 확장을 공개적으로 사용할 수 있도록 허용해야 하는 경우이 정책을 사용합니다.

**중요**  
후크를 공개적으로 게시하면 다른 사용자가 후크를 사용할 수 있습니다 AWS 계정. 권한이 있는 사용자만 이러한 권한을 가지고 있고 게시된 확장이 조직의 품질 및 보안 표준을 충족하는지 확인합니다.

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "cloudformation:DescribePublisher",
                "cloudformation:DescribeTypeRegistration",
                "cloudformation:ListTypes",
                "cloudformation:ListTypeVersions",
                "cloudformation:PublishType",
                "cloudformation:RegisterPublisher",
                "cloudformation:RegisterType",
                "cloudformation:TestType"
            ],
            "Resource": "*"
        }
    ]
}
```

------

## 사용자가 후크 호출 결과를 볼 수 있도록 허용
<a name="iam-permissions-to-request-invocation-results"></a>

후크 호출 결과를 보는 데 필요한 IAM 권한은 요청되는 정보의 유형에 따라 달라집니다.

### 후크 호출 결과 나열
<a name="list-hook-invocation-results"></a>

후크 호출 결과를 나열하려면 사용자는 수행 중인 API 요청에 따라 다른 권한이 필요합니다.
+ 모든 후크 결과, 특정 후크에 대한 결과 또는 특정 후크 및 호출 상태에 대한 결과를 요청할 수 있는 권한을 부여하려면 `cloudformation:ListAllHookResults` 작업에 대한 액세스 권한을 부여해야 합니다.
+ 후크 대상을 지정하여 결과를 요청할 수 있는 권한을 부여하려면 `cloudformation:ListHookResults` 작업에 대한 액세스 권한을 부여해야 합니다. 이 권한을 통해 API 호출자는를 호출할 때 `TargetType` 및 `TargetId` 파라미터를 지정할 수 있습니다`ListHookResults`.

다음은 후크 호출 결과를 나열하기 위한 기본 권한 정책의 예입니다. 이 정책을 사용하는 IAM 자격 증명(사용자 또는 역할)에는 사용 가능한 모든 파라미터 조합을 사용하여 모든 호출 결과를 요청할 수 있는 권한이 있습니다.

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "cloudformation:ListAllHookResults",
                "cloudformation:ListHookResults"
            ],
            "Resource": "*"
        }
    ]
}
```

------

#### 지정할 수 있는 변경 세트 제어
<a name="control-which-change-sets"></a>

다음 예제 IAM 정책은 후크의 대상을 지정하여 결과를 요청할 수 있는 권한을 `cloudformation:ListHookResults` 작업에 부여합니다. 그러나 대상이 라는 변경 세트인 경우에도 작업을 거부합니다`example-changeset`.

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "cloudformation:ListHookResults"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Deny",
            "Action": [
                "cloudformation:ListHookResults"
            ],
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "cloudformation:ChangeSetName": "example-changeset"
                }
            }
        }
    ]
}
```

------

#### 지정할 수 있는 후크 제어
<a name="control-which-hooks"></a>

다음 예제 IAM 정책은 요청에 후크의 ARN이 제공된 경우에만 호출 결과를 요청할 수 있는 권한을 `cloudformation:ListAllHookResults` 작업에 부여합니다. 지정된 후크 ARN에 대한 작업을 거부합니다.

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "cloudformation:ListAllHookResults"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Deny",
            "Action": [
                "cloudformation:ListAllHookResults"
            ],
            "Resource": "*",
            "Condition": {
                "Null": {
                    "cloudformation:TypeArn": "true"
                }
            }
        },
        {
            "Effect": "Deny",
            "Action": [
                "cloudformation:ListAllHookResults"
            ],
            "Resource": "*",
            "Condition": {
                "ArnEquals": {
                    "cloudformation:TypeArn": "arn:aws:cloudformation:us-east-1:123456789012:type/hook/MyCompany-MyHook"
                }
            }
        }
    ]
}
```

------

## 사용자가 자세한 후크 호출 결과를 볼 수 있도록 허용
<a name="get-detailed-hook-invocation-results"></a>

특정 후크 호출의 세부 결과를 볼 수 있는 권한을 부여하려면 `cloudformation:GetHookResult` 작업에 대한 액세스 권한을 부여해야 합니다. 이 권한을 통해 사용자는 특정 후크 호출 결과에 대한 세부 정보 및 수정 지침을 검색할 수 있습니다. 자세한 내용은 API 참조의 [GetHookResult](https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_GetHookResult.html)를 참조하세요. *AWS CloudFormation * 

다음 예제 IAM 정책은 `cloudformation:GetHookResult` 작업에 대한 권한을 부여합니다.

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
       "Action": [
         "cloudformation:GetHookResult"
      ],
      "Resource": "*"
    }
  ]
}
```

------

**참고**  
자체 AWS KMS 키를 사용하여 클라우드에 저장된 자세한 호출 결과를 암호화하도록 후크를 구성할 수 있습니다. 암호화에 고객 관리형 키를 사용할 때 필요한 키 정책 및 IAM 권한을 설정하는 방법에 대한 자세한 내용은 섹션을 참조하세요[AWS KMS 유휴 CloudFormation Hooks 결과를 암호화하기 위한 키 정책 및 권한](hooks-kms-key-policy.md).

# AWS KMS 유휴 CloudFormation Hooks 결과를 암호화하기 위한 키 정책 및 권한
<a name="hooks-kms-key-policy"></a>

이 주제에서는 [GetHookResult](https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_GetHookResult.html) API에서 사용할 수 있는 후크 주석 데이터를 암호화하기 위해 고객 관리형 키를 지정할 때 필요한 키 AWS KMS 정책 및 권한을 설정하는 방법을 설명합니다.

**참고**  
CloudFormation 후크는 기본값을 AWS 소유 키 사용하여 계정의 주석 데이터를 암호화하는 데 추가 권한이 필요하지 않습니다.

**Topics**
+ [개요](#hooks-kms-overview)
+ [암호화 컨텍스트를 사용하여 고객 관리형 키에 대한 액세스 제어](#hooks-encryption-context-security)
+ [고객 관리형 KMS 키 정책](#hooks-policy-example-cmk-access)
+ [`SetTypeConfiguration` API에 대한 KMS 권한](#hooks-policy-example-settypeconfiguration-permissions)
+ [`GetHookResult` API에 대한 KMS 권한](#hooks-policy-example-gethookresult-permissions)

## 개요
<a name="hooks-kms-overview"></a>

다음은 후크 주석 데이터를 암호화하는 데 사용할 AWS KMS keys 수 있습니다.
+ [AWS 소유 키](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-owned-cmk) - 기본적으로 CloudFormation은를 사용하여 데이터를 암호화 AWS 소유 키 합니다. 사용을 확인, 관리 또는 사용하거나 AWS 소유 키감사할 수 없습니다. 그러나 데이터를 암호화하는 데 사용되는 키를 보호하기 위해 명시적 구성을 수행할 필요는 없습니다. AWS 소유 키 는 무료로 제공됩니다(월 요금 또는 사용 요금 없음). 주석 데이터를 보호하는 암호화 키를 감사하거나 제어해야 하는 경우가 아니면 AWS 소유 키 를 선택하는 것이 좋습니다.
+ [고객 관리형 키](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk) - CloudFormation은 사용자가 생성, 소유 및 관리하는 대칭 고객 관리형 키 사용을 지원하여 기존에 두 번째 암호화 계층을 추가합니다 AWS 소유 키. AWS KMS 요금이 적용됩니다. 자세한 정보는 *AWS Key Management Service 개발자 안내서*의 [키 생성](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html)을 참조하세요. 키를 관리하려면 [AWS KMS 콘솔](https://console.aws.amazon.com/kms), AWS CLI또는 AWS KMS API에서 (AWS KMS)를 사용합니다 AWS Key Management Service . 자세한 내용은 [ 개발자 안내서AWS Key Management Service](https://docs.aws.amazon.com/kms/latest/developerguide/)를 참조하세요.

후크를 생성하고 업데이트할 때 고객 관리형 키를 구성할 수 있습니다. 고객 관리형 키를 제공하면 CloudFormation은이 키를 사용하여 주석 데이터를 저장하기 전에 암호화합니다. 나중에 `GetHookResult` API 작업 중에 주석 데이터에 액세스하면 CloudFormation에서 자동으로 복호화합니다. 후크에 대한 암호화 키 구성에 대한 자세한 내용은 섹션을 참조하세요[후크 구성 스키마 구문 참조](hook-configuration-schema.md).

**중요**  
고객 관리형 키를 지정하는 `KmsKeyId` 옵션은 현재를 사용하여 후크 AWS CLI 를 구성하는 경우에만 사용할 수 있습니다.

## 암호화 컨텍스트를 사용하여 고객 관리형 키에 대한 액세스 제어
<a name="hooks-encryption-context-security"></a>

CloudFormation 후크에는 모든 주석 저장 및 검색 작업에 암호화 컨텍스트가 자동으로 포함됩니다. 이렇게 하면 키 정책에서 암호화 컨텍스트 조건을 설정하여 키를 특정 후크에만 사용할 수 있습니다.
+ `kms:EncryptionContext:aws:cloudformation:hooks:service` - 키가 CloudFormation Hooks 서비스에서만 사용되는지 확인합니다.
+ `kms:EncryptionContext:aws:cloudformation:account-id` - AWS 계정 ID와 일치하여 교차 계정 키 사용을 방지합니다.
+ `kms:EncryptionContext:aws:cloudformation:arn` - ARN 패턴을 사용하여 특정 후크로 사용을 제한합니다.

이러한 조건은 암호화된 데이터를 특정 후크 컨텍스트에 암호화 방식으로 바인딩하여 혼동된 대리자 공격에 대한 추가 보호를 제공합니다.

## 고객 관리형 KMS 키 정책
<a name="hooks-policy-example-cmk-access"></a>

고객 관리형 키를 생성할 때 CloudFormation Hooks 서비스가 AWS KMS 작업을 수행할 수 있도록 키 정책을 정의해야 합니다. 다음 키 정책을 사용하려면 *자리 표시자 값을* 자신의 정보로 바꿉니다.

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "EnableIAMUserDescribeKey",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::123456789012:role/ExampleRole"
      },
      "Action": "kms:DescribeKey",
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "kms:ViaService": "cloudformation.us-east-1.amazonaws.com"
        }
      }
    },
    {
      "Sid": "EnableIAMUserGenerateDataKey",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::123456789012:role/ExampleRole"
      },
      "Action": "kms:GenerateDataKey",
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "kms:ViaService": "cloudformation.us-east-1.amazonaws.com",
          "kms:EncryptionContext:aws:cloudformation:hooks:service": "hooks.cloudformation.amazonaws.com",
          "kms:EncryptionContext:aws:cloudformation:123456789012": "123456789012"
        },
        "ArnLike": {
          "kms:EncryptionContext:aws:cloudformation:arn": "arn:aws:cloudformation:*:123456789012:hook/*"
        }
      }
    },
    {
      "Sid": "EnableIAMUserDecrypt",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::123456789012:role/ExampleRole"
      },
      "Action": "kms:Decrypt",
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "kms:ViaService": "cloudformation.us-east-1.amazonaws.com"
        }
      }
    },
    {
      "Sid": "AllowHooksServiceDescribeKey",
      "Effect": "Allow",
      "Principal": {
        "Service": "hooks.cloudformation.amazonaws.com"
      },
      "Action": "kms:DescribeKey",
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "aws:SourceAccount": "123456789012"
        },
        "ArnLike": {
          "aws:SourceArn": "arn:aws:cloudformation:*:123456789012:hook/*"
        }
      }
    },
    {
      "Sid": "AllowHooksService",
      "Effect": "Allow",
      "Principal": {
        "Service": "hooks.cloudformation.amazonaws.com"
      },
      "Action": [
        "kms:Decrypt",
        "kms:GenerateDataKey"
      ],
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "aws:SourceAccount": "123456789012",
          "kms:EncryptionContext:aws:cloudformation:hooks:service": "hooks.cloudformation.amazonaws.com",
          "kms:EncryptionContext:aws:cloudformation:123456789012": "123456789012"
        },
        "ArnLike": {
          "aws:SourceArn": "arn:aws:cloudformation:*:123456789012:hook/*",
          "kms:EncryptionContext:aws:cloudformation:arn": "arn:aws:cloudformation:*:123456789012:hook/*"
        }
      }
    }
  ]
}
```

------

이 정책은 IAM 역할(처음 3개 문)과 CloudFormation Hooks 서비스(마지막 2개 문) 모두에 권한을 부여합니다. `kms:ViaService` 조건 키는 KMS 키를 CloudFormation을 통해서만 사용할 수 있도록 하여 KMS API 직접 호출을 방지합니다. 주요 작업은 다음과 같습니다.
+ `kms:DescribeKey` - 키 속성 및 메타데이터를 검증합니다. 이 작업은 암호화 컨텍스트 조건에서 사용할 수 없으므로 별도의 문에 있습니다.
+ `kms:GenerateDataKey` - 저장 전에 주석을 암호화하기 위한 데이터 암호화 키를 생성합니다. 이 작업에는 범위가 지정된 액세스 제어를 위한 암호화 컨텍스트 조건이 포함됩니다.
+ `kms:Decrypt` - 이전에 암호화된 주석 데이터를 해독합니다. IAM 역할의 경우 여기에는 `kms:ViaService` 조건이 포함됩니다. 서비스 보안 주체의 경우 여기에는 암호화 컨텍스트 조건이 포함됩니다.

`aws:SourceAccount` 및 `aws:SourceArn` 조건 키는 혼동된 대리자 공격에 대한 기본 보호를 제공합니다. 암호화 컨텍스트 조건은 추가 검증 계층을 제공합니다. 자세한 내용은 *AWS Key Management Service 개발자 안내서*의 [aws:SourceArn 또는 aws:SourceAccount 조건 키 사용을](https://docs.aws.amazon.com/kms/latest/developerguide/least-privilege.html#least-privilege-source-arn) 참조하세요.

**중요**  
후크 실행 역할에는 AWS KMS 권한이 필요하지 않습니다. CloudFormation Hooks 서비스 보안 주체는 모든 AWS KMS 작업을 수행합니다.

## `SetTypeConfiguration` API에 대한 KMS 권한
<a name="hooks-policy-example-settypeconfiguration-permissions"></a>

[SetTypeConfiguration](https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_SetTypeConfiguration.html) API 호출 중에 CloudFormation은 지정된 AWS KMS 키로 주석 데이터를 암호화할 수 있는 사용자 권한을 검증합니다. `SetTypeConfiguration` API를 사용하여 암호화를 구성할 사용자 또는 역할에 다음 IAM 정책을 추가합니다. *자리 표시자*를 자신의 정보로 바꿉니다.

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "cloudformation:SetTypeConfiguration",
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": "kms:DescribeKey",
      "Resource": "arn:aws:kms:us-east-1:123456789012:key/abc-123"
    },
    {
      "Effect": "Allow",
      "Action": "kms:GenerateDataKey",
      "Resource": "arn:aws:kms:us-east-1:123456789012:key/abc-123",
      "Condition": {
        "StringEquals": {
          "kms:EncryptionContext:aws:cloudformation:hooks:service": "hooks.cloudformation.amazonaws.com",
          "kms:EncryptionContext:aws:cloudformation:123456789012": "123456789012"
        },
        "ArnLike": {
          "kms:EncryptionContext:aws:cloudformation:arn": "arn:aws:cloudformation:*:123456789012:hook/*"
        }
      }
    }
  ]
}
```

------

## `GetHookResult` API에 대한 KMS 권한
<a name="hooks-policy-example-gethookresult-permissions"></a>

고객 관리형 키를 사용하는 후크에 대해 [GetHookResult](https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_GetHookResult.html)를 호출하려면 사용자에게 해당 키에 대한 `kms:Decrypt` 권한이 있어야 합니다. 를 호출할 사용자 또는 역할에 다음 IAM 정책을 추가합니다`GetHookResult`. 를 고객 관리형 키의 ARN`arn:aws:kms:us-east-1:123456789012:key/abc-123`으로 바꿉니다.

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "cloudformation:GetHookResult",
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": "kms:Decrypt",
      "Resource": "arn:aws:kms:us-east-1:123456789012:key/abc-123"
    }
  ]
}
```

------