적용된 암호화 규칙을 위반하는 객체 재암호화

이 페이지에서는 Storage Intelligence 어드바이저를 사용하여 버킷의 암호화 시행 구성을 위반하는 객체를 식별하고 다시 암호화하는 방법을 설명합니다.

버킷의 암호화 유형을 적용하거나 제한하면 Cloud Storage는 버킷의 모든 새 객체 또는 재작성된 객체에 해당 구성을 적용합니다. 하지만 Cloud Storage는 구성이 적용되기 전에 업로드한 기존 객체를 자동으로 다시 암호화하지 않습니다. 이러한 객체는 원래 암호화 방법으로 암호화된 상태로 유지됩니다. 사용 가능한 암호화 방법에 대한 자세한 내용은 데이터 암호화 옵션을 참조하세요.

Storage Intelligence 어드바이저는 버킷에 제한된 암호화 방법을 사용하는 객체가 포함된 경우 객체가 적용된 암호화 규칙을 위반함 발견 항목을 표시합니다. 발견 항목은 측정항목 및 객체 메타데이터에서 감지된 이상치 또는 보안 구성 격차로, 주의가 필요합니다. Storage Intelligence 어드바이저에 대한 개요는 Storage Intelligence 어드바이저 정보를 참조하세요. 전체 발견 항목 목록은 발견 항목 참조 카탈로그를 참조하세요.

발견 항목을 트리거하는 기준점

Storage Intelligence를 사용 설정하면 Cloud Storage가 프로젝트, 폴더 또는 조직 전반의 버킷 수준 암호화 시행 구성에 따라 객체 수준 암호화 메타데이터를 자동으로 평가합니다. Storage Intelligence 어드바이저는 버킷이 다음 기준을 모두 충족할 때 발견 항목을 생성합니다.

  • 버킷은 enforcedEncryptionAllowedTypes 구성에서 표준 암호화 (Google 기본 암호화 또는 GMEK), 고객 관리 암호화 키 (CMEK) 또는 고객 제공 암호화 키 (CSEK)와 같은 하나 이상의 암호화 방법을 제한합니다.
  • 버킷에 encryptionType 메타데이터 필드가 버킷의 enforcedEncryptionAllowedTypes 목록에 없는 객체가 하나 이상 포함되어 있습니다.

초기 기준 발견 사항은 Storage Intelligence를 사용 설정한 후 48시간 이내에 표시되며 24시간마다 새로고침됩니다. 알림 양을 줄이기 위해 Storage Intelligence 어드바이저는 대시보드에서 버킷별로 객체 수준 위반을 집계합니다. Storage Insights 데이터 세트에서 객체 수준 암호화 메타데이터를 쿼리할 수 있습니다.

발견 항목에 대응

발견 항목에 대응하려면 각 버킷에서 영향을 받는 객체를 식별하고 허용된 암호화 방법으로 규정을 준수하지 않는 객체를 다시 작성합니다.

  1. 발견 항목 세부정보를 확인하여 영향을 받는 버킷과 허용되는 암호화 유형 (CMEK, GMEK 또는 CSEK)을 식별합니다.

  2. 선택사항: 적용된 암호화 구성을 위반하는 영향을 받는 버킷의 객체를 나열하려면 BigQuery에서 Storage Insights 데이터 세트를 쿼리합니다. 연결된 데이터 세트를 구성하지 않은 경우 Storage Insights 데이터 세트 구성을 참조하세요.

    SELECT
      bucket,
      name,
      encryptionType
    FROM
      `DATASET_NAME.object_attributes_latest_snapshot_view`
    WHERE
      bucket = 'BUCKET_NAME'
      AND encryptionType NOT IN (ALLOWED_ENCRYPTION_TYPES)
      AND timeDeleted IS NULL
      AND softDeleteTime IS NULL;

    다음을 바꿉니다.

    • DATASET_NAME: BigQuery의 Storage Insights 연결된 데이터 세트의 이름입니다.
    • BUCKET_NAME: 영향을 받는 버킷의 이름입니다.
    • ALLOWED_ENCRYPTION_TYPES: 버킷에서 허용하는 암호화 유형의 쉼표로 구분된 목록입니다(예: 'CMEK' 또는 'CMEK', 'GMEK').
  3. 다음 표를 사용하여 실시간 객체의 재암호화 방법을 선택합니다.

    시나리오 권장 조치 세부정보
    버킷에서 고객 관리 암호화 키 (CMEK) 허용 CMEK로 객체 재암호화 실시간 GMEK 객체의 경우 BigQuery에서 CSV 매니페스트 파일을 내보내고 스토리지 일괄 작업 작업을 실행하여 Cloud KMS 키로 객체를 재작성합니다. CSEK로 암호화된 객체의 경우 gcloud storage objects update 명령어를 실행합니다.
    버킷에서 표준 암호화 허용 (GMEK) 표준 암호화 (GMEK)로 객체 재암호화 버킷에 기본 Cloud KMS 키가 없는지 확인한 다음 --clear-encryption-key 플래그와 함께 gcloud storage objects update 명령어를 사용하여 영향을 받는 객체를 표준 암호화로 다시 작성합니다.
    버킷에서 고객 제공 암호화 키 (CSEK)만 허용 CSEK로 객체 재암호화 --encryption-key 플래그와 함께 gcloud storage objects update 명령어를 사용하여 영향을 받는 객체를 AES-256 암호화 키로 다시 작성합니다.

    버킷에서 규정을 준수하지 않는 모든 객체를 다시 암호화하면 다음 24시간 새로고침 주기 동안 해당 버킷의 발견 항목이 삭제됩니다. 하지만 다음 경우에는 사용자 또는 Cloud Storage가 보관된 객체 버전을 영구적으로 삭제할 때까지 발견 사항이 활성 상태로 유지됩니다.

