Encriptar datos con claves de encriptado gestionadas por el cliente

En este documento se muestra cómo usar claves de cifrado gestionadas por el cliente (CMEK) para cifrar y controlar los datos en reposo de un servicio en la nube a través de Cloud Key Management Service. CMEK está integrado con la personalización de código para Gemini Code Assist. Gemini Code Assist no admite el uso de claves de EKM de Cloud.

En este documento, harás lo siguiente:

  • Consulta cómo crear una CMEK.
  • Concede permisos a la cuenta de servicio de Gemini Code Assist.
  • Crea un índice de repositorio de código con una CMEK.
  • Quitar el acceso a un repositorio de CMEK.

De forma predeterminada, Gemini para Google Cloud cifra el contenido del cliente en reposo. Gemini se encarga del cifrado sin que tengas que hacer nada más. Esta opción se llama Cifrado predeterminado de Google.

Si quieres controlar tus claves de cifrado, puedes usar claves de cifrado gestionadas por el cliente (CMEKs) en Cloud KMS con servicios integrados con CMEKs, como Gemini. Si usas claves de Cloud KMS, tendrás control sobre su nivel de protección, ubicación, calendario de rotación, permisos de uso y acceso, y límites criptográficos. Además, Cloud KMS te permite ver los registros de auditoría y controlar los ciclos de vida de las claves. En lugar de que Google sea el propietario y gestione las claves de cifrado de claves (KEKs) simétricas que protegen tus datos, tú controlas y gestionas estas claves en Cloud KMS.

Una vez que hayas configurado tus recursos con CMEKs, la experiencia de acceder a tus recursos de Gemini será similar a la de usar el cifrado predeterminado de Google. Para obtener más información sobre las opciones de encriptado, consulta Claves de encriptado gestionadas por el cliente (CMEK).

