KMS 키 정책의 권한 점검 필요

KMS 키의 실제 권한을 검토하고 필요한 사용자·서비스로 제한하되 관리·복구 경로를 유지하세요.

설명

KMS 키 정책이 필요하지 않은 주체에게 복호화나 키 관리 권한을 허용하면 데이터 보호와 키 가용성에 영향을 줄 수 있습니다. 필요한 키 사용 작업과 관리 작업을 구분하고 실제 정책, IAM 권한과 KMS 권한 부여(grant)를 함께 검토하세요.

키 정책의 Resource: "*"는 모든 키가 아니라 그 정책이 연결된 키를 뜻합니다. API로 새 키를 만들 때 정책을 생략하면 소유 계정이 IAM 정책으로 권한을 위임할 수 있는 기본 키 정책이 적용됩니다. 기본 소유 계정 위임이나 필요한 관리 권한을 와일드카드라는 이유만으로 제거해서는 안 됩니다.

잠재적 영향

  • 불필요한 주체에게 실제 복호화나 관리 권한이 부여되면 데이터 접근 범위가 커지거나 키를 사용하는 서비스가 중단될 수 있습니다.
  • 필수 관리 권한을 지우면 키 정책을 다시 변경할 수 없게 될 수 있습니다. 형식적인 조건을 추가하는 것만으로 접근이 제한되지는 않습니다.

해결 방법

  1. 실제 키 정책과 필요한 사용자·역할·서비스를 확인하고 사용 작업과 관리 작업을 각각 최소화하세요. amazon.aws 11.4.0에서 기존 키의 정책을 생략하면 현재 정책은 유지됩니다.
  2. 필요한 주체·작업과 유효한 조건으로 접근을 제한하세요. kms:CallerAccount는 요청을 시작한 계정을, kms:ViaService는 주체를 대신해 요청하는 지원 AWS 서비스를 제한합니다. 실제 계정·리전·연결 방식에 맞는 값으로 허용과 거부를 시험하세요.
  3. 향후 kms:PutKeyPolicy를 호출할 관리 경로를 보존하고 잠금 방지 검사를 우회하지 마세요. 변경 후 키 관리, 복구와 필요한 서비스 접근을 확인하세요.

예시

my-kms-key는 실제 대상 별칭으로 바꾸세요. 변경 후의 key_account_id는 키 소유 계정이며 aws_region은 EC2/EBS가 키를 사용하는 리전입니다. 기존 정책의 필요한 문을 보존하고, 배포 주체가 IAM 권한을 통해 정책을 계속 관리할 수 있는지 적용 전에 확인하세요.

변경 전

yaml
- name: Update IAM policy on an existing KMS key
  amazon.aws.kms_key:
    alias: my-kms-key
    policy:
      Version: "2012-10-17"
      Id: auto-ebs-2
      Statement:
        - Action:
            - "kms:*"
          Effect: Allow
          Principal:
            AWS: "*"
          Resource: "*"
          Sid: Allow access through EBS for all principals
    state: present

주체와 작업을 모두 넓게 허용하며 사용 계정이나 서비스 조건을 지정하지 않습니다. 실제 적용되는 다른 통제도 함께 검토해야 합니다.

변경 후

yaml
- name: Update IAM policy on an existing KMS key
  amazon.aws.kms_key:
    alias: my-kms-key
    policy: |
      {
        "Id": "auto-ebs-2",
        "Statement": [
          {
            "Sid": "EnableIAMUserPermissions",
            "Effect": "Allow",
            "Principal": {"AWS": "arn:aws:iam::{{ key_account_id }}:root"},
            "Action": "kms:*",
            "Resource": "*"
          },
          {
            "Action": [
              "kms:Encrypt",
              "kms:Decrypt",
              "kms:ReEncrypt*",
              "kms:GenerateDataKey*",
              "kms:CreateGrant",
              "kms:DescribeKey"
            ],
            "Condition": {
              "StringEquals": {
                "kms:CallerAccount": "{{ key_account_id }}",
                "kms:ViaService": "ec2.{{ aws_region }}.amazonaws.com"
              }
            },
            "Effect": "Allow",
            "Principal": {
              "AWS": "*"
            },
            "Resource": "*",
            "Sid": "Allow controlled access through EBS"
          }
        ],
        "Version": "2012-10-17"
      }
    state: present

첫 문은 소유 계정의 IAM 권한 위임을 유지합니다. 두 번째 문은 지정 계정의 EC2/EBS 경유 사용으로 제한합니다. 필요한 사용·관리 권한과 기존 정책의 다른 문을 함께 검토하세요.

참조