권한 부여 생성 - AWS Key Management Service

권한 부여 생성

권한 부여를 생성하기 전에 권한 부여 사용자 정의 옵션에 대해 알아봅니다. 권한 부여 제약 조건을 사용하여 권한 부여의 사용 권한을 제한할 수 있습니다. 또한 CreateGrant 권한 부여에 대해 알아보십시오. 권한 부여에서 권한 부여를 생성할 수 있는 권한을 받은 보안 주체는 생성할 수 있는 권한이 제한됩니다.

권한 부여 생성

권한 부여를 생성하려면 CreateGrant 작업을 호출합니다. KMS 키, 피부여자 보안 주체 및 허용된 권한 부여 작업 목록을 지정합니다. 사용 중지 보안 주체를 선택적으로 지정할 수도 있습니다. 권한 부여를 사용자 지정하려면 선택적 Constraints 매개 변수를 사용하여 권한 부여 제약을 정의합니다.

권한 부여를 생성, 폐기 또는 취소할 때 작업에 최종 일관성이 달성될 때까지 일반적으로 5분 미만의 짧은 지연이 있을 수 있습니다.

예를 들어 다음 CreateGrant 명령은 exampleUser가 지정된 대칭 KMS 키에 대해 Decrypt 작업을 호출할 수 있도록 허용하는 권한을 생성합니다. 이 권한 부여는 RetiringPrincipal 파라미터를 사용하여 권한 부여를 중단시킬 수 있는 보안 주체를 지정합니다. 또한 요청의 암호화 컨텍스트"Department": "IT"를 포함하는 경우에만 권한을 허용하는 권한 부여 제약 조건이 포함되어 있습니다.

$ aws kms create-grant \ --key-id 1234abcd-12ab-34cd-56ef-1234567890ab \ --grantee-principal arn:aws:iam::111122223333:user/exampleUser \ --operations Decrypt \ --retiring-principal arn:aws:iam::111122223333:role/adminRole \ --constraints EncryptionContextSubset={Department=IT}

코드가 CreateGrant 작업을 다시 시도하거나 요청을 자동으로 다시 시도하는AWS SDK를 사용하는 경우 이름 파라미터 옵션을 사용하여 중복 권한 부여의 생성을 방지합니다. AWS KMS가 이름을 포함하여 기존 권한 부여와 동일한 속성을 가진 권한 부여에 대한 CreateGrant 요청을 받으면 요청을 재시도로 인식하고 새 권한 부여를 생성하지 않습니다. Name 값을 사용하여 AWS KMS 작업에서 권한 부여를 식별할 수 없습니다.

$ aws kms create-grant \ --name IT-1234abcd-exampleUser-decrypt \ --key-id 1234abcd-12ab-34cd-56ef-1234567890ab \ --grantee-principal arn:aws:iam::111122223333:user/exampleUser \ --operations Decrypt \ --retiring-principal arn:aws:iam::111122223333:role/adminRole \ --constraints EncryptionContextSubset={Department=IT}

여러 프로그래밍 언어로 권한 부여 작업을 수행하는 방법을 보여주는 코드 예제는 권한 부여 작업 단원을 참조하세요.

권한 부여 제약 사용

권한 부여 제약은 권한 부여를 통해 피부여자 보안 주체에게 부여하는 권한에 대한 조건을 설정합니다. 권한 부여 제약 조건은 키 정책 또는 IAM 정책에서 조건 키를 대신합니다. 각 권한 부여 제약 조건 값은 암호화 컨텍스트 페어를 8개까지 포함할 수 있습니다. 각 권한 부여 제약 조건의 암호화 컨텍스트 값은 384자를 초과할 수 없습니다.

AWS KMS는 두 가지 권한 부여 제약 조건 EncryptionContextEqualsEncryptionContextSubset을 지원하며, 둘 다 암호화 작업 요청에서 암호화 컨텍스트에 대한 요구 사항을 설정합니다.

