Vuelve a encriptar los objetos que incumplen las reglas de encriptación aplicadas

En esta página, se describe cómo usar el asesor de Storage Intelligence para identificar y volver a encriptar los objetos que incumplen la configuración de aplicación de la encriptación en su bucket.

Cuando aplicas o restringes los tipos de encriptación de un bucket, Cloud Storage aplica esa configuración a todos los objetos nuevos o reescritos en el bucket. Sin embargo, Cloud Storage no vuelve a encriptar de forma automática los objetos existentes que subiste antes de que se aplicara la configuración. Esos objetos permanecen encriptados con su método de encriptación original. Para obtener más información sobre los métodos de encriptación disponibles, consulta Opciones de encriptación de datos.

El asesor de Storage Intelligence muestra el hallazgo Los objetos incumplen las reglas de encriptación aplicadas cuando un bucket contiene objetos que usan un método de encriptación restringido. Un hallazgo es una anomalía o una brecha en la configuración de seguridad que se detecta a partir de tus métricas y metadatos de objetos que requieren tu atención. Para obtener una descripción general del asesor de Storage Intelligence, consulta Acerca del asesor de Storage Intelligence. Para obtener una lista completa de los hallazgos, consulta el catálogo de referencia de hallazgos.

Umbrales que activan un hallazgo

Cuando habilitas Storage Intelligence, Cloud Storage evalúa automáticamente los metadatos de encriptación a nivel de objeto en función de los parámetros de configuración de aplicación de la encriptación a nivel de bucket en tu proyecto, carpeta u organización. El asesor de Storage Intelligence genera un hallazgo cuando un bucket cumple con los siguientes criterios:

  • El bucket restringe uno o más métodos de encriptación en su configuración enforcedEncryptionAllowedTypes, como la encriptación estándar (encriptación predeterminada de Google o GMEK), las claves de encriptación administradas por el cliente (CMEK) o las claves de encriptación proporcionadas por el cliente (CSEK).
  • El bucket contiene al menos un objeto en el que el campo de metadatos encryptionType no está en la lista enforcedEncryptionAllowedTypes del bucket.

Los hallazgos de referencia iniciales aparecen en un plazo de 48 horas después de habilitar Storage Intelligence y se actualizan cada 24 horas. Para reducir el volumen de alertas, el asesor de Storage Intelligence agrega los incumplimientos a nivel de objeto por bucket en tu panel. Puedes consultar los metadatos de encriptación a nivel de objeto en los conjuntos de datos de Storage Insights.

Responde a un hallazgo

Para responder al hallazgo, identifica los objetos afectados en cada bucket y vuelve a escribir los objetos que no cumplen con los requisitos con un método de encriptación permitido:

  1. Consulta los detalles del hallazgo para identificar los buckets afectados y sus tipos de encriptación permitidos (CMEK, GMEK o CSEK).

  2. Opcional: Para enumerar los objetos de un bucket afectado que incumple la configuración de encriptación aplicada, consulta tu conjunto de datos de Storage Insights en BigQuery. Si no configuraste un conjunto de datos vinculado, consulta Configura conjuntos de datos de 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;

    Reemplaza lo siguiente:

    • DATASET_NAME: Es el nombre de tu conjunto de datos vinculado de Storage Insights en BigQuery.
    • BUCKET_NAME: Es el nombre del bucket afectado.
    • ALLOWED_ENCRYPTION_TYPES: Es una lista separada por comas de los tipos de encriptación que permite el bucket, como 'CMEK' o 'CMEK', 'GMEK'.
  3. Usa la siguiente tabla para seleccionar el método de reencriptación de tus objetos activos:

    Situación Acción recomendada Detalles
    El bucket permite claves de encriptación administradas por el cliente (CMEK) Vuelve a encriptar los objetos con CMEK Para los objetos GMEK activos, exporta archivos de manifiesto CSV desde BigQuery y ejecuta un trabajo de operaciones por lotes de Storage para volver a escribir los objetos con una clave de Cloud KMS. Para los objetos encriptados con CSEK, ejecuta el comando gcloud storage objects update.
    El bucket permite la encriptación estándar (GMEK) Vuelve a encriptar objetos con la encriptación estándar (GMEK) Verifica que el bucket no tenga una clave de Cloud KMS predeterminada y, luego, usa el comando gcloud storage objects update con la marca --clear-encryption-key para volver a escribir los objetos afectados con la encriptación estándar.
    El bucket solo permite claves de encriptación proporcionadas por el cliente (CSEK) Vuelve a encriptar los objetos con CSEK Usa el comando gcloud storage objects update con la marca --encryption-key para volver a escribir los objetos afectados con tu clave de encriptación AES-256.

    Después de volver a encriptar todos los objetos que no cumplen con los requisitos en un bucket, el hallazgo se borra para ese bucket durante el siguiente ciclo de actualización de 24 horas. Sin embargo, el hallazgo permanece activo en los siguientes casos hasta que tú o Cloud Storage borren de forma permanente las versiones de los objetos retenidos:

