키 액세스 문제 해결 - AWS Key Management Service

키 액세스 문제 해결

KMS 키에 대한 액세스 권한을 부여할 때 AWS KMS는 다음을 평가합니다.

  • KMS 키에 연결된 키 정책. 키 정책은 항상 KMS 키를 소유하는 AWS 계정 및 리전에서 정의됩니다.

  • 요청을 수행하는 IAM 사용자 또는 역할에 연결된 모든 IAM 정책. 보안 주체의 KMS 키 사용을 제어하는 IAM 정책은 항상 해당 보안 주체의 AWS 계정입니다.

  • KMS 키에 적용되는 모든 권한 부여

  • KMS 키를 사용하라는 요청에 적용될 수 있는 다른 유형의 정책(예:AWS Organizations 서비스 제어 정책VPC 엔드포인트 정책). 이러한 정책은 선택 사항이며 기본적으로 모든 작업을 허용하지만 보안 주체에 부여된 권한을 제한하는 데 사용할 수 있습니다.

AWS KMS는 이러한 정책 메커니즘을 함께 평가하여 KMS 키에 대한 액세스가 허용되거나 거부되는지 여부를 결정합니다. 이를 위해 AWS KMS에서는 다음 흐름 차트에 나온 것과 유사한 프로세스를 사용합니다. 다음 흐름 차트에는 정책 평가 프로세스가 시각적으로 표시됩니다.


      정책 평가 프로세스를 보여 주는 흐름 차트

이 흐름 차트는 두 부분으로 나뉩니다. 각 부분은 차례로 표시되지만 대개 동시에 평가됩니다.

  • 권한 부여 사용에서는 해당 키 정책, IAM 정책, 권한 부여 및 기타 적용 가능한 정책을 기준으로 KMS 키 사용이 허용되는지 여부를 확인합니다.

  • 키 신뢰에서는 사용이 허용된 KMS 키를 신뢰해야 하는지 여부를 결정합니다. 일반적으로 사용자는 본인의 AWS 계정에 있는 리소스를 신뢰합니다. 하지만 본인 계정의 권한이나 IAM 정책에서 허용하는 KMS 키라면 다른 AWS 계정의 KMS 키도 신뢰할 수 있습니다.

이 흐름 차트를 통해 호출자의 KMS 키 사용 권한이 부여되거나 거부된 이유를 확인할 수 있습니다. 사용자의 정책과 권한을 평가할 수도 있습니다. 예를 들어 이 흐름 차트에서는 키 정책, IAM 정책 또는 권한 부여에 명시적 DENY 문이 있거나 명시적 ALLOW 문이 없어서 호출자의 액세스가 거부될 수 있음을 보여줍니다.

이 흐름 차트를 사용하여 몇 가지 일반적인 권한 시나리오를 설명하겠습니다.

예제 1: 사용자가 자신의 AWS 계정으로 KMS 키에 액세스할 수 없음

Alice는 111122223333 AWS 계정의 IAM 사용자입니다. Alice는 동일한 AWS 계정의 KMS 키에 액세스할 수 없습니다. Alice가 KMS 키를 사용할 수 없는 이유는 무엇입니까?

이 경우 Alice는 본인에게 필요한 권한을 제공하는 권한 부여, IAM 정책 또는 키 정책이 없으므로 KMS 키에 대한 액세스가 거부됩니다. KMS 키의 키 정책은 AWS 계정에서 IAM 정책을 사용하여 KMS 키에 대한 액세스를 제어할 수 있지만, 어떤 IAM 정책도 Alice에게 KMS 키를 사용할 수 있는 권한을 부여하지 않습니다.


               정책 평가 프로세스를 보여 주는 흐름 차트

이 예제와 관련된 정책을 살펴보겠습니다.

  • Alice가 사용할 KMS 키에는 기본 키 정책이 있습니다. 이 정책은 KMS 키를 소유한 AWS 계정이 IAM 정책을 사용하여 KMS 키에 대한 액세스를 제어하도록 허용합니다. 이 키 정책은 순서도에 있는 키 정책으로 인해 호출자의 계정이 IAM 정책을 사용하여 키에 대한 액세스를 제어할 수 있습니까? 조건을 충족합니다.

    { "Version" : "2012-10-17", "Id" : "key-test-1", "Statement" : [ { "Sid" : "Delegate to IAM policies", "Effect" : "Allow", "Principal" : { "AWS" : "arn:aws:iam::111122223333:root" }, "Action" : "kms:*", "Resource" : "*" } ] }
  • 그러나 Alice에게는 키 정책, IAM 정책이 없고 KMS 키사용 권한도 부여되지 않았습니다. 따라서 Alice가 KMS 키를 사용할 수 있는 권한이 거부됩니다.

예제 2: 사용자가 다른 AWS 계정에서 KMS 키를 사용할 수 있는 권한이 있는 역할 담당

Bob은 계정 1(111122223333)의 사용자입니다. Bob은 암호화 작업에서 계정 2(444455556666)의 KMS 키를 사용할 수 있습니다. 이렇게 할 수 있는 이유는 무엇입니까?

