Cloud Composer 1 | Cloud Composer 2 | Cloud Composer 3
Nesta página, mostramos como usar o Gerenciador de secrets para armazenar com segurança conexões e secrets do Airflow.
Configurar o Secret Manager para seu ambiente
Esta seção explica como configurar o Secret Manager para que você possa usar secrets com seu ambiente do Cloud Composer.
Ativar a API Secret Manager
Console
Enable the Secret Manager API.
gcloud
Enable the Secret Manager API:
gcloud services enable secretmanager.googleapis.com
Configurar o controle de acesso
É preciso configurar o controle de acesso para que o Airflow possa acessar secrets armazenados no Secret Manager.
Para fazer isso, a conta de serviço que acessa os secrets precisa ter um papel com
a permissão secretmanager.versions.access
. Por exemplo,
o papel de Acessador de secrets do Gerenciador de secrets inclui essa permissão.
É possível conceder esse papel no nível Segredo, Projeto, Pasta ou Organização.
Use uma das seguintes opções:
(Recomendado) Conceda esse papel à conta de serviço do seu ambiente.
Modifique a conta de serviço na qual o Airflow acessa o Gerenciador de secrets.
- Conceda esse papel a uma conta de serviço.
- Defina o parâmetro
gcp_key_path
da opção de configuração do Airflow dobackend_kwargs
de modo que aponte para um arquivo JSON com as credenciais da conta de serviço.
Ativar e configurar o back-end do Gerenciador de secrets
Modifique a seguinte opção de configuração do Airflow:
Seção Chave Valor secrets
backend
airflow.providers.google.cloud.secrets.secret_manager.CloudSecretManagerBackend
Adicione configurações opcionais substituindo a seguinte opção de configuração do Airflow:
Seção Chave Valor secrets
backend_kwargs
Veja a descrição a seguir. O valor
backend_kwargs
é a representação JSON do Objetobackend_kwargs
pelos seguintes campos:connections_prefix
: prefixo do nome do secret a ser lido para get Conexões. O padrão éairflow-connections
.variables_prefix
: prefixo do nome do secret a ser lido para receber. Variáveis. O padrão é:airflow-variables
.gcp_key_path
: caminho para o arquivo JSON de credenciais do Google Cloud Se não for fornecida, será usada a conta de serviço padrão.gcp_keyfile_dict
: dicionário JSON de credenciais do Google Cloud. Mutuamente exclusivo comgcp_key_path
.sep
: separador usado para concatenarconnections_prefix
econn_id
. O padrão é-
.project_id
: o ID do projeto do Google Cloud em que os secrets são armazenados.
Por exemplo, o valor de
backend_kwargs
pode ser:{"project_id": "<project id>", "connections_prefix":"example-connections", "variables_prefix":"example-variables", "sep":"-"}
.
Adicionar conexões e variáveis no Gerenciador de secrets
Crie secrets seguindo as etapas descritas em Como criar secrets e versões.
Variáveis
- É necessário usar o formato
[variables_prefix][sep][variable_name]
. - O valor padrão de
[variables_prefix]
éairflow-variables
. - O separador padrão de
[sep]
é-
.
Por exemplo, se o nome da variável for example-var
, o nome do
secret será airflow-variables-example-var
.
Nomes de conexão
- É necessário usar o formato
[connection_prefix][sep][connection_name]
. - O valor padrão de
[connection_prefix]
éairflow-connections
. - O separador padrão de
[sep]
é-
.
Por exemplo, se o nome da conexão for exampleConnection
,
o nome do secret será airflow-connections-exampleConnection
.
Valores de conexão
É necessário usar a representação do URI. Por exemplo,
postgresql://login:secret@examplehost:9000
.O URI precisa ser codificado por URL (codificado por porcentagem). Por exemplo, uma senha que tenha um símbolo de espaço precisa ser codificada em URL da seguinte maneira:
postgresql://login:secret%20password@examplehost:9000
.
O Airflow tem método de conveniência para gerar conexão URIs. Um exemplo de como codificar um URL complexo com extras em JSON está disponível na documentação do Airflow.
Usar o Secret Manager com o Cloud Composer
Ao buscar variáveis e conexões, o Cloud Composer verifica primeiro o gerenciador de secrets. Se a variável ou conexão solicitada não for encontrada, o Cloud Composer verificará as variáveis de ambiente e o banco de dados do Airflow.
Ler variáveis usando modelos do Jinja
O Secret Manager pode ser usado para ler variáveis Modelos Jinja para campos de operador com modelo (resolvido no ambiente de execução).
Para o secret airflow-variables-secret_filename
:
file_name = '{{var.value.secret_filename}}'
Ler variáveis usando operadores e callbacks personalizados
Use o Gerenciador de secrets para ler variáveis em operadores personalizados ou métodos de callback dos operadores. A leitura de variáveis de DAGs internos pode afetar negativamente o desempenho. Portanto, use modelos Jinja se quiser usar variáveis nos DAGs.
Por exemplo, para o secret airflow-variables-secret_filename
:
from airflow.models.variable import Variable
file_name = Variable.get('secret_filename')
Ler conexões
A menos que você esteja gravando um operador personalizado, raramente será necessário acessar conexões diretamente. A maioria dos ganchos recebe o nome da conexão como seu parâmetro de instanciação e deve recuperar as conexões do back-end do secret automaticamente quando as tarefas forem executadas.
Ler conexões diretamente pode ser útil para gravar seu próprio gancho.
Por exemplo, para a conexão airflow-connections-exampleConnection
:
from airflow.hooks.base_hook import BaseHook
exampleConnection = BaseHook.get_connection('exampleConnection')
BaseHook.get_connection
retorna um objeto Connection
. É possível conseguir a representação da string de URI de uma conexão como esta:
exampleConnectionUri = BaseHook.get_connection('exampleConnection').get_uri()