Configurar a criptografia com chaves gerenciadas pelo cliente

Cloud Composer 3 | Cloud Composer 2 | Cloud Composer 1

Nesta página, você vai aprender a usar as chaves de criptografia gerenciadas pelo cliente (CMEK) para proteger ambientes do Cloud Composer. As chaves de criptografia gerenciadas pelo cliente são usadas para criptografar/descriptografar dados do usuário no ambiente.

Antes de começar

  • Só é possível configurar a CMEK ao criar um ambiente. Não é possível ativar a CMEK para um ambiente existente.

  • O Cloud Composer oferece suporte à criptografia CMEK usando chaves armazenadas em gerenciadores de chaves externos.

  • Crie uma chave CMEK na mesma região em que seus ambientes estão localizados. Não é possível usar chaves globais ou multirregionais.

  • Se você quiser que o ambiente seja executado dentro de um perímetro do VPC Service Controls, adicione a API Cloud Key Management Service e a API Artifact Registry ao perímetro.

  • Ative a API Artifact Registry.

    Console

    Enable the Artifact Registry API.

    Enable the API

    gcloud

    Enable the Artifact Registry API:

    gcloud services enable artifactregistry.googleapis.com

As informações do usuário não são protegidas com a criptografia CMEK

O Cloud Monitoring não oferece suporte à criptografia CMEK. O nome do seu ambiente e os nomes dos DAGs são armazenados no banco de dados do Monitoring no formato criptografado usando Google-owned and Google-managed encryption keys.

O Cloud Composer armazena as seguintes informações protegidas com Google-owned and Google-managed encryption keys, não chaves gerenciadas pelo cliente:

  • Nome do ambiente
  • Substituições da configuração do Airflow
  • Variáveis de ambiente
  • Descrições dos intervalos de IP permitidos
  • Intervalos de IP
  • Rótulos
  • Os nomes de alguns parâmetros armazenados pelo Cloud Composer podem incluir uma substring do nome do ambiente.

Usar uma chave de criptografia gerenciada pelo cliente para seu ambiente

Etapa 1. Criar uma chave de criptografia gerenciada pelo cliente

Siga as etapas descritas em Como criar chaves de criptografia simétrica para criar uma chave na região em que seu ambiente está localizado.

Etapa 2. Conceder papéis a agentes de serviço

Console

Pule esta etapa. Você concede permissões a agentes de serviço ao especificar uma chave para seu ambiente.

gcloud

Os agentes de serviço a seguir precisam ter o papel Criptografador/Descriptografador de CryptoKey do Cloud KMS na chave que você usa para seu ambiente.

Substitua PROJECT_NUMBER pelo número do projeto.

