Chaves de criptografia gerenciadas pelo cliente (CMEK)

Ao usar o Serviço Gerenciado para Apache Spark, os dados do cluster e do job são armazenados em discos permanentes associados às VMs do Compute Engine no cluster e em um bucket de preparo do Cloud Storage. Por padrão, esses dados do disco permanente e do bucket são criptografados com uma chave de criptografia de dados (DEK) gerada pelo Google e uma chave de criptografia de chaves (KEK).

Se você quiser controlar e gerenciar a chave de criptografia de chaves (KEK), use as chaves de criptografia gerenciadas pelo cliente (CMEK). O Google continua controlando a chave de criptografia de dados (DEK). Para mais informações sobre chaves de criptografia de dados do Google, consulte Criptografia em repouso.

Criptografia de dados de cluster CMEK

É possível usar chaves de criptografia gerenciadas pelo cliente (CMEK) para criptografar os seguintes dados do cluster:

  • Dados em discos permanentes anexados a VMs de cluster do Serviço Gerenciado para Apache Spark
  • Dados de argumentos de jobs enviados ao cluster, como uma string de consulta enviada com um job do Spark SQL
  • Metadados do cluster, saída do driver do job e outros dados gravados no bucket de preparação do cluster do Serviço Gerenciado para Apache Spark

Antes de começar

  1. Faça login na sua conta do Google Cloud . Se você começou a usar o Google Cloud, crie uma conta para avaliar o desempenho de nossos produtos em situações reais. Clientes novos também recebem US$ 300 em créditos para executar, testar e implantar cargas de trabalho.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. Enable the Dataproc, Cloud Key Management Service, Compute Engine, and Cloud Storage APIs.

    Roles required to enable APIs

    To enable APIs, you need the serviceusage.services.enable permission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.

    Enable the APIs

  5. Instale a CLI do Google Cloud.

  6. Ao usar um provedor de identidade (IdP) externo, primeiro faça login na CLI gcloud com sua identidade federada.

  7. Para inicializar a CLI gcloud, execute o seguinte comando:

    gcloud init
  8. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  9. Verify that billing is enabled for your Google Cloud project.

  10. Enable the Dataproc, Cloud Key Management Service, Compute Engine, and Cloud Storage APIs.

    Roles required to enable APIs

    To enable APIs, you need the serviceusage.services.enable permission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.

    Enable the APIs

  11. Instale a CLI do Google Cloud.

  12. Ao usar um provedor de identidade (IdP) externo, primeiro faça login na CLI gcloud com sua identidade federada.

  13. Para inicializar a CLI gcloud, execute o seguinte comando:

    gcloud init

Criar chaves

Para proteger seus recursos do Serviço Gerenciado para Apache Spark com CMEK, é possível automatizar a criação de chaves ou criá-las manualmente.

Criação automática de chaves

Use a Autokey para automatizar o provisionamento e a atribuição de CMEK. O Autokey gera keyrings e chaves sob demanda quando os recursos são criados. Os agentes de serviço usam as chaves em operações de criptografia e descriptografia. Se necessário, o Autokey cria os agentes e concede a eles os papéis necessários do Identity and Access Management (IAM). Para mais informações, consulte Visão geral das chaves automáticas.

Criação manual de chaves