암호화 컨텍스트 권한 부여 제약 조건은 암호화 컨텍스트 파라미터가 있는 권한 부여 작업과 함께 사용하도록 설계되었습니다.

  • 암호화 컨텍스트 제약 조건은 대칭 암호화 KMS 키에 대한 권한 부여에서만 유효합니다. 다른 KMS 키를 사용한 암호화 작업은 암호화 컨텍스트를 지원하지 않습니다.

  • 암호화 컨텍스트 제약 조건은 DescribeKeyRetireGrant 작업에 대해 무시됩니다. DescribeKeyRetireGrant에는 암호화 컨텍스트 파라미터가 없지만 암호화 컨텍스트 제약 조건이 있는 권한 부여에 이러한 작업을 포함할 수 있습니다.

  • CreateGrant 작업에 대한 권한 부여에서 암호화 컨텍스트 제약 조건을 사용할 수 있습니다. 암호화 컨텍스트 제약 조건에서는 CreateGrant 권한으로 생성된 모든 권한 부여에 동등하게 엄격하거나 더 엄격한 암호화 컨텍스트 제약 조건이 있어야 합니다.

AWS KMS는 다음과 같은 암호화 컨텍스트 권한 부여 제약 조건을 지원합니다.

EncryptionContextEquals

EncryptionContextEquals를 사용하여 허용된 요청에 대한 정확한 암호화 컨텍스트를 지정합니다.

EncryptionContextEquals는 요청의 암호화 컨텍스트 페어가 권한 부여 제약 조건의 암호화 컨텍스트 페어에 대해 정확히 대소문자가 일치해야 합니다. 쌍은 순서에 관계없이 나타날 수 있지만 각 쌍의 키와 값은 다를 수 없습니다.

예를 들어, EncryptionContextEquals 권한 부여 제약 조건에 "Department": "IT" 암호화 컨텍스트 페어가 필요한 경우 권한 부여는 요청의 암호화 컨텍스트가 정확히 "Department": "IT"인 경우에만 지정된 유형의 요청을 허용합니다.

EncryptionContextSubset

EncryptionContextSubset을 사용하여 요청에 특정 암호화 컨텍스트 페어가 포함되도록 요구합니다.

EncryptionContextSubset는 요청에 권한 부여 제약 조건의 모든 암호화 컨텍스트 페어(정확한 대소문자 구분 일치)을 포함해야 하지만 요청에 추가 암호화 컨텍스트 페어가 있을 수도 있습니다. 쌍은 순서에 관계없이 나타날 수 있지만 각 쌍의 키와 값은 다를 수 없습니다.

예를 들어, EncryptionContextSubset 권한 부여 제약 조건에 Department=IT 암호화 컨텍스트 페어가 필요한 경우 권한 부여는 요청의 암호화 컨텍스트가 정확히 "Department": "IT"인 경우에 지정된 유형의 요청을 허용하거나 다른 암호화 컨텍스트 페어(예: "Department": "IT","Purpose": "Test")와 함께 "Department": "IT"를 포함합니다.

대칭 암호화 KMS 키에 대한 권한 부여에서 암호화 컨텍스트 제약 조건을 지정하려면 CreateGrant 작업의 Constraints 파라미터를 사용합니다. 이 명령으로 생성하는 권한 부여는 exampleUser에게 Decrypt 작업을 호출할 수 있는 권한을 부여합니다. 그러나 이 권한은 Decrypt 요청의 암호화 컨텍스트가 "Department": "IT" 암호화 컨텍스트 페어인 경우에만 유효합니다.

$ aws kms create-grant \ --key-id 1234abcd-12ab-34cd-56ef-1234567890ab \ --grantee-principal arn:aws:iam::111122223333:user/exampleUser \ --operations Decrypt \ --retiring-principal arn:aws:iam::111122223333:role/adminRole \ --constraints EncryptionContextEquals={Department=IT}

결과 권한 부여는 다음과 같습니다. exampleUser에 부여된 권한은 Decrypt 요청이 권한 부여 제약 조건에 지정된 동일한 암호화 컨텍스트 페어를 사용하는 경우에만 유효합니다. KMS 키에 대한 권한 부여를 확인하려면 ListGrants 작업을 사용합니다.