Nome do agente de serviço E-mail da conta de serviço Nome do serviço da API
Agente de serviços do Cloud Composer service-PROJECT_NUMBER@cloudcomposer-accounts.iam.gserviceaccount.com composer.googleapis.com
Agente de serviço do Artifact Registry service-PROJECT_NUMBER@gcp-sa-artifactregistry.iam.gserviceaccount.com artifactregistry.googleapis.com
Agente de serviço do Kubernetes Engine service-PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com container.googleapis.com
Agente de serviço do Pub/Sub service-PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com pubsub.googleapis.com
Agente de serviço do Compute Engine service-PROJECT_NUMBER@compute-system.iam.gserviceaccount.com compute.googleapis.com
Agente de serviço do Cloud Storage service-PROJECT_NUMBER@gs-project-accounts.iam.gserviceaccount.com Conceder permissões de criptografia/descriptografia com gcloud storage service-agent --authorize-cmek
  1. (Se necessário) Se algumas dessas contas de serviço não estiverem presentes no seu projeto, significa que uma identidade para esse serviço ainda não foi criada. Isso pode acontecer, por exemplo, se você ainda não criou nenhum ambiente do Cloud Composer no seu projeto.

    Para adicionar essas contas de serviço, crie identidades para os serviços listados com o seguinte comando:

    gcloud beta services identity create \
      --service=API_SERVICE_NAME
    

    Substitua API_SERVICE_NAME pelo nome do serviço da API de um serviço que não tenha uma conta de serviço no projeto.

    Exemplo:

    gcloud beta services identity create \
      --service=composer.googleapis.com
    
  2. Conceder permissões aos agentes de serviço:

    1. Conceda o papel ao agente de serviço do Cloud Composer:

      gcloud kms keys add-iam-policy-binding KEY_NAME \
        --location KEY_LOCATION \
        --keyring KEY_RING_NAME \
        --member=serviceAccount:service-PROJECT_NUMBER@cloudcomposer-accounts.iam.gserviceaccount.com \
        --role=roles/cloudkms.cryptoKeyEncrypterDecrypter \
        --project KEY_PROJECT_ID
      
    2. Conceda o papel ao agente de serviço do Artifact Registry:

      gcloud kms keys add-iam-policy-binding KEY_NAME \
        --location KEY_LOCATION \
        --keyring KEY_RING_NAME \
        --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-artifactregistry.iam.gserviceaccount.com \
        --role=roles/cloudkms.cryptoKeyEncrypterDecrypter \
        --project KEY_PROJECT_ID
      
    3. Conceda o papel ao agente de serviço do GKE:

      gcloud kms keys add-iam-policy-binding KEY_NAME \
        --location KEY_LOCATION \
        --keyring KEY_RING_NAME \
        --member=serviceAccount:service-PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com \
        --role=roles/cloudkms.cryptoKeyEncrypterDecrypter \
        --project KEY_PROJECT_ID
      
    4. Conceda o papel ao agente de serviço do Pub/Sub:

      gcloud kms keys add-iam-policy-binding KEY_NAME \
        --location KEY_LOCATION \
        --keyring KEY_RING_NAME \
        --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com \
        --role=roles/cloudkms.cryptoKeyEncrypterDecrypter \
        --project KEY_PROJECT_ID
      
    5. Conceda o papel ao agente de serviço do Compute Engine:

      gcloud kms keys add-iam-policy-binding KEY_NAME \
        --location KEY_LOCATION \
        --keyring KEY_RING_NAME \
        --member=serviceAccount:service-PROJECT_NUMBER@compute-system.iam.gserviceaccount.com \
        --role=roles/cloudkms.cryptoKeyEncrypterDecrypter \
        --project KEY_PROJECT_ID
      
    6. Conceda permissões de criptografia/descriptografia ao agente de serviço do Cloud Storage. Pule esta etapa se você usar um bucket de ambiente personalizado.

      gcloud storage service-agent \
        --authorize-cmek=projects/KEY_PROJECT_ID/locations/KEY_LOCATION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME
      

    Substitua:

    • PROJECT_ID pelo ID do projeto.
    • KEY_PROJECT_ID com o ID do projeto que armazena sua chave gerenciada pelo cliente. Se você usar uma chave de outro projeto, esse valor será diferente do ID do seu projeto. Se você usar uma chave do mesmo projeto, esse valor será o ID do seu projeto.
    • PROJECT_NUMBER pelo número do projeto.
    • KEY_LOCATION com o local da chave gerenciada pelo cliente. Esse local precisa ser igual ao do ambiente.
    • KEY_NAME pelo nome da chave gerenciada pelo cliente.
    • KEY_RING_NAME com o chaveiro que armazena a chave gerenciada pelo cliente.

    Para receber esses valores, execute os comandos gcloud projects describe, gcloud kms keyrings list e gcloud kms keys describe.

Etapa 3. Criar um ambiente com CMEK

Depois de criar uma chave de criptografia gerenciada pelo cliente, você pode usá-la para criar ambientes do Cloud Composer.

Console

Ao criar um ambiente:

  1. Na seção Criptografia de dados, selecione Chave de criptografia gerenciada pelo cliente (CMEK).

  2. Na lista suspensa Selecionar uma chave gerenciada pelo cliente, selecione sua chave.

  3. Uma mensagem vai aparecer para informar se for necessário fazer mais configurações. Nesse caso:

    1. Clique em Abrir assistente.

    2. Na caixa de diálogo Prepare CMEK key for use in Cloud Composer, confira a lista de agentes de serviço que precisam ter a função Criptografador/Descriptografador do CryptoKey do Cloud KMS na chave.

    3. Para conceder os papéis e as permissões necessários, clique em Conceder.

gcloud

O argumento --kms-key especifica uma chave de criptografia gerenciada pelo cliente para seu ambiente.

Para mais informações sobre como criar ambientes, consulte Criar ambientes. Por exemplo, talvez você queira especificar outros parâmetros para o ambiente.

gcloud composer environments create ENVIRONMENT_NAME \
  --location LOCATION \
  --image-version IMAGE_VERSION \
  --kms-key projects/KEY_PROJECT_ID/locations/KEY_LOCATION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME

