Configurar o Secret Manager para seu ambiente

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.

Ative a API

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:

Ativar e configurar o back-end do Gerenciador de secrets

  1. Substitua a seguinte opção de configuração do Airflow:

    Seção Chave Valor
    secrets backend airflow.providers.google.cloud.secrets.secret_manager.CloudSecretManagerBackend
  2. 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 objeto backend_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 com gcp_key_path.
    • sep: separador usado para concatenar connections_prefix e conn_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()

A seguir