Vuelve a encriptar los objetos con CMEK

Si el bucket permite claves de encriptación administradas por el cliente (CMEK), vuelve a encriptar los objetos afectados según su método de encriptación actual.

Vuelve a encriptar los objetos encriptados con GMEK a gran escala con las operaciones por lotes de Storage

Para volver a encriptar objetos encriptados con GMEK con CMEK a gran escala, exporta archivos de manifiesto CSV desde BigQuery y ejecuta un trabajo de operaciones por lote en objetos almacenados:

  1. Ejecuta la siguiente consulta de EXPORT DATA en BigQuery para crear un manifiesto CSV con conjuntos de datos de Storage Insights para los objetos activos afectados que usan la encriptación estándar (GMEK):

    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;

    Reemplaza lo siguiente:

    • DESTINATION_BUCKET: Es el nombre del bucket de Cloud Storage en el que quieres almacenar los archivos de manifiesto CSV exportados.
    • DATASET_NAME: Es el nombre de tu conjunto de datos vinculado de Storage Insights en BigQuery.
    • BUCKET_NAME: Es el nombre del bucket afectado.
  2. Completa los requisitos previos de las operaciones por lotes de Storage y pídele a tu administrador que otorgue el rol de encriptador/desencriptador de CryptoKey de Cloud KMS (roles/cloudkms.cryptoKeyEncrypterDecrypter) en la clave de Cloud KMS a los siguientes agentes de servicio:

    • El agente de servicio de operaciones por lotes de Storage (service-PROJECT_NUMBER@gcp-sa-storagebatchoperations.iam.gserviceaccount.com)
    • El agente de servicio de Cloud Storage (service-PROJECT_NUMBER@gs-project-accounts.iam.gserviceaccount.com)

    Reemplaza PROJECT_NUMBER por el número del proyecto que contiene el bucket.

  3. Ejecuta el comando gcloud storage batch-operations jobs create para crear un trabajo de operaciones por lotes de Storage con el archivo de manifiesto y volver a escribir los objetos con tu clave de Cloud KMS. Para verificar la configuración del trabajo antes de modificar los objetos, incluye la marca --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"

    Reemplaza lo siguiente:

    • JOB_NAME: Es un ID único para el trabajo por lotes, como re-encrypt-objects-job.
    • BUCKET_NAME: Es el nombre del bucket afectado.
    • DESTINATION_BUCKET: Es el nombre del bucket que contiene tus archivos de manifiesto exportados.
    • KMS_KEY: Es el nombre del recurso de la clave de Cloud KMS que quieres usar para encriptar los objetos. La clave debe estar en la misma ubicación que el bucket y usar el formato projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/CRYPTO_KEY.

Vuelve a encriptar los objetos encriptados con CSEK con Google Cloud CLI