Substitua:

  • ENVIRONMENT_NAME pelo nome do ambiente;
  • IMAGE_VERSION pelo nome da imagem do Cloud Composer.
  • KEY_PROJECT_ID com o ID do projeto em que a chave está localizada. Se você usar uma chave de outro projeto, esse valor será diferente do ID do seu projeto. Se você usar uma chave do mesmo projeto, esse valor será o ID do projeto.
  • LOCATION pela região em que o ambiente está localizado;
  • KEY_LOCATION pelo local da chave gerenciada pelo cliente. Esse local precisa ser igual ao do ambiente.
  • KEY_NAME pelo nome da chave gerenciada pelo cliente.
  • KEY_RING_NAME com o chaveiro que armazena a chave gerenciada pelo cliente.

Exemplo:

gcloud composer environments create example-environment \
  --location us-central1 \
  --image-version composer-2.11.1-airflow-2.10.2 \
  --kms-key projects/example-project/locations/us-central1/keyRings/example-key-ring/cryptoKeys/example-key

Conferir a configuração de criptografia do ambiente

É possível conferir a configuração de criptografia de um ambiente:

Console

  1. No console do Google Cloud, acesse a página Ambientes.

    Acessar "Ambientes"

  2. Na lista de ambientes, clique no nome do seu ambiente. A página Detalhes do ambiente é aberta.

  3. Acesse a guia Configuração do ambiente.

  4. Os detalhes sobre a criptografia estão listados no item Chave de criptografia de dados.

gcloud

Execute o comando gcloud a seguir para conferir a configuração de criptografia.

gcloud composer environments describe \
  ENVIRONMENT_NAME \
  --location LOCATION \
  --format="value(config.encryptionConfig)"

Substitua:

  • ENVIRONMENT_NAME pelo nome do ambiente
  • LOCATION pela região em que o ambiente está localizado;

Exemplo:

gcloud composer environments describe \
  example-environment \
  --location us-central1 \
  --format="value(config.encryptionConfig)"

Usar a CMEK para registros do Cloud Composer

O Cloud Logging oferece suporte à criptografia do armazenamento de registros com chaves CMEK. Recomendamos usar o procedimento padrão da CMEK para criptografar registros com chaves CMEK.

Para criptografar registros com chaves CMEK, siga as instruções descritas em Gerenciar as chaves que protegem os dados de armazenamento de registros.

Redirecionar os registros do Cloud Composer para um bucket do Cloud Storage criptografado por CMEK

Se você espera que os registros contenham dados confidenciais, convém redirecionar os registros do Cloud Composer para um bucket do Cloud Storage criptografado pelo CMEK usando o roteador de registros. Isso impede que os registros sejam enviados para o Monitoring.

Se você precisar de suporte do Cloud Customer Care, talvez seja necessário conceder aos engenheiros de suporte do Google acesso aos registros do Cloud Composer armazenados no Cloud Storage.

