키 정책 생성 - AWS Key Management Service

키 정책 생성

AWS KMS 콘솔에서 또는 AWS KMS API 작업(예: CreateKey, ReplicateKey, PutKeyPolicy)을 사용하거나 AWS CloudFormation 템플릿을 사용하여 키 정책을 생성 및 관리할 수 있습니다 .

AWS KMS 콘솔에서 KMS 키를 생성하는 경우, 콘솔의 기본 키 정책을 기반으로 키 정책을 생성하는 절차가 단계별로 안내됩니다. CreateKey 또는 ReplicateKey API를 사용할 경우, 키 정책을 지정하지 않으면 이 API가 프로그래밍 방식으로 생성된 키에 대한 기본 키 정책을 적용합니다. PutKeyPolicy API를 사용하거나 AWS CloudFormation 템플릿을 사용하여 KMS 키를 생성하는 경우 키 정책을 지정해야 합니다.

각 정책 문서에는 하나 이상의 정책 문이 포함될 수 있습니다. 다음은 정책 문이 하나 포함된 유효한 키 정책 문서를 나타낸 예제입니다.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "Describe the policy statement", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/Alice" }, "Action": "kms:DescribeKey", "Resource": "*", "Condition": { "StringEquals": { "kms:KeySpec": "SYMMETRIC_DEFAULT" } } } ] }

키 정책 형식

키 정책 문서는 다음 규칙을 준수해야 합니다.

  • 최대 32KB(32,768바이트)

  • 키 정책 문의 Sid 요소에는 공백이 포함될 수 있습니다. (IAM 정책 문서의 Sid 요소에는 공백이 금지됩니다.)

키 정책 문서에는 다음 문자만 포함될 수 있습니다.

  • 인쇄 가능한 ASCII 문자

  • Basic Latin 및 Latin-1 Supplement 문자 집합의 인쇄 가능한 문자

  • 탭(\u0009), 줄 바꿈(\u000A) 및 캐리지 리턴(\u000D) 특수 문자

키 정책의 요소

키 정책 문서에는 다음 요소가 있어야 합니다.

버전

키 정책 문서 버전을 지정합니다. 버전을 2012-10-17(최신 버전)로 설정합니다.

Statement

Statement - 정책 문을 포함합니다. 키 정책 문서에는 하나 이상의 문이 있어야 합니다.

각 키 정책 문은 최대 6개의 요소로 구성될 수 있습니다. Effect, Principal, ActionResource 요소는 필수입니다.

Sid

(선택 사항) 문 식별자(Sid)로서 문 설명에 사용할 수 있는 임의 문자열입니다. 키 정책의 Sid에는 공백이 포함될 수 있습니다. (IAM 정책 Sid 요소에는 공백을 포함할 수 없습니다.)

Effect

(필수) 정책 문에서 권한을 허용할지 거부할지를 결정합니다. 유효한 값은 Allow 또는 Deny입니다. KMS 키에 대한 액세스 권한을 명시적으로 허용하지 않으면 액세스가 암시적으로 거부됩니다. KMS 키에 대한 액세스를 명시적으로 거부할 수도 있습니다. 다른 정책에서 액세스 권한을 허용하더라도 사용자가 액세스할 수 없도록 하려고 할 때 이러한 작업을 수행할 수 있습니다.

Principal

(필수) 보안 주체는 정책 설명에 지정된 권한을 갖는 자격 증명입니다. AWS 계정, IAM 사용자, IAM 역할 및 일부 AWS 서비스를 키 정책에서 보안 주체로 지정할 수 있습니다. IAM 사용자 그룹은 어떤 정책 유형에서도 유효한 보안 주체가 아닙니다.

키 정책 문의 보안 주체가 arn:aws:iam::111122223333:root" 형식의 AWS 계정 보안 주체인 경우 정책 문에서는 IAM 보안 주체에 권한을 부여하지 않습니다. 대신, IAM 정책을 사용하여 키 정책에 지정된 권한을 위임할 수 있는 AWS 계정 권한을 부여합니다. ((필수) arn:aws:iam::111122223333:root" 형식의 보안 주체는 계정 식별자에 'root'를 사용하지만 AWS 계정 루트 사용자를 나타내지 않습니다. 이 계정 보안 주체는 계정과 계정 루트 사용자를 포함한 해당 관리자를 나타냅니다.)

보안 주체가 다른 경우AWS 계정 또는 보안 주체를 사용하는 경우 권한은 KMS 키 및 키 정책을 사용하여 리전에서 계정을 사용하도록 설정한 경우에만 유효합니다. 기본적으로 사용하도록 설정되지 않은 리전(“옵트인 리전”)에 대한 자세한 내용은 AWS 일반 참조AWS 리전 관리를 참조하십시오.

참고

조건을 사용하여 키 정책을 제한하지 않는 한 권한을 허용하는 키 정책 설명에서 보안 주체를 별표(*)로 설정하지 마십시오. 별표는 다른 정책문에서 명백하게 거부한 경우를 제외하고 모든 AWS 계정 내 모든 자격 증명에게 KMS 키를 사용할 수 있도록 허가합니다. 다른 AWS 계정의 사용자는 본인의 계정에서 KMS 키를 사용할 수 있는 IAM 권한만 있으면 됩니다.