Debido a que Google Cloud no almacena claves de encriptación proporcionadas por el cliente (CSEK), las operaciones por lotes de Storage no pueden desencriptar objetos encriptados con CSEK. Para volver a encriptar los objetos encriptados con CSEK con CMEK, ejecuta el comando gcloud storage objects update con las marcas --decryption-keys y --encryption-key:

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

Reemplaza lo siguiente:

  • BUCKET_NAME: Es el nombre del bucket afectado.
  • OBJECT_NAME: Es el nombre del objeto encriptado con CSEK que deseas volver a encriptar. Para actualizar varios objetos en un solo comando, usa comodines de URI o la marca --read-paths-from-stdin (-I).
  • DECRYPTION_KEY: Es la clave AES-256 codificada en Base64 RFC 4648 que encripta el objeto.
  • KMS_KEY: Es el nombre del recurso de la clave de Cloud KMS que quieres usar para encriptar el objeto, en el formato projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/CRYPTO_KEY.

Vuelve a encriptar los objetos con la encriptación estándar (GMEK)

Para volver a encriptar objetos con la encriptación estándar (encriptación predeterminada de Google o GMEK), verifica que el bucket no tenga una clave de Cloud KMS predeterminada y borra la clave de encriptación personalizada en cada objeto afectado:

  1. Verifica que el bucket no tenga una clave de Cloud KMS predeterminada. Cuando borras la clave de encriptación personalizada de un objeto, Cloud Storage encripta el objeto con la encriptación estándar (GMEK) solo si el bucket no tiene una clave de Cloud KMS predeterminada. Si el bucket tiene una clave de Cloud KMS predeterminada, Cloud Storage encripta el objeto con esa clave. Si el bucket también restringe la CMEK, la reescritura falla.

    Para quitar una clave de Cloud KMS predeterminada del bucket, ejecuta el comando gcloud storage buckets update con la marca --clear-default-encryption-key:

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

    Reemplaza BUCKET_NAME por el nombre del bucket afectado.

  2. Usa el comando gcloud storage objects update con la marca --clear-encryption-key para volver a escribir los objetos afectados con la encriptación estándar. Si los objetos están encriptados con claves de encriptación proporcionadas por el cliente (CSEK), también incluye la marca --decryption-keys:

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

    Reemplaza lo siguiente:

    • BUCKET_NAME: Es el nombre del bucket afectado.
    • OBJECT_NAME: Es el nombre del objeto que deseas volver a encriptar. Para actualizar varios objetos en un solo comando, usa comodines de URI (como gs://BUCKET_NAME/**) o la marca --read-paths-from-stdin (-I).
    • DECRYPTION_KEY: Si el objeto está encriptado con CSEK, la clave AES-256 codificada en Base64 según RFC 4648 que encripta el objeto. Si el objeto está encriptado con CMEK, omite la marca --decryption-keys.

Vuelve a encriptar los objetos con CSEK

Si el bucket solo permite claves de encriptación proporcionadas por el cliente (CSEK), usa el comando gcloud storage objects update con la marca --encryption-key para volver a escribir los objetos afectados con tu clave de encriptación AES-256. Si un objeto está encriptado con una CSEK diferente, incluye también la marca --decryption-keys:

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

Reemplaza lo siguiente:

  • BUCKET_NAME: Es el nombre del bucket afectado.
  • OBJECT_NAME: el nombre del objeto que deseas volver a encriptar. Para actualizar varios objetos en un solo comando, usa comodines de URI o la marca --read-paths-from-stdin (-I).
  • YOUR_ENCRYPTION_KEY: Es la cadena de clave de encriptación AES-256 codificada en Base64 según el RFC 4648.
  • DECRYPTION_KEY: Si el objeto está encriptado con una CSEK diferente, la clave AES-256 codificada en Base64 según RFC 4648 que encripta el objeto. Si el objeto está encriptado con GMEK o CMEK, omite la marca --decryption-keys.

¿Qué sigue?