AWS KMS의 키 정책 - AWS Key Management Service

AWS KMS의 키 정책

키 정책은 CMK에 AWS KMS keys에 대한 액세스를 제어하는 기본적인 방법입니다. 모든 KMS 키에는 정확히 하나의 키 정책이 있어야 합니다. 키 정책 문서의 설명은 KMS 키를 사용하는 권한을 가진 사람이 누구고 이를 어떻게 사용할 수 있는지 결정합니다. 또한 IAM 정책권한 부여를 사용하여 KMS 키에 대한 액세스를 제어할 수도 있지만 모든 KMS 키에는 키 정책이 있어야 합니다. 자세한 정보는 KMS 키에 대한 액세스 관리를 참조하십시오.

JSON 정책 문서 작성 및 형식 지정에 대한 도움말은 IAM 사용 설명서IAM JSON 정책 참조를 참조하십시오.

키 정책 개요

모든 KMS 키에는 정확히 하나의 키 정책이 있어야 합니다. 이 키 정책은 IAM 정책 및 부여와 함께 연결된 KMS 키에 대한 액세스만 제어합니다. 글로벌 IAM 정책과 달리 주요 정책은 리전에 따라 다릅니다. 각 키 정책은 KMS 키를 호스팅하는 리전에서만 유효합니다.

키 정책은 최대 32 KB(32,768바이트)의 JSON (JavaScript Object Notation) 문서로 구현됩니다. AWS KMS 콘솔에서 또는 AWS KMS API 작업(예: CreateKeyPutKeyPolicy)을 사용하여 키 정책을 생성 및 관리할 수 있습니다 .

키 정책 문서는 AWS의 다른 정책 문서와 같은 JSON 구문을 사용하며 다음과 같은 기본 구조를 갖습니다.

{ "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" } } } ] }

키 정책에 대한 콘솔 기본 보기 사용에 대한 자세한 내용은 기본 키 정책키 정책 변경 섹션을 참조하세요. JSON 정책 문서 작성 및 형식 지정에 대한 도움말은 IAM 사용 설명서IAM JSON 정책 참조 섹션을 확인하세요.

키 정책 문서에는 Version 요소가 있어야 합니다. 버전을 2012-10-17(최신 버전)로 설정하는 것이 좋습니다. 또한 키 정책 문서에는 하나 이상의 문이 있어야 하고 각 문은 최대 6개 요소로 구성됩니다.

  • Sid – (선택 사항) Sid는 문 식별자로서, 문 식별에 사용할 수 있는 임의 문자열입니다.

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

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

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

    참고

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

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

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

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

    조건의 형식:

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

    즉, 다음과 같습니다.

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

    자세한 내용은 섹션을 참조하세요정책 조건

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

예제 키 정책

다음 예제에서는 대칭 KMS 키에 대한 전체 키 정책을 보여 줍니다. 이 키 정책은 앞의 기본 키 정책 섹션의 예제 정책 설명을 단일 키 정책에 결합하여 다음을 달성합니다.

  • KMS 키에 대한 모든 액세스를 AWS 계정(루트 사용자) 111122223333에 허용하므로 계정에서 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"}} } ] }