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

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

키 액세스 문제 해결

(고객 마스터 키)에 대한 액세스 권한을 부여할 때 CMK는 다음을 평가합니다.AWS KMS

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


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

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

  • Use authorization(권한 부여 사용)은 키 정책, CMK 정책, 권한 부여 및 기타 적용 가능한 정책에 따라 IAM 사용이 허용되는지 여부를 결정합니다.

  • 키 신뢰에 따라 사용자가 사용할 수 있는 CMK를 신뢰해야 하는지 여부가 결정됩니다. 일반적으로 사용자는 본인의 AWS AWS 계정에 있는 리소스를 신뢰합니다. 하지만 본인 계정의 권한 부여 또는 CMKs 정책에서 AWS를 사용할 수 있는 경우, 다른 IAM 계정의 CMK를 사용할 수도 있습니다.

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

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

예 1: 사용자가 CMK 계정에서 AWS에 액세스할 수 없음

Alice는 111122223333 AWS 계정의 IAM 사용자입니다. Alice는 동일한 CMK 계정에서 AWS에 대한 액세스가 거부되었습니다. Alice가 CMK를 사용할 수 없는 이유는 무엇입니까?

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


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

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

  • Alice가 사용할 CMK에는 기본 키 정책이 있습니다. 이 정책은 를 소유하는 AWS 계정이 CMK 정책을 사용하여 IAM에 대한 액세스를 제어하도록 허용합니다.CMK 이 키 정책은 흐름 차트에 있는 키 정책에서 호출자의 계정이 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 정책이 없고 CMK 사용 권한도 부여되지 않았습니다. 따라서 Alice는 CMK 사용 권한이 거부됩니다.

예 2: 사용자가 다른 CMK 계정에서 AWS를 사용할 권한이 있는 역할을 수임

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

작은 정보

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

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

  • 계정 2의 CMK에 대한 키 정책은 계정 1이 암호화 작업에서 CMK를 사용하도록 허용합니다. 그러나 계정 1은 IAM 정책을 사용하여 해당 보안 주체에 CMK에 대한 액세스 권한을 부여해야 합니다.

  • 계정 1의 IAM 정책을 사용하면 Engineering 역할이 암호화 작업에 계정 2의 CMK를 사용할 수 있습니다.

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

  • Bob은 이 CMK이 본인의 계정에는 없지만 계정의 IAM 정책에 따라 이 CMK을 사용할 수 있는 명시적 권한을 부여받으므로 이 을 신뢰할 수 있습니다.


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

계정 1의 사용자인 Bob이 계정 2에서 CMK를 사용하도록 허용하는 정책을 살펴보겠습니다.

  • 에 대한 키 정책을 사용하면 계정 2(CMK를 소유한 계정인 444455556666)가 CMK 정책을 사용하여 IAM에 대한 액세스를 제어할 수 있습니다.CMK 또한 이 키 정책은 계정 1(111122223333)이 정책 설명의 CMK 요소에 지정된 암호화 작업에서 Action를 사용하도록 허용합니다. 하지만 계정 1이 CMK에 대한 액세스 권한을 보안 주체에 부여하는 IAM 정책을 정의할 때까지는 계정 1의 어떤 사용자도 계정 2의 CMK를 사용할 수 없습니다.

    이 흐름 차트에서 계정 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 CMK", "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": "*" } ] }
  • 호출자의 IAM 계정(계정 1, AWS)에 있는 111122223333 정책은 보안 주체에게 계정 2(CMK)에서 444455556666를 사용하여 암호화 작업을 수행할 수 있는 권한을 부여합니다. 요소는 계정 2의 키 정책이 계정 1에 제공한 것과 동일한 권한을 보안 주체에 위임합니다.Action 계정 1의 Engineering 역할에 이러한 권한을 부여하려면 역할에 이 인라인 정책이 포함되어 있어야 합니다Engineering.

    이와 같은 교차 계정 IAM 정책은 계정 2의 CMK에 대한 키 정책이 계정 1에 CMK를 사용할 권한을 부여하는 경우에만 유효합니다. 또한 계정 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" } }