작은 정보

교차 계정 권한을 평가할 때는 키 정책이 KMS 키의 계정에 지정되어 있다는 점을 명심하십시오. IAM 정책은 호출자가 다른 계정에 속하더라도 호출자의 계정에 지정됩니다. KMS 키에 대한 교차 계정 액세스를 제공하는 방법에 대한 자세한 내용은 다른 계정의 사용자가 CMK를 사용하도록 허용 단원을 참조하십시오.

  • 계정 2의 KMS 키에 대한 키 정책에 따라 계정 2는 IAM 정책을 사용하여 KMS 키에 대한 액세스를 제어할 수 있습니다.

  • 계정 2의 KMS 키에 대한 키 정책을 통해 계정 1이 암호화 작업에서 KMS 키를 사용할 수 있습니다. 그러나 계정 1은 IAM 정책을 사용하여 KMS 키에 액세스할 수 있는 권한을 해당 보안 주체에 제공해야 합니다.

  • 계정 1의 IAM 정책은 Engineering 역할이 암호화 작업에 계정 2의 KMS 키를 사용하도록 허용합니다.

  • 계정 1의 사용자인 Bob은 Engineering 역할을 맡을 수 있는 권한을 가집니다.

  • Bob은 이 KMS 키를 신뢰할 수 있습니다. 이 키가 그의 계정에 없는 경우에도 그의 계정에 있는 IAM 정책이 이 KMS 키를 사용할 수 있는 명시적 권한을 부여하기 때문입니다.


               정책 평가 프로세스를 보여 주는 흐름 차트

계정 1의 사용자인 Bob이 계정 2로 KMS 키를 사용할 수 있도록 허용하는 정책을 살펴보겠습니다.

  • KMS 키의 키 정책에 따라 계정 2(444455556666, KMS 키를 소유 계정)가 IAM 정책을 사용하여 KMS 키에 대한 액세스를 제어할 수 있습니다. 또한 이 키 정책을 통해 계정 1(111122223333)이 정책문의 Action 요소에 지정된 암호화 작업에 KMS 키를 사용할 수 있습니다. 그러나 계정 1이 KMS 키 액세스 권한을 보안 주체에 제공하는 IAM 정책을 정의할 때까지는 계정 1의 어떤 사용자도 계정 2로 KMS 키를 사용할 수 없습니다.

    이 흐름 차트에서 계정 2의 이 키 정책은 키 정책에서 호출자의 계정이 IAM 정책을 사용하여 키 액세스를 제어하도록 허용하는가? 조건을 충족합니다.

    { "Id": "key-policy-acct-2", "Version": "2012-10-17", "Statement": [ { "Sid": "Permission to use IAM policies", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::444455556666:root" }, "Action": "kms:*", "Resource": "*" }, { "Sid": "Allow account 1 to use this KMS key", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:root" }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncryptFrom", "kms:ReEncryptTo", "kms:GenerateDataKey", "kms:GenerateDataKeyWithoutPlaintext", "kms:DescribeKey" ], "Resource": "*" } ] }
  • 호출자 AWS 계정(계정 1, 111122223333)의 IAM 정책은 계정 2(444455556666)의 KMS 키를 사용하여 암호화 작업을 수행할 수 있는 권한을 보안 주체에게 부여합니다. Action 요소는 계정 2의 키 정책이 계정 1에 부여한 것과 동일한 권한을 보안 주체에게 위임합니다. 계정 1의 Engineering 역할에 이러한 권한을 부여하기 위해 이 인라인 정책이 Engineering 역할에 포함됩니다.

    이와 같은 계정 간 IAM 정책은 계정 2의 KMS 키에 대한 키 정책이 KMS 키를 사용할 수 있는 권한을 계정 1에 제공할 때에만 적용됩니다. 또한 계정 1은 키 정책이 계정에 제공한 작업을 수행할 수 있는 권한만 해당 보안 주체에 제공할 수 있습니다.

    이것은 흐름 차트에서 IAM 정책에서 호출자가 이 작업을 수행하도록 허용하는가? 조건을 충족합니다.

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncryptFrom", "kms:ReEncryptTo", "kms:GenerateDataKey", "kms:GenerateDataKeyWithoutPlaintext", "kms:DescribeKey" ], "Resource": [ "arn:aws:kms:us-west-2:444455556666:key/1234abcd-12ab-34cd-56ef-1234567890ab" ] } ] }
  • 마지막 필수 요소는 계정 1의 Engineering 역할 정의입니다. 역할의 AssumeRolePolicyDocument에 따라 Bob은 Engineering 역할을 맡을 수 있습니다.

    { "Role": { "Arn": "arn:aws:iam::111122223333:role/Engineering", "CreateDate": "2019-05-16T00:09:25Z", "AssumeRolePolicyDocument": { "Version": "2012-10-17", "Statement": { "Principal": { "AWS": "arn:aws:iam::111122223333:user/bob" }, "Effect": "Allow", "Action": "sts:AssumeRole" } }, "Path": "/", "RoleName": "Engineering", "RoleId": "AROA4KJY2TU23Y7NK62MV" } }