

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

# 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"
    }
  ]
}
```

------