Encriptar datos con claves de encriptación administradas por el cliente

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

En este documento, harás lo siguiente:

  • Aprende a crear una CMEK.
  • Otorga permisos a la cuenta de servicio de Gemini Code Assist.
  • Crea un índice de repositorio de código con una CMEK.
  • Quita el acceso a un repositorio con CMEK.

De forma predeterminada, Gemini para Google Cloud encripta el contenido del cliente en reposo. Gemini controla la encriptación por ti sin que debas realizar ninguna acción adicional. Esta opción se denomina Encriptación predeterminada de Google.

Si deseas controlar tus claves de encriptación, puedes usar las claves de encriptación administradas por el cliente (CMEK) en Cloud KMS con servicios integrados en CMEK, incluido Gemini. El uso de claves de Cloud KMS te permite controlar su nivel de protección, ubicación, programa de rotación, permisos de uso y acceso, y límites criptográficos. El uso de Cloud KMS también te permite ver los registros de auditoría y controlar los ciclos de vida de las claves. En lugar de que Google posea y administre las claves de encriptación de claves (KEK) simétricas que protegen tus datos, tú las controlas y administras en Cloud KMS.

Después de configurar tus recursos con CMEK, la experiencia de acceso a tus recursos de Gemini es similar a usar la encriptación predeterminada de Google. Para obtener más información sobre tus opciones de encriptación, consulta Claves de encriptación administradas por el cliente (CMEK).

Antes de comenzar

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

    Activate Cloud Shell

  2. En tu entorno de shell, ejecuta el comando gcloud components update para asegurarte de haber actualizado todos los componentes instalados de la CLI de gcloud a la versión más reciente. Para este paso, puedes instalar y, luego, inicializar gcloud CLI, o bien usar Cloud Shell.

    gcloud components update
    
  3. Crea una CMEK y otorga permisos

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

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

      1. Habilita la API de Cloud Key Management Service.

      2. Crea un llavero de claves y una clave mediante una de las siguientes opciones:

    2. Otorga la función de IAM de encriptador/desencriptador de CryptoKey (roles/cloudkms.cryptoKeyEncrypterDecrypter) a la cuenta de servicio de Gemini Code Assist. Otorga este permiso en la clave que creaste.

      Console

      1. Ve a Administración de claves.

        Ir a Administración de claves

      2. Selecciona la clave que creaste.

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

        1. Haz clic en Agregar principal.
        2. Agrega la cuenta de servicio de Gemini Code Assist. La cuenta de servicio es service-PROJECT_NUMBER@gcp-sa-cloudaicompanions.iam.gserviceaccount.com, en la que PROJECT_NUMBER es el número del proyecto del proyecto Google Cloud en el que está habilitado Gemini Code Assist.
        3. En Selecciona un rol, selecciona Cloud KMS > Encriptador/Desencriptador de CryptoKey de Cloud KMS.
        4. Haz clic en Guardar.
      4. Repite el paso anterior para otorgar acceso a la cuenta que creará el índice del repositorio de código con una CMEK.

      5. Regresa a la página Administración de claves y vuelve a seleccionar la clave.

      6. Selecciona Mostrar panel de información. Deberías ver las funciones en la columna Función/Miembro.

      gcloud CLI

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

        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"
        

        Reemplaza lo siguiente:

        • KEY_NAME: Es el nombre de la clave.
        • PROJECT_ID: Es el ID del proyecto que contiene la clave.
        • LOCATION: Es la ubicación de la clave.
        • KEYRING_NAME: Es el nombre del llavero de claves.
        • PROJECT_NUMBER: El número de proyecto del proyecto Google Cloud con Gemini Code Assist habilitado.
      2. Repite el paso anterior para otorgar 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 a través de la API y especificar la clave que se usará para la encriptación.

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

    Para crear un repositorio nuevo que tenga protección con CMEK, haz una de las siguientes acciones:

    gcloud CLI

    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"
    

    Reemplaza lo siguiente:

    • CODE_REPOSITORY_INDEX_NAME: Es el nombre del nuevo índice del repositorio de código que crearás.
    • LOCATION: Es la ubicación de la clave.
    • KEY_PROJECT_ID: Es el ID del proyecto de claves.
    • KEYRING_NAME: Es el nombre del llavero de claves.
    • KEY_NAME: Es 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"
        }
      

      Reemplaza lo siguiente:

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

      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"

      Reemplaza lo siguiente:

      • JSON_FILE_NAME: Es la ruta de acceso del archivo JSON que creaste en el paso anterior.
      • PROJECT_ID: Es el ID del proyecto en el que se creará el repositorio.
      • KEY_LOCATION: Es la ubicación en la que se creará el repositorio, que debe coincidir con la ubicación en la que existe la CMEK.
      • CODE_REPOSITORY_INDEX_NAME: Es el nombre del nuevo índice del repositorio de código que crearás. Por ejemplo, zg-btf-0001

    La respuesta devuelve un conjunto de entradas de registro.

    Quita el acceso a un repositorio con CMEK

    Existen varias formas de quitar el acceso a un repositorio encriptado mediante una CMEK:

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