Cloud Composer 1 | Cloud Composer 2
Nesta página, você verá como usar as chaves de criptografia gerenciadas pelo cliente (CMEK, na sigla em inglês) para proteger os ambientes do Cloud Composer. As chaves de criptografia gerenciadas pelo cliente são usadas para criptografar/descriptografar dados de usuários 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 é compatível com a 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
Ative a API Artifact Registry.
gcloud
Ative a API Artifact Registry.
gcloud services enable artifactregistry.googleapis.com
Informações do usuário não protegidas com criptografia CMEK
O Cloud Monitoring não é compatível com a criptografia CMEK. O nome do ambiente e os nomes dos DAGs são armazenados no banco de dados do Monitoring no formato criptografado usando chaves de criptografia gerenciadas pelo Google.
O Cloud Composer armazena as seguintes informações protegidas por chaves gerenciadas pelo Google, não por clientes:
- 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 substring do nome do ambiente.
Use uma chave de criptografia gerenciada pelo cliente em 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 o ambiente está localizado.
Etapa 2. Conceder papéis a agentes de serviço
Console
Ignore esta etapa. Você concede permissões a agentes de serviços ao especificar uma chave para seu ambiente.
gcloud
Os agentes de serviço a seguir precisam ter o papel Criptografador/descriptografador da CryptoKey do Cloud KMS na chave que você usa para o ambiente.
Substitua PROJECT_NUMBER
pelo número do seu projeto.
Agente de serviço | E-mail da conta de serviço | Nome do serviço da API |
---|---|---|
Agente de serviços do Cloud Composer | serviço-PROJECT_NUMBER@cloudcomposer-accounts.iam.gserviceaccount.com | composer.googleapis.com |
Agente de serviço do Artifact Registry | serviço-PROJECT_NUMBER@gcp-sa-artifactregistry.iam.gserviceaccount.com | artifactregistry.googleapis.com |
Agente de serviço do GKE | service-PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com | container.googleapis.com |
Agente de serviço do Pub/Sub | serviço-PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com | pubsub.googleapis.com |
Agente de serviços do Compute Engine | serviço-PROJECT_NUMBER@compute-system.iam.gserviceaccount.com | compute.googleapis.com |
Agente de serviço do Cloud Storage | serviço-PROJECT_NUMBER@gs-project-accounts.iam.gserviceaccount.com | Conceder permissões de criptografia/descriptografia com gsutil kms authorize |
(Se necessário) Se algumas dessas contas de serviço não estiverem presentes no 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 ambientes do Cloud Composer no projeto.
Para adicionar essas contas de serviço, crie identidades para os serviços listados com o comando a seguir:
gcloud beta services identity create \ --service=API_SERVICE_NAME
Substitua
API_SERVICE_NAME
pelo nome do serviço da API que não tem uma conta de serviço no seu projeto.Exemplo:
gcloud beta services identity create \ --service=composer.googleapis.com
Conceda 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_ID
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
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
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
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
Conceda permissões de criptografia/descriptografia ao agente de serviço do Cloud Storage.
gsutil kms authorize -k \ projects/KEY_PROJECT_ID/locations/KEY_LOCATION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME
Substitua:
PROJECT_ID
pelo ID do projeto.KEY_PROJECT_ID
pelo 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 seu projeto.KEY_LOCATION
pelo local da chave gerenciado pelo cliente. Esse local precisa ser o mesmo do seu ambiente.KEY_NAME
pelo nome da chave gerenciada pelo cliente;KEY_RING_NAME
pelo keyring que armazena sua chave gerenciada pelo cliente.
Para acessar esses valores, execute os comandos
gcloud projects describe
,gcloud kms keyrings list
egcloud kms keys describe
.
Etapa 3. Criar um ambiente com CMEK
Depois de criar uma chave de criptografia gerenciada pelo cliente, você poderá usá-la para criar ambientes do Cloud Composer.
Console
Na seção Criptografia de dados, selecione Chave de criptografia gerenciada pelo cliente (CMEK).
Na lista suspensa Selecionar uma chave gerenciada pelo cliente, escolha sua chave.
Se for necessária uma configuração adicional, uma mensagem será exibida para informar sobre isso. Nesse caso:
Clique em Abrir assistente.
Na caixa de diálogo Preparar chave CMEK para uso no Cloud Composer, veja a lista de agentes de serviços que precisam ter o papel Criptografador/descriptografador da CryptoKey do Cloud KMS na chave.
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, convém 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_NAME
pelo nome do ambiente;IMAGE_VERSION
pelo nome da imagem do Cloud Composer.KEY_PROJECT_ID
pelo 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 seu projeto.LOCATION
pela região em que o ambiente está localizado;KEY_LOCATION
pelo local da chave gerenciada pelo cliente. Esse local precisa ser o mesmo do seu ambiente.KEY_NAME
pelo nome da chave gerenciada pelo cliente;KEY_RING_NAME
pelo keyring que armazena sua chave gerenciada pelo cliente.
Exemplo:
gcloud composer environments create example-environment \
--location us-central1 \
--image-version composer-2.0.12-airflow-2.2.3 \
--kms-key projects/example-project/locations/us-central1/keyRings/example-key-ring/cryptoKeys/example-key
Ver a configuração de criptografia do ambiente
Você pode ver a configuração de criptografia de um ambiente atual:
Console
No Console do Google Cloud, acesse a página Ambientes.
Na lista de ambientes, clique no nome do seu ambiente. A página Detalhes do ambiente será 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 seguinte comando gcloud
para ver a configuração de criptografia
gcloud composer environments describe \
ENVIRONMENT_NAME \
--location LOCATION \
--format="value(config.encryptionConfig)"
Substitua:
ENVIRONMENT_NAME
pelo nome do ambienteLOCATION
pela região em que o ambiente está localizado;
Exemplo:
gcloud composer environments describe \
example-environment \
--location us-central1 \
--format="value(config.encryptionConfig)"
Usar CMEK para registros do Cloud Composer
Se você espera que os registros contenham dados confidenciais, redirecione os registros do Cloud Composer para um bucket do Cloud Storage criptografado por CMEK usando o Log Router. 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
Criar um bucket do Cloud Storage para armazenar os registros
gsutil mb -l LOCATION gs://BUCKET_NAME
Substitua:
LOCATION
pela região em que o ambiente está localizado;BUCKET_NAME
pelo nome do bucket.
Exemplo:
gsutil mb -l us-central1 gs://composer-logs-us-central1-example-environment
Criptografe o bucket com a chave CMEK.
gsutil kms encryption \ -k projects/KEY_PROJECT_ID/locations/KEY_LOCATION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME \ gs://BUCKET_NAME
Substitua:
KEY_PROJECT_ID
pelo 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 seu projeto.KEY_LOCATION
pelo local da chave gerenciada pelo cliente. Esse local precisa ser o mesmo do seu ambiente.KEY_RING_NAME
pelo keyring que armazena sua chave gerenciada pelo cliente.KEY_NAME
pelo nome da chave gerenciada pelo cliente;BUCKET_NAME
pelo nome do bucket.
Exemplo:
gsutil kms encryption \ -k projects/example-project/locations/us-central1/keyRings/example-key-ring/cryptoKeys/example-key \ gs://composer-logs-us-central1-example-environment
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 ambienteLOCATION
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"
Conceda o papel Criador de objeto do Storage à conta de serviço desse bucket. A conta de serviço é exibida 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
pela conta do agente de serviço do Logging desse bucket. O nome dela é encontrado 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
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 ambienteLOCATION
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"
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 sua organização.KEY_PROJECT_ID
pelo 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 seu projeto.KEY_RING_NAME
pelo keyring que armazena sua chave gerenciada pelo cliente.KEY_LOCATION
pelo local da chave gerenciada pelo cliente. Esse local precisa ser o mesmo do seu 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, considere alternar as chaves regularmente, conforme descrito na documentação do KMS.
Ao fazer a rotação de uma chave CMEK, os dados criptografados com versões anteriores não são automaticamente criptografados com a nova chave. Saiba mais sobre como criptografar dados novamente. Especificamente, isso se aplica a:
objetos armazenados no bucket do ambiente
dados armazenados no banco de dados de metadados do Airflow
imagens de contêiner armazenadas em repositórios do AritFact Registry
e todos os outros objetos de dados criptografados com CMEK no environmnet do Cloud Composer.