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:
- Acerca das chaves de encriptação geridas pelo cliente (CMEK) na documentação do Cloud SQL.
- Use chaves de encriptação geridas pelo cliente (CMEK) e Encriptar segredos na camada de aplicação na documentação do Google Kubernetes Engine.
- Chaves de encriptação geridas 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 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 |
(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
Conceda autorizações a agentes de serviço:
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
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
egcloud 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:
Expanda a secção Configuração avançada. Na secção Encriptação de dados, selecione Chave do Cloud Key Management Service.
Na lista pendente Selecione uma chave do Serviço de gestão de chaves na nuvem, selecione a sua chave.
Se for necessária uma configuração adicional, é apresentada uma mensagem para o informar. Neste caso:
Clique em Abrir assistente.
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.
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
Na Google Cloud consola, aceda à página Ambientes.
Na lista de ambientes, clique no nome do seu ambiente. É apresentada a página Detalhes do ambiente.
Aceda ao separador Configuração do ambiente.
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
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
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
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"
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
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"
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.