Siga estas etapas para criar manualmente chaves para criptografia CMEK de dados do cluster:

  1. Crie uma ou mais chaves usando o Cloud KMS. O nome do recurso, também chamado de ID de uma chave, que você vai usar nas próximas etapas, é criado da seguinte maneira:

    projects/PROJECT_ID/locations/REGION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME
    
    A chave (CMEK) precisa estar no mesmo local que o recurso criptografado. Por exemplo, a CMEK usada para criptografar um recurso na região us-central1 também precisa estar localizada nessa região.us-central1

  2. Para garantir que cada uma das seguintes contas de serviço (conta de serviço do agente de serviço do Compute Engine, conta de serviço do agente de serviço do Cloud Storage e conta de serviço do agente de serviço do Managed Service para Apache Spark) tenha as permissões necessárias para proteger recursos usando chaves do Cloud KMS, peça ao administrador para conceder o papel do IAM de criptografador/descriptografador de CryptoKey do Cloud KMS (roles/cloudkms.cryptoKeyEncrypterDecrypter) a cada uma das seguintes contas de serviço: conta de serviço do agente de serviço do Compute Engine, conta de serviço do agente de serviço do Cloud Storage e conta de serviço do agente de serviço do Managed Service para Apache Spark no seu projeto.

    Exemplo de atribuição do papel Criptografador/Descriptografador de CryptoKey do Cloud KMS à conta de serviço do agente de serviço do Serviço gerenciado para Apache Spark usando a Google Cloud CLI:

    gcloud projects add-iam-policy-binding KMS_PROJECT_ID \
    --member serviceAccount:service-PROJECT_NUMBER@dataproc-accounts.iam.gserviceaccount.com \
    --role roles/cloudkms.cryptoKeyEncrypterDecrypter
    

    Substitua:

    KMS_PROJECT_ID: o ID do seu projeto Google Cloud que contém a chave do Cloud KMS.

    PROJECT_NUMBER: o número do projeto (não o ID do projeto) do seu projeto Google Cloud que executa recursos do Serviço Gerenciado para Apache Spark.

  3. Se a função de agente de serviço do Serviço Gerenciado para Apache Spark não estiver anexada à conta de serviço do agente de serviço do Serviço Gerenciado para Apache Spark, adicione a permissão serviceusage.services.use a uma função personalizada anexada à conta de serviço do agente de serviço do Serviço Gerenciado para Apache Spark.

Criar um cluster com CMEK

Transmita o ID do recurso da chave ao criar o cluster do Serviço Gerenciado para Apache Spark.

