Configure a encriptação com chaves de encriptação geridas pelo cliente

Cloud Composer 3 | Cloud Composer 2 | Cloud Composer 1

Esta página descreve como usar as chaves de encriptação geridas pelo cliente (CMEK) para proteger os ambientes do Cloud Composer.

Acerca das chaves de encriptação geridas pelo cliente (CMEK)

Por predefinição, o Cloud Composer encripta o conteúdo do cliente em repouso. O Cloud Composer processa a encriptação por si sem ações adicionais da sua parte. Esta opção chama-se Encriptação predefinida da Google.

Se quiser controlar as suas chaves de encriptação, pode usar chaves de encriptação geridas pelo cliente (CMEK) no Cloud KMS com serviços integrados com CMEK, incluindo o Cloud Composer. A utilização de chaves do Cloud KMS dá-lhe controlo sobre o respetivo nível de proteção, localização, programação de rotação, utilização e autorizações de acesso, bem como limites criptográficos. A utilização do Cloud KMS também permite ver registos de auditoria e controlar os ciclos de vida das chaves. Em vez de a Google possuir e gerir as chaves de encriptação de chaves (KEKs) simétricas que protegem os seus dados, controla e gere estas chaves no Cloud KMS.

Depois de configurar os seus recursos com CMEKs, a experiência de acesso aos recursos do Cloud Composer é semelhante à utilização da encriptação predefinida da Google. Para mais informações acerca das suas opções de encriptação, consulte o artigo Chaves de encriptação geridas pelo cliente (CMEK).

Dados protegidos com encriptação CMEK

O Cloud Composer protege os seguintes dados com a encriptação CMEK:

  • Conteúdos e esquema da base de dados do Airflow
  • Ambiente e registos de tarefas do Airflow no Cloud Logging
  • Conteúdos do contentor do ambiente
  • Secrets armazenados no cluster do ambiente
  • Discos persistentes usados pela fila de tarefas
  • Imagens de contentores de componentes do ambiente armazenadas em repositórios do Artifact Registry

Para ver detalhes específicos sobre como os dados são encriptados, consulte:

Dados não protegidos com encriptação CMEK

O Cloud Monitoring não suporta a encriptação CMEK. O nome do seu ambiente e os nomes dos DAGs são armazenados na base de dados de monitorização de forma encriptada através do Google-owned and Google-managed encryption keys.

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

  • Nome do ambiente
  • Substituições da configuração do Airflow
  • Variáveis de ambiente

  • Etiquetas

  • Os nomes de alguns parâmetros armazenados pelo Cloud Composer podem incluir uma subcadeia de carateres do nome do ambiente.

Rotação de chaves CMEK para o Cloud Composer

Depois de configurar a encriptação no seu ambiente com chaves CMEK, também pode considerar rodar estas chaves regularmente, conforme descrito na documentação do KMS.

Quando alterna uma chave CMEK, os dados encriptados com versões anteriores da chave não são automaticamente reencriptados com a nova versão da chave. Para mais informações, consulte o artigo Voltar a encriptar dados.

Especificamente, isto aplica-se ao seguinte:

  • Objetos armazenados no contentor do ambiente.
  • Dados armazenados na base de dados do Airflow.
  • Todos os outros objetos de dados encriptados com CMEK no ambiente do Cloud Composer.
  • Imagens de contentores de componentes do ambiente armazenadas em repositórios do Artifact Registry.

Use uma chave de encriptação gerida pelo cliente para o seu ambiente

Antes de começar

  • Só pode configurar a CMEK quando cria um ambiente. Não é possível ativar o CMEK para um ambiente existente.

  • O Cloud Composer suporta a encriptação CMEK através de chaves armazenadas em gestores de chaves externos.

  • Tem de criar uma chave CMEK na mesma região onde os seus ambientes estão localizados. Não pode usar chaves multirregionais ou globais.

  • Se quiser que o seu ambiente seja executado num perímetro dos VPC Service Controls, tem de adicionar a API Cloud Key Management Service ao perímetro.

Passo 1. Crie uma chave de encriptação gerida pelo cliente

Siga os passos descritos no artigo Criar chaves de encriptação simétricas para criar uma chave na região onde o seu ambiente está localizado.

Passo 2. Conceda funções a agentes do serviço

Consola

