AWS Landing Zone(Control Tower)에 대한 올바른 KMS 키 정책은 어떻게 보입니까?

AWS Landing Zone(Control Tower)에 대한 올바른 KMS 키 정책은 어떻게 보입니까?

저는 최근 Control Tower SNS 주제에 KMS 키를 수동으로 추가하여 Control Tower를 "파괴"했습니다. Control Tower가 스택을 확인하거나 업그레이드할 때 이는 잘 작동하지 않았습니다. 키를 제거하고 스택을 정상 상태로 만들어야 했지만 이제 SNS 주제가 암호화되지 않고 Security Hub가 만족스럽지 않습니다.

이전에는 SNS 주제에 사용할 KMS 키를 모든 조직 계정(각각 하나씩)에 배포했지만 이제는 랜딩 존 생성 또는 수정에 대한 키를 제공하면 Control Tower가 이 작업을 수행할 수 있다는 것을 이해합니다. 제가 이해한 바에 따르면 이 키는 마스터 계정의 단일 키여야 하며 최소한 Config 및 CloudTrail 서비스를 허용하지만 모든 계정에서도 사용할 수 있는 정책이 있어야 합니다.

누군가 저에게 그것이 어떻게 보일지에 대한 템플릿을 제공해 주시면 매우 감사하겠습니다. 부탁드립니다. 감사합니다. :)

답변1

나는 이것을 놔둘 수 없어서 테스트를 했고 다음이 좋은 해결책일 것 같다는 것을 발견했습니다.

내가 배운 핵심 포인트:

  • 서비스에는 "kms:GenerateDataKey" 권한만 필요한 것 같습니다.
  • *-와일드카드를 원할 경우 "StringEquals"가 아닌 "StringLike" 조건을 사용하세요.

이것선적 서류 비치꽤 유용했어요. "aws:SourceArn" 또는 "aws:SourceAccount"를 사용하는 정책을 만드는 데는 성공하지 못했지만 "kms:EncryptionContext:context"에서는 성공했습니다.

내 정책은 다음과 같습니다. 계정 번호가 수정되었습니다.

{
    "Version": "2012-10-17",
    "Id": "SNS-KMS-Key",
    "Statement": [
        {
            "Sid": "Key admin in mgmt account",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::112211221122:root"
            },
            "Action": "kms:*",
            "Resource": "*"
        },
        {
            "Sid": "AWS-services permissions in all accounts",
            "Effect": "Allow",
            "Principal": {
                "Service": [
                    "config.amazonaws.com",
                    "cloudtrail.amazonaws.com"
                ]
            },
            "Action": [
                "kms:GenerateDataKey",
                "kms:Encrypt",
                "kms:Decrypt",
                "kms:DescribeKey",
                "kms:ReEncrypt*"
            ],
            "Resource": "*"
        }
    ]
}

누군가가 이것이 유용하다고 생각하기를 바랍니다. 마지막 진술을 제한하기 위해 조건을 사용할 수 있고 사용해야 할 수도 있다고 생각합니다. 스스로 작동하지 못했습니다.

답변2

위의 답변을 조합하고 다음 AWS 서비스 역할이 키를 사용하도록 허용하여 이 작업을 수행할 수 있었습니다.

"arn:aws:iam::112211221122:role/service-role/AWSControlTowerConfigAggregatorRoleForOrganizations",
"arn:aws:iam::112211221122:role/service-role/AWSControlTowerStackSetRole",
"arn:aws:iam::112211221122:role/service-role/AWSControlTowerAdmin",
"arn:aws:iam::112211221122:role/service-role/AWSControlTowerCloudTrailRole"

이 모든 것이 필요한지 아닌지는 모르겠지만 그냥 추측했습니다.

관련 정보