Cloud Composer 3 | Cloud Composer 2 | Cloud Composer 1
Nesta página, descrevemos como usar as chaves de criptografia gerenciadas pelo cliente (CMEK) para proteger ambientes do Cloud Composer.
Dados protegidos com criptografia CMEK
O Cloud Composer protege os seguintes dados com criptografia CMEK:
- Conteúdo e esquema do banco de dados do Airflow
- Registros de ambiente e de tarefas do Airflow no Cloud Logging
- Conteúdo do bucket do ambiente
- Secrets armazenados no cluster do ambiente
- Discos permanentes usados pela fila de tarefas
- Imagens de contêiner de componentes de ambiente armazenadas em repositórios do Artifact Registry
Para detalhes específicos sobre como os dados são criptografados, consulte:
- Sobre as chaves de criptografia gerenciadas pelo cliente (CMEK) na documentação do Cloud SQL.
- Use chaves de criptografia gerenciadas pelo cliente (CMEK) e Criptografe secrets na camada de aplicativo na documentação do Google Kubernetes Engine.
- Chaves de criptografia gerenciadas pelo cliente na documentação do Cloud Storage.
- Configure a CMEK para o Cloud Logging na documentação do Cloud Logging.
Dados não protegidos com criptografia CMEK
O Cloud Monitoring não é compatível com a criptografia CMEK. O nome do seu ambiente e os nomes dos DAGs são armazenados no banco de dados do Monitoring em 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 com chaves gerenciadas pelo cliente:
- Nome do ambiente
- Substituições da configuração do Airflow
Variáveis de ambiente
Descrições de intervalos de IP permitidos
Intervalos de IP
Rótulos
Os nomes de alguns parâmetros armazenados pelo Cloud Composer podem incluir uma sub-string do nome do ambiente.
Rotação de chaves CMEK para o Cloud Composer
Depois de configurar a criptografia no seu ambiente usando chaves CMEK, considere fazer a rotação dessas chaves regularmente, conforme descrito na documentação do KMS.
Quando você faz a rotação de uma chave CMEK, os dados criptografados com versões anteriores não são recriptografados automaticamente com a nova versão da chave. Para mais informações, consulte Como recriptografar dados.
Especificamente, isso se aplica a:
- Objetos armazenados no bucket do ambiente.
- Dados armazenados no banco de dados do Airflow.
- Todos os outros objetos de dados criptografados com CMEK no ambiente do Cloud Composer.
- Imagens de contêiner dos componentes do ambiente armazenadas em repositórios do Artifact Registry.
Usar uma chave de criptografia gerenciada pelo cliente no seu 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 atual.
O Cloud Composer é compatível com a criptografia CMEK usando chaves armazenadas em gerenciadores de chaves externas.
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 as APIs Cloud Key Management Service e Artifact Registry ao perímetro.
Ative a API Artifact Registry.
Console
Enable the Artifact Registry API.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.gcloud
Enable the Artifact Registry API:
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.gcloud services enable artifactregistry.googleapis.com
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
Ignorar esta etapa. Você concede permissões aos agentes de serviço quando especifica uma chave para seu ambiente.
gcloud
Os seguintes agentes de serviço precisam ter o papel Criptografador/Descriptografador de CryptoKey do Cloud KMS na chave usada no 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 |
(Se necessário) Se algumas dessas contas de serviço não estiverem presentes no seu projeto, isso significa que uma identidade para esse serviço ainda não foi criada. Isso pode acontecer, por exemplo, se você ainda não tiver criado 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_NAMESubstitua
API_SERVICE_NAMEpelo nome do serviço da API de um serviço que não tem uma conta de serviço no seu projeto.Exemplo:
gcloud beta services identity create \ --service=composer.googleapis.comConceda permissões aos agentes de serviço:
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_IDConceda 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_IDConceda 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_IDConceda 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_IDConceda 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_IDConceda permissões de criptografia/descriptografia ao agente de serviço do Cloud Storage.
gcloud storage service-agent \ --authorize-cmek=projects/KEY_PROJECT_ID/locations/KEY_LOCATION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME
Substitua:
PROJECT_IDcom o ID do projeto.KEY_PROJECT_IDcom 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 projeto.PROJECT_NUMBERcom o número do projeto.KEY_LOCATIONcom o local da sua chave gerenciada pelo cliente. Esse local precisa ser igual ao do seu ambiente.KEY_NAMEpelo nome da chave gerenciada pelo cliente.KEY_RING_NAMEcom o keyring que armazena sua chave gerenciada pelo cliente.
Para receber esses valores, execute os comandos
gcloud projects describe,gcloud kms keyrings listegcloud kms keys describe.
Etapa 3. Criar um ambiente com CMEK
Depois de criar uma chave de criptografia gerenciada pelo cliente, use-a para criar ambientes do Cloud Composer.
Console
Expanda a seção Rede, substituições de configuração do Airflow e outros recursos. Na seção Criptografia de dados, selecione Chave do Cloud Key Management Service.
Na lista suspensa Selecionar uma chave do Cloud Key Management Service, escolha sua chave.
Se for necessário fazer mais alguma configuração, uma mensagem vai aparecer para informar. Nesse caso:
Clique em Abrir assistente.
Na caixa de diálogo Preparar a chave da CMEK para uso no Cloud Composer, confira a lista de agentes de serviço que precisam ter o papel Criptografador/Descriptografador de CryptoKey do Cloud KMS na chave.
Para conceder os papéis e as permissões necessárias, 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, você pode especificar outros parâmetros para 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
Substitua:
ENVIRONMENT_NAMEpelo nome do ambiente;IMAGE_VERSIONpelo nome da imagem do Cloud Composer.KEY_PROJECT_IDcom 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.LOCATIONpela região em que o ambiente está localizado;KEY_LOCATIONcom o local da sua chave gerenciada pelo cliente. Esse local precisa ser o mesmo do seu ambiente.KEY_NAMEpelo nome da chave gerenciada pelo cliente.KEY_RING_NAMEcom o keyring que armazena sua chave gerenciada pelo cliente.
Exemplo:
gcloud composer environments create example-environment \
--location us-central1 \
--image-version composer-1.20.12-airflow-1.10.15 \
--kms-key projects/example-project/locations/us-central1/keyRings/example-key-ring/cryptoKeys/example-key
Ver a configuração de criptografia do ambiente
É possível conferir a configuração de criptografia de um ambiente:
Console
No console Google Cloud , acesse a página Ambientes.
Na lista de ambientes, clique no nome do seu ambiente. A página Detalhes do ambiente é aberta.
Acesse a guia Configuração do ambiente.
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_NAMEpelo nome do ambienteLOCATIONpela 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 da CMEK.
Para criptografar registros com chaves CMEK, siga as instruções descritas em Gerenciar as chaves que protegem os dados de armazenamento do Logging.
Redirecionar registros do Cloud Composer para um bucket do Cloud Storage criptografado com CMEK
Se você espera que seus registros contenham dados sensíveis, convém redirecionar os registros do Cloud Composer para um bucket do Cloud Storage criptografado com CMEK usando o roteador de registros. Isso impede que os registros sejam enviados ao 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
Crie um novo bucket do Cloud Storage para armazenar os registros.
gcloud storage buckets create gs://BUCKET_NAME --location=LOCATIONSubstitua:
LOCATIONpela região em que o ambiente está localizado;BUCKET_NAMEcom o nome do bucket.
Exemplo:
gcloud storage buckets create gs://composer-logs-us-central1-example-environment --location=us-central1Criptografe o bucket com a 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_NAMESubstitua:
KEY_PROJECT_IDcom 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_LOCATIONcom o local da sua chave gerenciada pelo cliente. Esse local precisa ser o mesmo do seu ambiente.KEY_RING_NAMEcom o keyring que armazena sua chave gerenciada pelo cliente.KEY_NAMEpelo nome da chave gerenciada pelo cliente.BUCKET_NAMEpelo 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-keyCrie 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_NAMEpelo nome do ambienteLOCATIONpela região em que o ambiente está localizado;BUCKET_NAMEpelo 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"Conceda o papel Criador de objetos do Storage à conta de serviço para este 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=NoneSubstitua:
PROJECT_IDpelo ID do projeto;LOGGING_SERVICE_AGENTcom a conta do agente de serviço do Logging para esse 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=NoneExclua os registros do novo ambiente no 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_NAMEpelo nome do ambienteLOCATIONpela 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"Adicionar criptografia CMEK no nível da organização ao roteador de registros
gcloud logging cmek-settings describe \ --organization=ORGANIZATION_IDgcloud 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_NAMEgcloud 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_NAMESubstitua:
ORGANIZATION_IDpelo ID da organização.KEY_PROJECT_IDcom 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_NAMEcom o keyring que armazena sua chave gerenciada pelo cliente.KEY_LOCATIONcom o local da sua chave gerenciada pelo cliente. Esse local precisa ser o mesmo do seu ambiente.KEY_NAMEpelo nome da chave gerenciada pelo cliente.