

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

# IAM 정책 모범 사례
<a name="iam-policies-best-practices"></a>

에 대한 액세스를 보호하는 AWS KMS keys 것은 모든 AWS 리소스의 보안에 매우 중요합니다. KMS 키는 AWS 계정에서 가장 중요한 리소스를 보호하는 데 사용됩니다. 따라서 KMS 키에 대한 액세스를 제어하는 [키 정책](key-policies.md),​​ IAM 정책, [권한 부여](grants.md) 및 VPC 엔드포인트 정책을 설계하는 데 시간을 할애하세요.

KMS 키에 대한 액세스를 제어하는 IAM 정책 설명에서 [최소 권한 원칙](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege)을 사용합니다. IAM 보안 주체에 사용하거나 관리해야 하는 KMS 키에만 필요한 권한만 부여합니다.

다음 모범 사례는 AWS KMS 키 및 별칭에 대한 액세스를 제어하는 IAM 정책에 적용됩니다. 일반적인 IAM 정책 모범 사례 지침은 **IAM 사용 설명서의 [IAM의 보안 모범 사례](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)를 참조하세요.

**키 정책 사용**  
가능하면 다른 AWS 계정에 있는 키를 포함해 여러 KMS 키에 적용할 수 있는 IAM 정책보다는 하나의 KMS 키에 영향을 주는 키 정책에 권한을 제공합니다. 이는 [kms:PutKeyPolicy](https://docs.aws.amazon.com/kms/latest/APIReference/API_PutKeyPolicy.html) 및 [kms:ScheduleKeyDeletion](https://docs.aws.amazon.com/kms/latest/APIReference/API_ScheduleKeyDeletion.html)과 같은 민감한 권한뿐만 아니라 데이터 보호 방법을 결정하는 암호화 작업에도 특히 중요합니다.

**CreateKey 권한 제한**  
필요한 보안 주체에게만 키 생성 권한([kms:CreateKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html))을 부여합니다. KMS 키를 만드는 보안 주체도 키 정책을 설정하므로 자신이 만든 KMS 키를 사용하고 관리할 수 있는 권한을 자신과 다른 사용자에게 부여할 수 있습니다. 이 사용 권한을 할 때 [정책 조건](policy-conditions.md)을 사용하여 제한하는 것이 좋습니다. 예를 들어, [kms:KeySpec](conditions-kms.md#conditions-kms-key-spec) 조건을 사용하여 대칭 암호화 KMS 키에 대한 권한을 제한할 수 있습니다.

**IAM 정책에서 KMS 키 지정**  
가장 좋은 방법은 정책 설명의 `Resource` 요소에 권한이 적용되는 각 KMS 키의 [키 ARN](concepts.md#key-id-key-ARN)을 지정하는 것입니다. 이 방법은 보안 주체에 필요한 KMS 키에 대한 사용 권한을 제한합니다. 예를 들어 이 `Resource` 요소는 보안 주체가 사용해야 하는 KMS 키만 나열합니다.  

```
"Resource": [
    "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab",
    "arn:aws:kms:us-west-2:111122223333:key/0987dcba-09fe-87dc-65ba-ab0987654321"
]
```
KMS 키를 지정하는 것이 실용적이지 않은 경우와 같이 신뢰할 수 있는 AWS 계정 및 리전의 KMS 키에 대한 액세스를 제한하는 `Resource` 값을 사용합니다`arn:aws:kms:region:account:key/*`. 또는 AWS 계정와 같이 신뢰할 수 있는의 모든 리전(\$1)에서 KMS 키에 대한 액세스를 제한합니다`arn:aws:kms:*:account:key/*`.  
[키 ID](concepts.md#key-id-key-id), [별칭 이름](concepts.md#key-id-alias-name) 또는 [별칭 ARN](concepts.md#key-id-alias-ARN)을 사용하여 IAM 정책의 `Resource` 필드에서 KMS 키를 나타낼 수 없습니다. 별칭 ARN을 지정하면 정책이 KMS 키가 아닌 별칭에 적용됩니다. 별칭에 대한 IAM 정책에 대한 자세한 내용은 [별칭에 대한 액세스 제어](alias-access.md) 섹션을 참조하십시오.

**IAM 정책에서 "Resource": "\$1" 사용 안 함**  <a name="avoid-resource-star"></a>
와일드카드 문자 (\$1)를 신중하게 사용하십시오. 키 정책에서 `Resource` 요소의 와일드카드 문자는 키 정책이 연결된 KMS 키를 나타냅니다. 그러나 IAM 정책에서는 `Resource` 요소(`"Resource": "*"`)의 와일드카드 문자만 보안 주체의 계정에 사용 권한이 AWS 계정 있는 모든의 모든 KMS 키에 권한을 적용합니다. 여기에는 [다른의 KMS 키 AWS 계정](key-policy-modifying-external-accounts.md)와 보안 주체 계정의 KMS 키가 포함될 수 있습니다.  
예를 들어 다른에서 KMS 키를 사용하려면 보안 주체 AWS 계정는 외부 계정에 있는 KMS 키의 키 정책 및 자체 계정에 있는 IAM 정책의 권한이 필요합니다. 임의의 계정이 KMS 키에 대한 AWS 계정 [kms:Decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html) 권한을 부여했다고 가정합니다. 이 경우 역할에 모든 KMS 키(`"Resource": "*"`)에 대한 `kms:Decrypt` 권한을 부여하는 계정의 IAM 정책은 요구 사항의 IAM 부분을 충족합니다. 따라서 해당 역할을 수임할 수 있는 보안 주체는 이제 신뢰할 수 없는 계정의 KMS 키를 사용하여 암호문을 해독할 수 있습니다. 두 계정의 CloudTrail 로그에 해당 작업에 대한 항목이 표시됩니다.  
특히 다음 API 작업을 허용하는 정책 설명에서 `"Resource": "*"`를 사용하지 마십시오. 이러한 작업은 다른의 KMS 키에서 호출할 수 있습니다 AWS 계정.  
+ [DescribeKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeKey.html)
+ [GetKeyRotationStatus](https://docs.aws.amazon.com/kms/latest/APIReference/API_GetKeyRotationStatus.html)
+ [암호화 작업](kms-cryptography.md#cryptographic-operations)([Encrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Encrypt.html), [Decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html), [GenerateDataKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html), [GenerateDataKeyPair](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKeyPair.html), [GenerateDataKeyWithoutPlaintext](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKeyWithoutPlaintext.html), [GenerateDataKeyPairWithoutPlaintext](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKeyPairWithoutPlaintext.html), [GetPublicKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GetPublicKey.html), [ReEncrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_ReEncrypt.html), [Sign](https://docs.aws.amazon.com/kms/latest/APIReference/API_Sign.html), [Verify](https://docs.aws.amazon.com/kms/latest/APIReference/API_Verify.html))
+ [CreateGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html), [ListGrants](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListGrants.html), [ListRetirableGrants](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListRetirableGrants.html), [RetireGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_RetireGrant.html), [RevokeGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_RevokeGrant.html)

**"Resource": "\$1"를 사용하는 경우**  <a name="require-resource-star"></a>
IAM 정책에서 필요한 권한에 대해서만 `Resource` 요소의 와일드카드 문자를 사용하십시오. 다음 권한에만 `"Resource": "*"` 요소가 필요합니다.  
+ [kms:CreateKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html)
+ [kms:GenerateRandom](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateRandom.html)
+ [kms:ListAliases](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListAliases.html)
+ [kms:ListKeys](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListKeys.html)
+ 사용자 지정 키 스토어 권한(예: [kms:CreateCustomKeyStore](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateCustomKeyStore.html) 및 [kms:ConnectCustomKeyStore](https://docs.aws.amazon.com/kms/latest/APIReference/API_ConnectCustomKeyStore.html))
별칭 작업에 대한 권한([kms:CreateAlias](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateAlias.html), [kms:UpdateAlias](https://docs.aws.amazon.com/kms/latest/APIReference/API_UpdateAlias.html), [kms:DeleteAlias](https://docs.aws.amazon.com/kms/latest/APIReference/API_DeleteAlias.html))은 별칭과 KMS 키에 연결되어야 합니다. IAM 정책에서 `"Resource": "*"`를 사용하여 별칭과 KMS 키를 나타내거나 `Resource` 요소에서 별칭과 KMS 키를 지정할 수 있습니다. 예제는 [별칭에 대한 액세스 제어](alias-access.md) 섹션을 참조하십시오.

 

이 항목의 예에서는 KMS 키에 대한 IAM 정책을 설계하기 위한 추가 정보와 지침을 제공합니다. 모든 AWS 리소스에 대한 IAM 모범 사례는 [IAM 사용 설명서의 IAM의 보안 모범 사례를](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) 참조하세요. ** 