CLI da gcloud

  • Para criptografar os dados do disco permanente do cluster usando sua chave, transmita o ID do recurso da chave para a flag --gce-pd-kms-key ao criar o cluster.
    gcloud dataproc clusters create CLUSTER_NAME \
        --region=REGION \
        --gce-pd-kms-key='projects/PROJECT_ID/locations/REGION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME' \
        other arguments ...
        

    É possível verificar a configuração da chave na ferramenta de linha de comando gcloud.

    gcloud dataproc clusters describe CLUSTER_NAME \
        --region=REGION
        

    Snippet da resposta ao comando:

    ...
    configBucket: dataproc- ...
      encryptionConfig:
        gcePdKmsKeyName: projects/project-id/locations/region/keyRings/key-ring-name/cryptoKeys/key-name
    ...
        
  • Para criptografar os dados do disco permanente do cluster e os argumentos do job usando sua chave, transmita o ID do recurso da chave para a flag --kms-key ao criar o cluster. Consulte [Cluster.EncryptionConfig.kmsKey](/managed-spark/docs/reference/rest/v1/ClusterConfig#EncryptionConfig.FIELDS.kms_key) para ver uma lista de tipos de jobs e argumentos criptografados com a flag `--kms-key`.
    gcloud dataproc clusters create CLUSTER_NAME \
        --region=REGION \
        --kms-key='projects/PROJECT_ID/locations/REGION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME' \
        other arguments ...
          

    É possível verificar as configurações de chave com o comando dataproc clusters describe da CLI gcloud. O ID do recurso de chave é definido em gcePdKmsKeyName e kmsKey para usar sua chave com a criptografia de disco permanente do cluster e dados de argumentos do job.

    gcloud dataproc clusters describe CLUSTER_NAME \
        --region=REGION
          

    Snippet da resposta ao comando:

    ...
    configBucket: dataproc- ...
      encryptionConfig:
      gcePdKmsKeyName: projects/PROJECT_ID/locations/REGION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME
      kmsKey: projects/PROJECT_ID/locations/REGION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME
    ...
        
  • Para criptografar metadados do cluster, driver do job e outros dados de saída gravados no bucket de preparo do Serviço Gerenciado para Apache Spark no Cloud Storage:
    gcloud dataproc clusters create CLUSTER_NAME \
        --region=REGION \
        --bucket=CMEK_BUCKET_NAME \
        other arguments ...
            

    Também é possível passar buckets habilitados para CMEK no comando `gcloud dataproc jobs submit` se o job aceitar argumentos de bucket, conforme mostrado no exemplo `cmek-bucket` a seguir:

    gcloud dataproc jobs submit pyspark gs://cmek-bucket/wordcount.py \
        --region=region \
        --cluster=cluster-name \
        -- gs://cmek-bucket/shakespeare.txt gs://cmek-bucket/counts
          

API REST

  • Para criptografar dados do disco permanente da VM do cluster usando sua chave, inclua o campo ClusterConfig.EncryptionConfig.gcePdKmsKeyName como parte de uma solicitação cluster.create.

    É possível verificar a configuração da chave com o comando dataproc clusters describe da CLI gcloud.

    gcloud dataproc clusters describe CLUSTER_NAME \
        --region=REGION
        

    Snippet da resposta ao comando:

    ...
    configBucket: dataproc- ...
      encryptionConfig:
        gcePdKmsKeyName: projects/PROJECT_ID/locations/REGION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME
    ...
        
  • Para criptografar dados do disco permanente da VM do cluster e dados de argumentos do job usando sua chave, inclua o campo Cluster.EncryptionConfig.kmsKey como parte de uma solicitação cluster.create. Consulte Cluster.EncryptionConfig.kmsKey para uma lista de tipos de jobs e argumentos criptografados com o campo --kms-key.

    É possível verificar as configurações de chave com o comando dataproc clusters describe da CLI gcloud. O ID do recurso de chave é definido em gcePdKmsKeyName e kmsKey para usar sua chave com a criptografia de disco permanente do cluster e dados de argumentos do job.

    gcloud dataproc clusters describe CLUSTER_NAME \
        --region=REGION
        

    Snippet da resposta ao comando:

    ...
    configBucket: dataproc- ...
      encryptionConfig:
        gcePdKmsKeyName: projects/PROJECT_ID/locations/REGION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME
        kmsKey: projects/PROJECT_ID/locations/REGION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME
    ...
        
  • Para criptografar metadados do cluster, driver do job e outros dados de saída gravados no bucket de preparo do Serviço Gerenciado para Apache Spark no Cloud Storage:
    gcloud dataproc clusters create CLUSTER_NAME \
        --region=REGION \
        --bucket=CMEK_BUCKET_NAME \
        other arguments ...
        

    Também é possível passar buckets habilitados para CMEK no comando `gcloud dataproc jobs submit` se o job aceitar argumentos de bucket, conforme mostrado no exemplo `cmek-bucket` a seguir:

    gcloud dataproc jobs submit pyspark gs://cmek-bucket/wordcount.py \
        --region=region \
        --cluster=cluster-name \
        -- gs://cmek-bucket/shakespeare.txt gs://cmek-bucket/counts
          

Usar o CMEK com dados de modelo de fluxo de trabalho

Os dados de argumentos de jobs de modelo de fluxo de trabalho do Serviço Gerenciado para Apache Spark, como a string de consulta de um job do Spark SQL, podem ser criptografados usando a CMEK. Siga as etapas 1, 2 e 3 desta seção para usar a CMEK com seu modelo de fluxo de trabalho do Serviço Gerenciado para Apache Spark. Consulte WorkflowTemplate.EncryptionConfig.kmsKey para ver uma lista de tipos de jobs e argumentos de modelo de fluxo de trabalho criptografados com CMEK quando esse recurso está ativado.

  1. Crie uma chave usando o Cloud KMS. O nome do recurso da chave, que você vai usar nas próximas etapas, é criado da seguinte maneira:
    projects/project-id/locations/region/keyRings/key-ring-name/cryptoKeys/key-name
    
  2. Para permitir que as contas de serviço do Serviço Gerenciado para Apache Spark usem sua chave:

    1. Atribua o papel CryptoKey Encrypter/Decrypter do Cloud KMS à conta de serviço do agente de serviço do Serviço Gerenciado para Apache Spark. Use a CLI gcloud para atribuir a função:

       gcloud projects add-iam-policy-binding KMS_PROJECT_ID \
       --member serviceAccount:service-PROJECT_NUMBER@dataproc-accounts.iam.gserviceaccount.com \
       --role roles/cloudkms.cryptoKeyEncrypterDecrypter
      

      Substitua:

      KMS_PROJECT_ID: o ID do seu projeto Google Cloud que executa o Cloud KMS. Esse projeto também pode ser o que executa recursos do Serviço Gerenciado para Apache Spark.

      PROJECT_NUMBER: o número do projeto (não o ID do projeto) do seu projeto Google Cloud que executa recursos do Serviço Gerenciado para Apache Spark.

    2. Ative a API Cloud KMS no projeto que executa recursos do Serviço gerenciado para Apache Spark.

    3. Se o papel de agente de serviço do Serviço Gerenciado para Apache Spark não estiver anexado à conta de serviço do agente de serviço do Serviço Gerenciado para Apache Spark, adicione a permissão serviceusage.services.use ao papel personalizado anexado à conta de serviço do agente de serviço do Serviço Gerenciado para Apache Spark. Se o papel de agente de serviço do Serviço Gerenciado para Apache Spark estiver anexado à conta de serviço do agente de serviço do Serviço Gerenciado para Apache Spark, pule esta etapa.

  3. É possível usar a CLI gcloud ou a API Dataproc para definir a chave criada na etapa 1 em um fluxo de trabalho. Depois que a chave é definida em um fluxo de trabalho, todos os argumentos e consultas do job do fluxo de trabalho são criptografados usando a chave para qualquer um dos tipos de job e argumentos listados em WorkflowTemplate.EncryptionConfig.kmsKey.

    CLI da gcloud

    Transmita o ID do recurso da sua chave para a sinalização --kms-key ao criar o modelo de fluxo de trabalho com o comando gcloud dataproc workflow-templates create.

    Exemplo:

    gcloud dataproc workflow-templates create my-template-name \
        --region=region \
        --kms-key='projects/project-id/locations/region/keyRings/key-ring-name/cryptoKeys/key-name' \
        other arguments ...
    
    É possível verificar a configuração da chave na ferramenta de linha de comando gcloud.
    gcloud dataproc workflow-templates describe TEMPLATE_NAME \
        --region=REGION
    
    ...
    id: my-template-name
    encryptionConfig:
    kmsKey: projects/PROJECT_ID/locations/REGION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME
    ...
    

    API REST

    Use WorkflowTemplate.EncryptionConfig.kmsKey como parte de uma solicitação workflowTemplates.create.

    É possível verificar a configuração da chave emitindo uma solicitação workflowTemplates.get. O JSON retornado contém o kmsKey:

    ...
    "id": "my-template-name",
    "encryptionConfig": {
      "kmsKey": "projects/project-id/locations/region/keyRings/key-ring-name/cryptoKeys/key-name"
    },
    

Cloud External Key Manager

O Cloud External Key Manager (Cloud EKM) permite proteger dados do Serviço gerenciado para Apache Spark usando chaves gerenciadas por um parceiro de gerenciamento de chaves externas com suporte. As etapas para usar o Cloud EKM no Serviço Gerenciado para Apache Spark são as mesmas que você usa para configurar chaves CMEK, com a seguinte diferença: a chave aponta para um URI referente à chave gerenciada externamente (consulte Visão geral do Cloud EKM).

Erros do Cloud EKM

Quando você usa o Cloud EKM, uma tentativa de criar um cluster pode falhar devido a erros associados a entradas, ao Cloud EKM, ao sistema externo de parceiros de gerenciamento de chaves ou a comunicações entre o Cloud EKM e o sistema externo. Se você usar a API REST ou o console Google Cloud , os erros serão registrados no Cloud Logging. É possível examinar os erros do cluster com falha na guia Ver registro.