KMS 키 접근 정책 점검

필요한 키 사용 권한을 제한하고 키 관리 경로를 유지하세요.

설명

KMS 키 정책에서 필요 이상의 주체나 작업을 허용하면 데이터 복호화나 키 관리 권한이 과도하게 부여될 수 있습니다. 키 사용 권한과 관리 권한을 구분하고 IAM 정책·권한 부여와 함께 실제 접근을 확인하세요.

키 정책을 생략하면 AWS가 계정의 IAM 권한 위임을 허용하는 기본 정책을 적용합니다. 이는 모든 주체에게 공개하는 정책과 다릅니다. 키 정책의 Resource: "*"는 연결된 이 키를 뜻합니다.

잠재적 영향

  • 불필요한 복호화 권한은 해당 키로 보호한 데이터의 노출로 이어질 수 있습니다.
  • 과도한 정책 변경·키 비활성화 권한이나 관리 권한의 실수로 인한 삭제는 데이터 접근과 복구를 중단시킬 수 있습니다.

해결 방법

  • 키 사용자는 필요한 주체와 암호화 작업으로 제한하고 관리 권한은 신뢰할 수 있는 별도 경로로 통제하세요.
  • 실제 서비스 요구에 맞는 조건을 검토하고 키 정책, IAM 정책과 grants를 함께 확인하세요.
  • 정책 변경 전에 키 관리자와 배포 주체의 관리 권한을 보존하고 필요한 암호화·복호화와 불필요한 접근 차단을 시험하세요.

예시

키 정책 비교입니다. 예시 계정 ID와 사용자 ARN을 실제 승인된 값으로 바꾸세요. 계정의 IAM 권한 위임 문구는 관리 경로를 유지하므로 이를 사용하는 IAM 정책도 최소 권한으로 관리해야 합니다.

변경 전

hcl
resource "aws_kms_key" "kms_key" {
  description             = "KMS key 1"
  deletion_window_in_days = 10

  policy = <<POLICY
  {
    "Version": "2012-10-17",
    "Statement":[
      {
        "Effect":"Allow",
        "Principal": {"AWS":"*"},
        "Action":["kms:*"],
        "Resource":"*"
      }
    ]
  }
  POLICY
}

와일드카드 주체에 kms:*를 허용합니다. 실제 요청에 적용되는 다른 권한 통제도 검토하면서, 이처럼 광범위한 허용을 제거하거나 축소하세요.

변경 후

hcl
resource "aws_kms_key" "kms_key" {
  description             = "KMS key 1"
  deletion_window_in_days = 10

  policy = <<POLICY
  {
    "Version": "2012-10-17",
    "Statement":[
      {
        "Sid": "EnableAccountIAMPermissions",
        "Effect": "Allow",
        "Principal": {"AWS": "arn:aws:iam::111122223333:root"},
        "Action": "kms:*",
        "Resource": "*"
      },
      {
        "Effect":"Allow",
        "Principal": {"AWS": [
          "arn:aws:iam::111122223333:user/CMKUser"
        ]},
        "Action": [
          "kms:Encrypt",
          "kms:Decrypt",
          "kms:ReEncrypt*",
          "kms:GenerateDataKey*",
          "kms:DescribeKey"
        ],
        "Resource":"*"
      }
    ]
  }
  POLICY
}

계정의 IAM 권한 위임을 유지하고 지정한 사용자에게 열거한 키 사용 작업을 허용합니다. 열거한 작업도 실제 요구에 맞게 줄여야 합니다.

참조