$ aws kms list-grants --key-id 1234abcd-12ab-34cd-56ef-1234567890ab { "Grants": [ { "Name": "", "IssuingAccount": "arn:aws:iam::111122223333:root", "GrantId": "8c94d1f12f5e69f440bae30eaec9570bb1fb7358824f9ddfa1aa5a0dab1a59b2", "Operations": [ "Decrypt" ], "GranteePrincipal": "arn:aws:iam::111122223333:user/exampleUser", "Constraints": { "EncryptionContextEquals": { "Department": "IT" } }, "CreationDate": 1568565290.0, "KeyId": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", "RetiringPrincipal": "arn:aws:iam::111122223333:role/adminRole" } ] }

EncryptionContextEquals 권한 부여 제약 조건을 충족하려면 Decrypt 작업에 대한 요청의 암호화 컨텍스트가 "Department": "IT" 페어여야 합니다. 피부여자 보안 주체의 다음과 같은 요청은 EncryptionContextEquals 권한 부여 제약 조건을 충족합니다.

$ aws kms decrypt \ --key-id arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab\ --ciphertext-blob fileb://encrypted_msg \ --encryption-context Department=IT

권한 부여 제약 조건이 EncryptionContextSubset인 경우 요청의 암호화 컨텍스트 페어는 권한 부여 제약 조건의 암호화 컨텍스트 페어를 포함해야 하지만 요청은 다른 암호화 컨텍스트 페어도 포함할 수 있습니다. 다음 권한 부여 제약 조건에서는 요청의 암호화 컨텍스트 페어 중 하나가 "Deparment": "IT"여야 합니다.

"Constraints": { "EncryptionContextSubset": { "Department": "IT" } }

피부여자 보안 주체의 다음 요청은 이 예에서 EncryptionContextEqualEncryptionContextSubset 권한 부여 제약 조건을 모두 충족합니다.

$ aws kms decrypt \ --key-id arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab \ --ciphertext-blob fileb://encrypted_msg \ --encryption-context Department=IT

그러나 피부여자 주체의 다음과 같은 요청은 EncryptionContextSubset 권한 부여 제약 조건을 만족하지만 EncryptionContextEquals 권한 부여 제약 조건에는 실패합니다.

$ aws kms decrypt \ --key-id arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab \ --ciphertext-blob fileb://encrypted_msg \ --encryption-context Department=IT,Purpose=Test

AWS 서비스는 AWS 계정에서 KMS 키를 사용할 권한을 부여하는 권한 부여에서 암호화 컨텍스트 제약 조건을 사용하는 경우가 자주 있습니다. 예를 들어 Amazon DynamoDB는 다음과 같은 권한 부여를 사용하여 계정에서 DynamoDB용 AWS 관리형 키를 사용할 수 있는 권한을 얻습니다. 이 권한 부여의 EncryptionContextSubset 권한 부여 제약 조건은 권한 부여에 지정된 권한이 요청의 암호화 컨텍스트가 "subscriberID": "111122223333""tableName": "Services" 쌍을 포함하는 경우에만 유효하게 만듭니다. 이 권한 부여 제약 조건은 이 권한 부여는 DynamoDB가 AWS 계정에서 특정 테이블에 대해서만 지정된 KMS 키를 사용할 수 있게 허용함을 의미입니다.

이 출력을 얻으려면 계정의 DynamoDB용 AWS 관리형 키에서 ListGrants 작업을 실행하십시오.

$ aws kms list-grants --key-id 0987dcba-09fe-87dc-65ba-ab0987654321 { "Grants": [ { "Operations": [ "Decrypt", "Encrypt", "GenerateDataKey", "ReEncryptFrom", "ReEncryptTo", "RetireGrant", "DescribeKey" ], "IssuingAccount": "arn:aws:iam::111122223333:root", "Constraints": { "EncryptionContextSubset": { "aws:dynamodb:tableName": "Services", "aws:dynamodb:subscriberId": "111122223333" } }, "CreationDate": 1518567315.0, "KeyId": "arn:aws:kms:us-west-2:111122223333:key/0987dcba-09fe-87dc-65ba-ab0987654321", "GranteePrincipal": "dynamodb.us-west-2.amazonaws.com", "RetiringPrincipal": "dynamodb.us-west-2.amazonaws.com", "Name": "8276b9a6-6cf0-46f1-b2f0-7993a7f8c89a", "GrantId": "1667b97d27cf748cf05b487217dd4179526c949d14fb3903858e25193253fe59" } ] }

CreateGrant 권한 부여

권한 부여에는 CreateGrant 호출할 수 있는 권한이 포함될 수 있습니다. 그러나 피부여자 보안 주체가 정책이 아닌 부여에서 CreateGrant를 호출할 수 있는 권한을 얻으면 해당 권한이 제한됩니다.

  • 피부여자 보안 주체는 상위 권한 부여의 일부 또는 모든 작업을 허용하는 부여만 생성할 수 있습니다.

  • 생성하는 권한 부여의 권한 부여 제약 조건은 최소한 상위 권한 부여의 제약 조건만큼 엄격해야 합니다.

정책 조건에 따라 권한이 제한될 수 있지만 이러한 제한은 정책에서 CreateGrant 권한을 받는 보안 주체에게는 적용되지 않습니다.

예를 들면, GenerateDataKey, DecryptCreateGrant 작업을 호출할 수 있게 하는 권한 부여를 고려하십시오. CreateGrant 권한을 허용하는 권한을 상위 권한 부여라고 합니다.

# The original grant in a ListGrants response. { "Grants": [ { "KeyId": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", "CreationDate": 1572216195.0, "GrantId": "abcde1237f76e4ba7987489ac329fbfba6ad343d6f7075dbd1ef191f0120514a", "Operations": [ "GenerateDataKey", "Decrypt", "CreateGrant ] "RetiringPrincipal": "arn:aws:iam::111122223333:role/adminRole", "Name": "", "IssuingAccount": "arn:aws:iam::111122223333:root", "GranteePrincipal": "arn:aws:iam::111122223333:user/exampleUser", "Constraints": { "EncryptionContextSubset": { "Department": "IT" } }, } ] }

피부여자 보안 주체인 exampleUser는 이 권한을 사용하여 CreateGrantDecrypt와 같이 원래 권한 부여에 지정된 작업의 하위 집합을 포함하는 권한 부여를 생성할 수 있습니다. 하위 권한 부여는 다른 다른 작업(예: ScheduleKeyDeletion 또는 ReEncrypt)을 포함할 수 없습니다.

또한, 하위 권한 부여에 대한 권한 부여 제약 조건 은 상위 권한 부여만큼 제한적이거나 더 제한적이어야 합니다. 예를 들어, 하위 권한 부여는 상위 권한 부여의 EncryptionContextSubset 제한 조건에 쌍을 추가 할 수 있지만 이를 제거 할 수는 없습니다. 하위 권한 부여는 EncryptionContextSubset 제약 조건을 EncryptionContextEquals 제약 조건으로 변경할 수 있지만 그 반대는 아닙니다.

예를 들어 피부여자 보안 주체는 상위 권한 부여에서 얻은 CreateGrant 권한을 사용하여 다음 하위 권한 부여를 생성할 수 있습니다. 하위 권한 부여의 작업은 상위 권한 부여 작업의 하위 집합이며 권한 부여 제약 조건은 더 제한적입니다.

# The child grant in a ListGrants response. { "Grants": [ { "KeyId": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", "CreationDate": 1572249600.0, "GrantId": "fedcba9999c1e2e9876abcde6e9d6c9b6a1987650000abcee009abcdef40183f", "Operations": [ "CreateGrant" "Decrypt" ] "RetiringPrincipal": "arn:aws:iam::111122223333:user/exampleUser", "Name": "", "IssuingAccount": "arn:aws:iam::111122223333:root", "GranteePrincipal": "arn:aws:iam::111122223333:user/anotherUser", "Constraints": { "EncryptionContextEquals": { "Department": "IT" } }, } ] }

하위 권한 부여 anotherUser의 피부여자 보안 주체는 CreateGrant 권한을 사용하여 권한 부여를 생성할 수 있습니다. 그러나, anotherUser가 생성하는 권한 부여는 상위 권한 부여 또는 하위 집합의 작업을 포함해야 하며 권한 부여 제약 조건은 동일하거나 더 엄격해야 합니다.