다른 AWS 계정 또는 해당 보안 주체가 KMS 키를 사용하도록 허용하려면, 키 정책과 다른 계정의 IAM 정책에서 권한을 제공해야 합니다. 자세한 내용은 다른 계정의 사용자가 CMK를 사용하도록 허용 단원을 참조하세요.

Action

(필수) 허용하거나 거부할 API 작업을 지정합니다. 예를 들어 kms:Encrypt 작업은 AWS KMS Encrypt 작업에 해당합니다. 정책 설명에 두 개 이상의 Action을 나열할 수 있습니다. 자세한 정보는 권한 참조을 참조하십시오.

Resource

(필수) 키 정책에서 리소스 요소의 값은 "*"이고, “이 KMS 키”를 의미합니다. 별표("*")는 키 정책이 연결된 KMS 키를 식별합니다.

참고

필수 Resource 요소가 키 정책 문에서 누락된 경우 CreateKeyPutKeyPolicy API는 성공하지만 정책 문은 영향을 미치지 않습니다. Resource 요소가 없는 키 정책 문은 KMS 키에 적용되지 않습니다.

Condition

(선택 사항) 키 정책이 적용되기 위해 충족해야 하는 요구 사항을 지정합니다. 이를 통해 AWS는 API 요청의 컨텍스트를 평가해 정책 설명의 적용 여부를 판단할 수 있습니다.

조건을 지정하려면 미리 정의된 조건 키를 사용합니다. AWS KMS는 AWS 전역 조건 키AWS KMS 조건 키를 지원합니다. 속성 기반 액세스 제어(ABAC)를 지원하기 위해 AWS KMS는 태그 및 별칭을 기반으로 KMS 키에 대한 액세스를 제어하는 조건 키를 제공합니다. 자세한 내용은 AWS KMS의 ABAC 단원을 참조하세요.

조건의 형식:

"Condition": {"condition operator": {"condition key": "condition value"}}

즉, 다음과 같습니다.

"Condition": {"StringEquals": {"kms:CallerAccount": "111122223333"}}

AWS 정책 구문에 대한 자세한 내용은 IAM 사용 설명서AWS IAM 정책 참조를 참조하십시오.

예제 키 정책

다음은 대칭 암호화 KMS 키에 대한 전체 키 정책을 나타낸 예제입니다. 이 키 정책은 앞의 기본 키 정책 섹션의 예제 정책 설명을 단일 키 정책에 결합하여 다음을 달성합니다.

  • 111122223333이라는 예제 AWS 계정에 KMS 키에 대한 모든 액세스 권한을 부여합니다. 계정과 해당 관리자(계정 루트 사용자 포함)가 해당 계정의 IAM 정책을 사용하여 KMS 키에 대한 액세스를 허용하도록 허용합니다.

  • IAM 사용자 KMSAdminUser 및 IAM 역할 KMSAdminRole이 KMS 키를 관리하도록 허용합니다.

  • IAM 사용자 ExampleUser, IAM 역할 ExampleRole 및 AWS 계정 444455556666이 KMS 키를 사용하도록 허용합니다.

{ "Version": "2012-10-17", "Id": "key-consolepolicy-2", "Statement": [ { "Sid": "Enable IAM policies", "Effect": "Allow", "Principal": {"AWS": "arn:aws:iam::111122223333:root"}, "Action": "kms:*", "Resource": "*" }, { "Sid": "Allow access for Key Administrators", "Effect": "Allow", "Principal": {"AWS": [ "arn:aws:iam::111122223333:user/KMSAdminUser", "arn:aws:iam::111122223333:role/KMSAdminRole" ]}, "Action": [ "kms:Create*", "kms:Describe*", "kms:Enable*", "kms:List*", "kms:Put*", "kms:Update*", "kms:Revoke*", "kms:Disable*", "kms:Get*", "kms:Delete*", "kms:TagResource", "kms:UntagResource", "kms:ScheduleKeyDeletion", "kms:CancelKeyDeletion" ], "Resource": "*" }, { "Sid": "Allow use of the key", "Effect": "Allow", "Principal": {"AWS": [ "arn:aws:iam::111122223333:user/ExampleUser", "arn:aws:iam::111122223333:role/ExampleRole", "arn:aws:iam::444455556666:root" ]}, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey" ], "Resource": "*" }, { "Sid": "Allow attachment of persistent resources", "Effect": "Allow", "Principal": {"AWS": [ "arn:aws:iam::111122223333:user/ExampleUser", "arn:aws:iam::111122223333:role/ExampleRole", "arn:aws:iam::444455556666:root" ]}, "Action": [ "kms:CreateGrant", "kms:ListGrants", "kms:RevokeGrant" ], "Resource": "*", "Condition": {"Bool": {"kms:GrantIsForAWSResource": "true"}} } ] }