CMEK로 객체 재암호화

버킷에서 고객 관리 암호화 키 (CMEK)를 허용하는 경우 현재 암호화 방법을 기반으로 영향을 받는 객체를 다시 암호화합니다.

스토리지 일괄 작업을 사용하여 GMEK로 암호화된 객체를 대규모로 재암호화

GMEK로 암호화된 객체를 CMEK로 대규모로 다시 암호화하려면 BigQuery에서 CSV 매니페스트 파일을 내보내고 스토리지 일괄 작업을 실행합니다.

  1. BigQuery에서 다음 EXPORT DATA 쿼리를 실행하여 표준 암호화 (GMEK)를 사용하는 영향을 받는 라이브 객체에 대해 Storage Insights 데이터 세트를 사용하여 CSV 매니페스트를 만듭니다.

    EXPORT DATA OPTIONS(
      uri='gs://DESTINATION_BUCKET/manifests/objects_violating_enforced_policies_*.csv',
      format='CSV',
      overwrite=true,
      header=true
    ) AS
    SELECT
      bucket,
      name
    FROM
      `DATASET_NAME.object_attributes_latest_snapshot_view`
    WHERE
      bucket = 'BUCKET_NAME'
      AND encryptionType = 'GMEK'
      AND timeDeleted IS NULL
      AND softDeleteTime IS NULL;

    다음을 바꿉니다.

    • DESTINATION_BUCKET: 내보낸 CSV 매니페스트 파일을 저장할 Cloud Storage 버킷의 이름입니다.
    • DATASET_NAME: BigQuery의 Storage Insights 연결된 데이터 세트의 이름입니다.
    • BUCKET_NAME: 영향을 받는 버킷의 이름입니다.
  2. 스토리지 일괄 작업 기본 요건을 완료하고 관리자에게 다음 두 서비스 에이전트 모두에 Cloud KMS 키에 대한 Cloud KMS CryptoKey 암호화/복호화 역할(roles/cloudkms.cryptoKeyEncrypterDecrypter)을 부여해 달라고 요청합니다.

    • 스토리지 일괄 작업 서비스 에이전트(service-PROJECT_NUMBER@gcp-sa-storagebatchoperations.iam.gserviceaccount.com)
    • Cloud Storage 서비스 에이전트(service-PROJECT_NUMBER@gs-project-accounts.iam.gserviceaccount.com)

    PROJECT_NUMBER를 버킷이 포함된 프로젝트의 프로젝트 번호로 바꿉니다.

  3. gcloud storage batch-operations jobs create 명령어를 실행하여 매니페스트 파일을 사용하여 Storage 일괄 작업 작업을 만들고 Cloud KMS 키로 객체를 다시 작성합니다. 객체를 수정하기 전에 작업 구성을 확인하려면 --dry-run 플래그를 포함합니다.

    gcloud storage batch-operations jobs create JOB_NAME \
      --bucket="BUCKET_NAME" \
      --manifest-location="gs://DESTINATION_BUCKET/manifests/objects_violating_enforced_policies_*.csv" \
      --rewrite-object="kms-key=KMS_KEY"

    다음을 바꿉니다.

    • JOB_NAME: 일괄 작업의 고유 ID입니다(예: re-encrypt-objects-job).
    • BUCKET_NAME: 영향을 받는 버킷의 이름입니다.
    • DESTINATION_BUCKET: 내보낸 매니페스트 파일이 포함된 버킷의 이름입니다.
    • KMS_KEY: 객체를 암호화하는 데 사용할 Cloud KMS 키의 리소스 이름입니다. 키는 버킷과 동일한 위치에 있어야 하며 projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/CRYPTO_KEY 형식을 사용해야 합니다.

Google Cloud CLI를 사용하여 CSEK 암호화 객체 재암호화

