Encryption Provider 설정 점검

암호화 provider의 순서와 키 관리를 확인해 실제 저장 데이터를 보호하세요.

설명

EncryptionConfiguration은 리소스별 첫 번째 provider로 새 데이터를 기록합니다. identity가 첫 번째이면 뒤에 암호화 provider가 있어도 해당 리소스의 새 데이터는 암호화되지 않습니다.

설정 파일은 존재 여부보다 내용이 더 중요합니다. 어떤 provider를 어떤 순서로 두는지까지 함께 검토해야 합니다.

잠재적 영향

  • Secret 등 민감한 리소스가 기대한 수준으로 암호화되지 않을 수 있습니다.
  • 암호화 설정이 있는 것처럼 보여도 실제 보호 효과가 부족할 수 있습니다.
  • 저장 데이터 보호 정책 준수 여부를 잘못 판단할 수 있습니다.

해결 방법

  • 요구사항에 맞는 암호화 provider를 첫 번째에 배치하세요. 외부 키 관리에는 KMS v2를 검토하고 로컬 키는 접근·교체·복구를 안전하게 관리하세요.
  • 기존 평문을 읽는 데 필요한 identity는 마이그레이션 중 뒤에 둘 수 있습니다. AES-GCM은 자동 키 교체 등 해당 방식의 운영 조건도 충족해야 합니다.
  • 모든 API 서버의 복호화 구성을 맞추고 기존 리소스를 안전하게 다시 기록한 뒤 암호화를 확인하세요. 기존 데이터에 필요한 키나 provider를 먼저 제거하지 마세요.

예시

provider 순서를 비교하는 예제입니다. 키는 공개된 설명용 값이므로 운영에 재사용하지 말고 새로 생성한 안전한 키로 바꾸세요. Secret API 읽기 권한과 설정 파일 접근도 별도로 제한해야 합니다.

변경 전

yaml
apiVersion: apiserver.config.k8s.io/v1
kind: EncryptionConfiguration
resources:
  - resources:
      - secrets
    providers:
      - identity: {}
      - aesgcm:
          keys:
            - name: key1
              secret: c2VjcmV0IGlzIHNlY3VyZQ==

변경 후

yaml
apiVersion: apiserver.config.k8s.io/v1
kind: EncryptionConfiguration
resources:
  - resources:
      - secrets
    providers:
      - secretbox:
          keys:
            - name: key1
              secret: YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoxMjM0NTY=
      - identity: {}
      - aesgcm:
          keys:
            - name: key1
              secret: c2VjcmV0IGlzIHNlY3VyZQ==
      - aescbc:
          keys:
            - name: key1
              secret: c2VjcmV0IGlzIHNlY3VyZQ==

설명:

  • 변경 전: identity가 첫 번째이므로 새 Secret이 암호화되지 않습니다.
  • 변경 후: secretbox를 첫 번째로 두어 새 쓰기를 암호화합니다. 뒤의 provider는 기존 데이터 읽기에 사용될 수 있으며 기존 데이터는 자동으로 다시 암호화되지 않습니다.

참조