Ignorar este passo. Concede autorizações a agentes de serviço quando especifica uma chave para o seu ambiente.

gcloud

Os seguintes agentes de serviço têm de ter a função Encriptador/desencriptador de CryptoKey do Cloud KMS na chave que usa para o seu ambiente.

Substitua PROJECT_NUMBER pelo número do projeto.

Nome do agente do serviço Email da conta de serviço Nome do serviço API
Agente de serviço do Cloud Composer service-PROJECT_NUMBER@cloudcomposer-accounts.iam.gserviceaccount.com composer.googleapis.com
Agente de serviço do Cloud Storage service-PROJECT_NUMBER@gs-project-accounts.iam.gserviceaccount.com Conceda autorizações de encriptação/desencriptação com o gcloud storage service-agent --authorize-cmek
  1. (Se necessário) Se algumas destas contas de serviço não estiverem presentes no seu projeto, significa que ainda não foi criada uma identidade para este serviço. Isto pode acontecer, por exemplo, se ainda não tiver criado ambientes do Cloud Composer no seu projeto.

    Para adicionar estas contas de serviço, crie identidades para os serviços indicados 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 seu projeto.

    Exemplo:

    gcloud beta services identity create \
      --service=composer.googleapis.com
    
  2. Conceda autorizações a agentes de serviço:

    1. Conceda a função ao agente do 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 autorizações de encriptação/desencriptação ao agente de serviço do Cloud Storage. Pode ignorar este passo se usar o contentor de um ambiente personalizado.

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

    Substituir:

    • PROJECT_ID com o ID do projeto.
    • KEY_PROJECT_ID com o ID do projeto que armazena a chave gerida pelo cliente. Se usar uma chave de outro projeto, este valor é diferente do ID do seu projeto. Se usar uma chave do mesmo projeto, este valor é o ID do seu projeto.
    • PROJECT_NUMBER com o número do projeto.
    • KEY_LOCATION com a localização da chave gerida pelo cliente. Esta localização tem de ser igual à localização do seu ambiente.
    • KEY_NAME com o nome da chave gerida pelo cliente.
    • KEY_RING_NAME com o conjunto de chaves que armazena a sua chave gerida pelo cliente.

    Para obter estes valores, pode executar os comandos gcloud projects describe, gcloud kms keyrings list e gcloud kms keys describe.

Passo 3. Crie um ambiente com CMEK

Depois de criar uma chave de encriptação gerida pelo cliente, pode usá-la para criar ambientes do Cloud Composer.

Consola

Quando cria um ambiente:

  1. Expanda a secção Configuração avançada. Na secção Encriptação de dados, selecione Chave do Cloud Key Management Service.

  2. Na lista pendente Selecione uma chave do Serviço de gestão de chaves na nuvem, selecione a sua chave.

  3. Se for necessária uma configuração adicional, é apresentada uma mensagem para o informar. Neste caso:

    1. Clique em Abrir assistente.

    2. Na caixa de diálogo Prepare a chave CMEK para utilização no Cloud Composer, veja a lista de agentes de serviço que têm de ter a função Encriptador/desencriptador de CryptoKey do Cloud KMS na chave.

    3. Para conceder as funções e as autorizações necessárias, clique em Conceder.

gcloud

O argumento --kms-key especifica uma chave de encriptação gerida pelo cliente para o seu ambiente.

Para mais informações sobre a criação de ambientes, consulte o artigo Crie ambientes. Por exemplo, pode querer especificar outros parâmetros para o seu 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

Substituir:

  • ENVIRONMENT_NAME com o nome do ambiente.
  • IMAGE_VERSION com o nome da imagem do Cloud Composer.
  • KEY_PROJECT_ID com o ID do projeto onde a chave está localizada. Se usar uma chave de outro projeto, este valor é diferente do ID do seu projeto. Se usar uma chave do mesmo projeto, este valor é o ID do projeto.
  • LOCATION com a região onde o ambiente está localizado.
  • KEY_LOCATION com a localização da sua chave gerida pelo cliente. Esta localização tem de ser a mesma que a localização do seu ambiente.
  • KEY_NAME com o nome da chave gerida pelo cliente.
  • KEY_RING_NAME com o conjunto de chaves que armazena a sua chave gerida pelo cliente.

Exemplo:

gcloud composer environments create example-environment \
  --location us-central1 \
  --image-version composer-3-airflow-2.10.5-build.11 \
  --kms-key projects/example-project/locations/us-central1/keyRings/example-key-ring/cryptoKeys/example-key

Veja a configuração de encriptação do ambiente

Pode ver a configuração de encriptação de um ambiente existente:

Consola

  1. Na Google Cloud consola, aceda à página Ambientes.

    Aceder a Ambientes

  2. Na lista de ambientes, clique no nome do seu ambiente. É apresentada a página Detalhes do ambiente.

  3. Aceda ao separador Configuração do ambiente.

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

gcloud

Execute o seguinte comando gcloud para ver a configuração de encriptação

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

Substituir:

  • ENVIRONMENT_NAME com o nome do ambiente.
  • LOCATION com a região onde o ambiente está localizado.

Exemplo:

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

Use CMEK para registos do Cloud Composer

O Cloud Logging suporta a encriptação do armazenamento de registos com chaves CMEK. Recomendamos que use o procedimento CMEK padrão para encriptar registos com chaves CMEK.

Para encriptar registos com chaves CMEK, siga as instruções descritas no artigo Faça a gestão das chaves que protegem os dados de armazenamento do Logging.

Redirecione os registos do Cloud Composer para um contentor do Cloud Storage encriptado com CMEK

Se espera que os seus registos contenham dados confidenciais, recomendamos que redirecione os registos do Cloud Composer para um contentor do Cloud Storage encriptado com CMEK através do Log Router. Desta forma, impede que os seus registos sejam enviados para a Monitorização.

Se precisar de apoio técnico do Cloud Customer Care, pode ter de conceder aos engenheiros de apoio técnico da Google acesso aos registos do Cloud Composer armazenados no Cloud Storage.

gcloud

  1. Crie um novo contentor do Cloud Storage para armazenar os registos.

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

    Substituir:

    • LOCATION com a região onde o ambiente está localizado.
    • BUCKET_NAME com o nome do contentor.

    Exemplo:

    gcloud storage buckets create gs://composer-logs-us-central1-example-environment --location=us-central1
    
  2. Encriptar o contentor com a 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
    

    Substituir:

    • KEY_PROJECT_ID com o ID do projeto onde a chave está localizada. Se usar uma chave de outro projeto, este valor é diferente do ID do seu projeto. Se usar uma chave do mesmo projeto, este valor é o ID do seu projeto.
    • KEY_LOCATION com a localização da sua chave gerida pelo cliente. Esta localização tem de ser a mesma que a localização do seu ambiente.
    • KEY_RING_NAME com o conjunto de chaves que armazena a sua chave gerida pelo cliente.
    • KEY_NAME com o nome da chave gerida pelo cliente.
    • BUCKET_NAME com o nome do contentor.

    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 destino de registo.

    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"
    

    Substituir:

    • ENVIRONMENT_NAME com o nome do ambiente.
    • LOCATION com a região onde o ambiente está localizado.
    • BUCKET_NAME com o nome do contentor.

    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 a função criador de objetos de armazenamento à conta de serviço para este contentor. A conta de serviço é apresentada no resultado do comando anterior.

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

    Substituir:

    • PROJECT_ID com o ID do projeto.
    • LOGGING_SERVICE_AGENT com a conta do agente do serviço de registo para este contentor. O nome desta conta é obtido no passo 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 registos do novo ambiente da monitorização.

    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"
    

    Substituir:

    • ENVIRONMENT_NAME com o nome do ambiente.
    • LOCATION com a região onde 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. Adicione a encriptação CMEK ao nível da organização ao Log Router.

    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
    

    Substituir:

    • ORGANIZATION_ID com o seu ID da organização.
    • KEY_PROJECT_ID com o ID do projeto onde a chave está localizada. Se usar uma chave de outro projeto, este valor é diferente do ID do seu projeto. Se usar uma chave do mesmo projeto, este valor é o ID do seu projeto.
    • KEY_RING_NAME com o conjunto de chaves que armazena a sua chave gerida pelo cliente.
    • KEY_LOCATION com a localização da sua chave gerida pelo cliente. Esta localização tem de ser a mesma que a localização do seu ambiente.
    • KEY_NAME com o nome da chave gerida pelo cliente.

O que se segue?