Cloud Composer 1 | Cloud Composer 2
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
Nesta seção, explicamos como configurar o Secret Manager para usar secrets com seu ambiente do Cloud Composer.
Ativar a API Secret Manager
Console
Ative a API Secret Manager.
gcloud
Ative a API Secret Manager:
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 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
Substitua a seguinte opção de configuração do Airflow:
Seção Chave Valor secrets
backend
airflow.providers.google.cloud.secrets.secret_manager.CloudSecretManagerBackend
Para adicionar configurações opcionais, substitua 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
com os seguintes campos:connections_prefix
: especifica o prefixo do nome do secret a ser lido para conseguir conexões. O padrão éairflow-connections
.variables_prefix
: especifica o prefixo do nome do secret a ser lido para conseguir variáveis. O padrão éairflow-variables
.gcp_key_path
: o caminho para o arquivo JSON das credenciais do Google Cloud. Se não for fornecido, a conta de serviço padrão será usada.gcp_keyfile_dict
: o dicionário JSON de credenciais do Google Cloud. Mutuamente exclusivo comgcp_key_path
.sep
: separador usado para concatenarconnections_prefix
econn_id
. 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
[variable_prefix][sep][variable_name]
. - O valor padrão de
[variable_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,
mysql://login:password@examplehost:9000
.O URI precisa ser codificado por URL (percentual codificado). Por exemplo, uma senha que tenha um símbolo de espaço precisa ser codificada em URL da seguinte maneira:
mysql://login:secret%20password@examplehost:9000
.
O Airflow tem um método de conveniência para gerar URIs de conexão. Um exemplo de como codificar um URL complexo com extras em JSON está disponível na documentação do Airflow.
Como 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 javadoc
É possível usar o Secret Manager para ler variáveis com modelos licenciadas para campos de operadores com modelo (resolvidos no momento da execução).
Para o secret airflow-variables-secret_filename
:
file_name = 'var.value.secret_filename'
Ler variáveis usando operadores personalizados e callbacks
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()