Antes de empezar

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

  2. En el entorno de desarrollo en el que has configurado la CLI de gcloud, ejecuta el comando gcloud components update para asegurarte de que has actualizado todos los componentes instalados de la CLI de gcloud a la última versión.

    gcloud components update
    
  3. Crear una clave CMEK y conceder permisos

    Para crear una clave CMEK y conceder permisos a la cuenta de servicio de Gemini Code Assist en la clave, realiza las siguientes tareas:

    1. En el Google Cloud proyecto en el que quieras gestionar tus claves, haz lo siguiente:

      1. Habilita la API Cloud Key Management Service.

      2. Crea el conjunto de claves y la clave directamente en Cloud KMS.

    2. Asigna el rol de gestión de identidades y accesos Encargado del encriptado y desencriptado de claves de CryptoKey (roles/cloudkms.cryptoKeyEncrypterDecrypter) a la cuenta de servicio de Gemini Code Assist. Concede este permiso en la clave que has creado.

      Consola

      1. Ve a Gestión de claves.

        Ir a Gestión de claves

      2. Selecciona la clave que has creado.

      3. Concede acceso a la cuenta de servicio de Gemini Code Assist:

        1. Haz clic en Añadir principal.
        2. Añade la cuenta de servicio de Gemini Code Assist. La cuenta de servicio es service-PROJECT_NUMBER@gcp-sa-cloudaicompanions.iam.gserviceaccount.com, donde PROJECT_NUMBER es el número de proyecto del proyecto Google Cloud en el que está habilitado Gemini Code Assist.
        3. En Selecciona un rol, elige Cloud KMS > Encargado del encriptado y desencriptado de claves de CryptoKey de Cloud KMS.
        4. Haz clic en Guardar.
      4. Repite el paso anterior para conceder acceso a la cuenta que creará el índice del repositorio de código con una CMEK.

      5. Vuelve a la página Gestión de claves y selecciona la clave de nuevo.

      6. Selecciona Mostrar panel de información. Deberías ver los roles en la columna Rol o miembro.

      CLI de gcloud

      1. Para conceder acceso a la cuenta de servicio de Gemini Code Assist, usa el kms keys add-iam-policy-bindingcomando en un entorno de shell:

        gcloud kms keys add-iam-policy-binding KEY_NAME \
            --project=PROJECT_ID \
            --location=LOCATION \
            --keyring=KEYRING_NAME \
            --member="serviceAccount:service-PROJECT_NUMBER@gcp-sa-cloudaicompanion.iam.gserviceaccount.com" \
            --role="roles/cloudkms.cryptoKeyEncrypterDecrypter"
        

        Haz los cambios siguientes:

        • KEY_NAME: el nombre de la clave.
        • PROJECT_ID: el ID del proyecto que contiene la clave.
        • LOCATION: la ubicación de la clave.
        • KEYRING_NAME: el nombre del conjunto de claves.
        • PROJECT_NUMBER: el número de proyecto del proyecto Google Cloud con Gemini Code Assist habilitado.
      2. Repite el paso anterior para conceder acceso a la cuenta que creará el índice del repositorio de código con una CMEK.

      Para obtener más información sobre este comando, consulta la documentación de gcloud kms keys add-iam-policy-binding.

    Ahora puedes crear un índice de repositorio de código con una CMEK mediante la API y especificar la clave que quieras usar para el cifrado.

    Crear un índice de repositorio de código con una CMEK

    Para crear un repositorio con protección de clave de cifrado gestionada por el cliente, haz una de las siguientes acciones:

    CLI de gcloud

    Usa el comando gemini code-repository-indexes create:

    gcloud gemini code-repository-indexes create CODE_REPOSITORY_INDEX_NAME \
        --location=LOCATION \
        --kms-key="projects/KEY_PROJECT_ID/locations/LOCATION/keyRings/KEYRING_NAME/cryptoKeys/KEY_NAME"
    

    Haz los cambios siguientes:

    • CODE_REPOSITORY_INDEX_NAME: el nombre del nuevo repositorio de código index que vas a crear.
    • LOCATION: la ubicación de la clave.
    • KEY_PROJECT_ID: el ID del proyecto de clave.
    • KEYRING_NAME: el nombre del conjunto de claves.
    • KEY_NAME: el nombre de la clave.

    API

    1. Crea un archivo JSON que contenga la siguiente información:

        {
          "kmsKey": "projects/KEY_PROJECT_ID/locations/KEY_LOCATION/keyRings/KEYRING_NAME/cryptoKeys/KEY_NAME"
        }
      

      Haz los cambios siguientes:

      • KEY_PROJECT_ID: el ID del proyecto de la clave
      • KEY_LOCATION: la ubicación de la clave
      • KEYRING_NAME: el nombre del conjunto de claves
      • KEY_NAME: el nombre de la clave
    2. Usa un comando cURL para llamar al projects.locations.codeRepositoryIndexes.create método:

      curl -X POST --data-binary @JSON_FILE_NAME \
          -H "Authorization: Bearer $(gcloud auth print-access-token)" \
          -H "Content-Type: application/json" \
          "https://cloudaicompanion.googleapis.com/v1/projects/PROJECT_ID/locations/KEY_LOCATION/codeRepositoryIndexes?codeRepositoryIndexId=CODE_REPOSITORY_INDEX_NAME"

      Haz los cambios siguientes:

      • JSON_FILE_NAME: la ruta del archivo JSON que has creado en el paso anterior.
      • PROJECT_ID: el ID del proyecto en el que se va a crear el repositorio.
      • KEY_LOCATION: la ubicación en la que se va a crear el repositorio, que debe coincidir con la ubicación en la que se encuentra la CMEK.
      • CODE_REPOSITORY_INDEX_NAME: el nombre del índice del repositorio de código que vas a crear. Por ejemplo, zg-btf-0001.

    La respuesta devuelve un conjunto de entradas de registro.

    Quitar el acceso a un repositorio de CMEK

    Hay varias formas de quitar el acceso a un repositorio cifrado con CMEK:

    Te recomendamos que revoques los permisos de la cuenta de servicio de Gemini Code Assist antes de inhabilitar o eliminar una clave. Los cambios en los permisos se aplican en cuestión de segundos, por lo que puedes observar los efectos de inhabilitar o destruir una clave.