gcloud

  1. Crie um bucket do Cloud Storage para armazenar os registros.

    gcloud storage buckets create gs://BUCKET_NAME --location=LOCATION
    

    Substitua:

    • LOCATION pela região em que o ambiente está localizado;
    • BUCKET_NAME pelo nome do bucket.

    Exemplo:

    gcloud storage buckets create gs://composer-logs-us-central1-example-environment --location=us-central1
    
  2. Criptografe o bucket com sua chave CMEK.

    gcloud storage buckets update gs://BUCKET_NAME \
      --default-encryption-key=projects/KEY_PROJECT_ID/locations/KEY_LOCATION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME
    

    Substitua:

    • KEY_PROJECT_ID com o ID do projeto em que a chave está localizada. Se você usar uma chave de outro projeto, esse valor será diferente do ID do seu projeto. Se você usar uma chave do mesmo projeto, esse valor será o ID do projeto.
    • KEY_LOCATION pelo local da chave gerenciada pelo cliente. Esse local precisa ser igual ao do ambiente.
    • KEY_RING_NAME com o chaveiro que armazena a chave gerenciada pelo cliente.
    • KEY_NAME pelo nome da chave gerenciada pelo cliente.
    • BUCKET_NAME pelo nome do bucket.

    Exemplo:

    gcloud storage buckets update gs://composer-logs-us-central1-example-environment \
      --default-encryption-key=projects/example-project/locations/us-central1/keyRings/example-key-ring/cryptoKeys/example-key
    
  3. Crie um novo coletor de registros.

    gcloud logging sinks create \
    composer-log-sink-ENVIRONMENT_NAME \
    storage.googleapis.com/BUCKET_NAME \
    --log-filter "resource.type=cloud_composer_environment AND resource.labels.environment_name=ENVIRONMENT_NAME AND resource.labels.location=LOCATION"
    

    Substitua:

    • ENVIRONMENT_NAME pelo nome do ambiente
    • LOCATION pela região em que o ambiente está localizado;
    • BUCKET_NAME pelo nome do bucket.

    Exemplo:

    gcloud logging sinks create \
    composer-log-sink-example-environment \
    storage.googleapis.com/composer-logs-us-central1-example-environment \
    --log-filter "resource.type=cloud_composer_environment AND resource.labels.environment_name=example-environment AND resource.labels.location=us-central1"
    
  4. Conceda o papel Criador de objetos do Storage à conta de serviço desse bucket. A conta de serviço é mostrada no resultado do comando anterior.

    gcloud projects add-iam-policy-binding \
      PROJECT_ID \
      --member="serviceAccount:LOGGING_SERVICE_AGENT" \
      --role="roles/storage.objectCreator" \
      --condition=None
    

    Substitua:

    • PROJECT_ID pelo ID do projeto;
    • LOGGING_SERVICE_AGENT com a conta do agente de serviço de registro para este bucket. O nome dessa conta é obtido na etapa anterior.

    Exemplo:

    gcloud projects add-iam-policy-binding \
      example-project \
      --member="serviceAccount:example-sa@gcp-sa-logging.iam.gserviceaccount.com" \
      --role="roles/storage.objectCreator" \
      --condition=None
    
  5. Exclua os registros do novo ambiente do Monitoring.

    gcloud beta logging sinks update _Default \
      --add-exclusion name=ENVIRONMENT_NAME-exclusion,filter="resource.type=cloud_composer_environment AND resource.labels.environment_name=ENVIRONMENT_NAME AND resource.labels.location=LOCATION"
    

    Substitua:

    • ENVIRONMENT_NAME pelo nome do ambiente
    • LOCATION pela região em que o ambiente está localizado;

    Exemplo:

    gcloud beta logging sinks update _Default \
      --add-exclusion name=example-environment-exclusion,filter="resource.type=cloud_composer_environment AND resource.labels.environment_name=example-environment AND resource.labels.location=us-central1"
    
  6. Adicionar criptografia CMEK no nível da organização ao roteador de registros

    gcloud logging cmek-settings describe \
      --organization=ORGANIZATION_ID
    
    gcloud kms keys add-iam-policy-binding \
          --project=KEY_PROJECT_ID \
          --member LOGGING_SERVICE_AGENT \
          --role roles/cloudkms.cryptoKeyEncrypterDecrypter \
          --location=KEY_LOCATION \
          --keyring=KEY_RING_NAME \
          KEY_NAME
    
    gcloud logging cmek-settings update \
      --organization=ORGANIZATION_ID \
      --kms-project=KEY_PROJECT_ID \
      --kms-keyring=KEY_RING_NAME \
      --kms-location=KEY_LOCATION \
      --kms-key-name=KEY_NAME
    

    Substitua:

    • ORGANIZATION_ID pelo ID da organização.
    • KEY_PROJECT_ID com o ID do projeto em que a chave está localizada. Se você usar uma chave de outro projeto, esse valor será diferente do ID do seu projeto. Se você usar uma chave do mesmo projeto, esse valor será o ID do projeto.
    • KEY_RING_NAME com o chaveiro que armazena a chave gerenciada pelo cliente.
    • KEY_LOCATION pelo local da chave gerenciada pelo cliente. Esse local precisa ser igual ao do ambiente.
    • KEY_NAME pelo nome da chave gerenciada pelo cliente.

Rotação de chaves CMEK para o Cloud Composer

Depois de configurar a criptografia no seu ambiente usando chaves CMEK, você também pode considerar a rotação dessas chaves regularmente, conforme descrito na documentação do KMS.

Quando você rotaciona uma chave CMEK, os dados criptografados com versões de chave anteriores não são recriptografados automaticamente com a nova versão da chave. Para mais informações, consulte Como recriptografar dados.

Mais especificamente, isso se aplica a:

  • Objetos armazenados no bucket do ambiente.
  • Cata armazenada no banco de dados do Airflow.
  • Imagens de contêiner armazenadas em repositórios do Artifact Registry.
  • Todos os outros objetos de dados criptografados com CMEK no ambiente do Cloud Composer.

A seguir