Google Cloud 는 고객 제공 암호화 키 (CSEK)를 저장하지 않으므로 스토리지 일괄 작업은 CSEK 암호화 객체를 복호화할 수 없습니다. CSEK로 암호화된 객체를 CMEK로 재암호화하려면 --decryption-keys 및 --encryption-key 플래그를 모두 사용하여 gcloud storage objects update 명령어를 실행합니다.

gcloud storage objects update gs://BUCKET_NAME/OBJECT_NAME \
  --decryption-keys=DECRYPTION_KEY \
  --encryption-key=KMS_KEY

다음을 바꿉니다.

  • BUCKET_NAME: 영향을 받는 버킷의 이름입니다.
  • OBJECT_NAME: 다시 암호화하려는 CSEK로 암호화된 객체의 이름입니다. 단일 명령어에서 여러 객체를 업데이트하려면 URI 와일드 카드 또는 --read-paths-from-stdin (-I) 플래그를 사용합니다.
  • DECRYPTION_KEY: 객체를 암호화하는 RFC 4648 base64로 인코딩된 AES-256 키입니다.
  • KMS_KEY: 객체를 암호화하는 데 사용할 Cloud KMS 키의 리소스 이름입니다(projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/CRYPTO_KEY 형식).

표준 암호화 (GMEK)로 객체 재암호화

표준 암호화 (Google 기본 암호화 또는 GMEK)로 객체를 다시 암호화하려면 버킷에 기본 Cloud KMS 키가 없는지 확인하고 영향을 받는 각 객체에서 커스텀 암호화 키를 지웁니다.

  1. 버킷에 기본 Cloud KMS 키가 없는지 확인합니다. 객체의 커스텀 암호화 키를 삭제하면 Cloud Storage는 버킷에 기본 Cloud KMS 키가 없는 경우에만 표준 암호화 (GMEK)로 객체를 암호화합니다. 버킷에 기본 Cloud KMS 키가 있는 경우 Cloud Storage는 해당 키로 객체를 암호화합니다. 버킷이 CMEK도 제한하는 경우 재작성이 실패합니다.

    버킷에서 기본 Cloud KMS 키를 삭제하려면 --clear-default-encryption-key 플래그와 함께 gcloud storage buckets update 명령어를 실행합니다.

    gcloud storage buckets update gs://BUCKET_NAME \
      --clear-default-encryption-key

    BUCKET_NAME을 영향을 받는 버킷의 이름으로 바꿉니다.

  2. gcloud storage objects update 명령어를 --clear-encryption-key 플래그와 함께 사용하여 영향을 받는 객체를 표준 암호화로 다시 작성합니다. 객체가 고객 제공 암호화 키 (CSEK)로 암호화된 경우 --decryption-keys 플래그도 포함합니다.

    gcloud storage objects update gs://BUCKET_NAME/OBJECT_NAME \
      --clear-encryption-key \
      [--decryption-keys=DECRYPTION_KEY]

    다음을 바꿉니다.

    • BUCKET_NAME: 영향을 받는 버킷의 이름입니다.
    • OBJECT_NAME: 다시 암호화하려는 객체의 이름입니다. 단일 명령어에서 여러 객체를 업데이트하려면 URI 와일드 카드 (예: gs://BUCKET_NAME/**) 또는 --read-paths-from-stdin (-I) 플래그를 사용합니다.
    • DECRYPTION_KEY: 객체가 CSEK로 암호화된 경우 객체를 암호화하는 RFC 4648 base64로 인코딩된 AES-256 키입니다. 객체가 CMEK로 암호화된 경우 --decryption-keys 플래그를 생략합니다.

CSEK로 객체 재암호화

버킷에서 고객 제공 암호화 키 (CSEK)만 허용하는 경우 --encryption-key 플래그와 함께 gcloud storage objects update 명령어를 사용하여 영향을 받는 객체를 AES-256 암호화 키로 다시 작성합니다. 객체가 다른 CSEK로 암호화된 경우 --decryption-keys 플래그도 포함합니다.

gcloud storage objects update gs://BUCKET_NAME/OBJECT_NAME \
  --encryption-key=YOUR_ENCRYPTION_KEY \
  [--decryption-keys=DECRYPTION_KEY]

다음을 바꿉니다.

  • BUCKET_NAME: 영향을 받는 버킷의 이름입니다.
  • OBJECT_NAME: 다시 암호화하려는 객체의 이름입니다. 단일 명령어에서 여러 객체를 업데이트하려면 URI 와일드 카드 또는 --read-paths-from-stdin (-I) 플래그를 사용합니다.
  • YOUR_ENCRYPTION_KEY: RFC 4648 base64로 인코딩된 AES-256 암호화 키 문자열입니다.
  • DECRYPTION_KEY: 객체가 다른 CSEK로 암호화된 경우 객체를 암호화하는 RFC 4648 base64로 인코딩된 AES-256 키입니다. 객체가 GMEK 또는 CMEK로 암호화된 경우 --decryption-keys 플래그를 생략합니다.

다음 단계