Configurando uma conexão Apache Airflow usando um segredo AWS Secrets Manager - Amazon Managed Workflows for Apache Airflow

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Configurando uma conexão Apache Airflow usando um segredo AWS Secrets Manager

AWS Secrets Manager é um back-end alternativo compatível com o Apache Airflow em um ambiente Amazon Managed Workflows for Apache Airflow. Este tópico mostra como usar para armazenar com segurança segredos AWS Secrets Manager para variáveis do Apache Airflow e uma conexão do Apache Airflow no Amazon Managed Workflows for Apache Airflow.

nota

Etapa 1: forneça ao Amazon MWAA permissão para acessar as chaves secretas do Secrets Manager

O perfil de execução do seu ambiente Amazon MWAA precisa de acesso de leitura à chave secreta de entrada em AWS Secrets Manager. A política do IAM a seguir permite acesso de leitura e gravação usando a política AWS gerenciada SecretsManagerReadWrite.

Para anexar a política ao seu perfil de execução
  1. Abra a página Ambientes no console do Amazon MWAA.

  2. Escolha um ambiente.

  3. Escolha sua função de execução no painel Permissões.

  4. Escolha Anexar políticas.

  5. Digite SecretsManagerReadWrite no campo de texto Políticas de filtro.

  6. Escolha Anexar política.

Se você não quiser usar uma política de permissão AWS gerenciada, você pode atualizar diretamente a função de execução do seu ambiente para permitir qualquer nível de acesso aos recursos do Secrets Manager. Por exemplo, a declaração de política a seguir concede acesso de leitura a todos os segredos que você cria em uma AWS região específica no Secrets Manager.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "secretsmanager:GetResourcePolicy", "secretsmanager:GetSecretValue", "secretsmanager:DescribeSecret", "secretsmanager:ListSecretVersionIds" ], "Resource": "arn:aws:secretsmanager:us-west-2:012345678910:secret:*" }, { "Effect": "Allow", "Action": "secretsmanager:ListSecrets", "Resource": "*" } ] }

Etapa 2: crie o back-end do Secrets Manager como uma opção de configuração do Apache Airflow

A seção a seguir descreve como criar uma opção de configuração do Apache Airflow no console Amazon MWAA para o back-end. AWS Secrets Manager Se você estiver usando uma definição de configuração com o mesmo nome em airflow.cfg, a configuração criada nas etapas a seguir terá precedência e substituirá as definições de configuração.

  1. Abra a página Ambientes no console do Amazon MWAA.

  2. Escolha um ambiente.

  3. Selecione Editar.

  4. Escolha Próximo.

  5. Escolha Adicionar configuração personalizada no painel Opções de configuração do Airflow. Adicione os seguintes pares de chave-valor:

    1. secrets.backend: airflow.providers.amazon.aws.secrets.secrets_manager.SecretsManagerBackend

    2. secrets.backend_kwargs: {"connections_prefix" : "airflow/connections", "variables_prefix" : "airflow/variables"} Configura o Apache Airflow para strings de conexão e variáveis nos caminhos airflow/connections/* e airflow/variables/*.

      É possível usar um padrão de pesquisa para reduzir o número de chamadas de API que o Amazon MWAA faz para o Secrets Manager em seu nome. Se você não especificar um padrão de pesquisa, o Apache Airflow pesquisará todas as conexões e variáveis no back-end configurado. Ao especificar um padrão, você restringe os caminhos possíveis que o Apache Airflow procura. Isso reduz seus custos ao usar o Secrets Manager com o Amazon MWAA.

      Para especificar um padrão de pesquisa, especifique os parâmetros connections_lookup_pattern e variables_lookup_pattern. Esses parâmetros aceitam uma RegEx string como entrada. Por exemplo, para procurar segredos que comecem com test, digite o seguinte para secrets.backend_kwargs:

      { "connections_prefix": "airflow/connections", "connections_lookup_pattern": "^test", "variables_prefix" : "airflow/variables", "variables_lookup_pattern": "^test" }
      nota

      Para usar connections_lookup_pattern e variables_lookup_pattern, você deve instalar a versão 7.3.0 ou superior de apache-airflow-providers-amazon. Para obter mais informações sobre como atualizar os pacotes do provedor para versões mais recentes, consulte Como especificar pacotes de fornecedores mais novos.

  6. Escolha Salvar.

Etapa três: gerar uma string de URI de AWS conexão do Apache Airflow

Para criar uma string de conexão, use a tecla "Tab" do teclado para adicionar recuo dos pares de chave-valor no objeto Conexão. Também recomendamos criar uma variável para o objeto extra em sua sessão de shell. A seção a seguir mostra as etapas para gerar uma string de URI de conexão do Apache Airflow para um ambiente Amazon MWAA usando o Apache Airflow ou um script Python.

Apache Airflow CLI

A sessão de shell a seguir usa sua CLI local do Airflow para gerar uma string de conexão. Se você não tiver a CLI instalada, recomendamos usar o script Python.

  1. Abra uma sessão de shell do Python:

    python3
  2. Digite o comando:

    >>> import json
  3. Digite o comando:

    >>> from airflow.models.connection import Connection
  4. Crie uma variável em sua sessão de shell para o objeto extra. Substitua os valores da amostra pelo ARN da função de execução e pela região em YOUR_REGION (comous-east-1). YOUR_EXECUTION_ROLE_ARN

    >>> extra=json.dumps({'role_arn': 'YOUR_EXECUTION_ROLE_ARN', 'region_name': 'YOUR_REGION'})
  5. Crie o objeto de conexão. Substitua o valor do exemplo em myconn pelo nome da conexão Apache Airflow.

    >>> myconn = Connection(
  6. Use a tecla “tab” do teclado para adicionar recuo a cada um dos seguintes pares de chave-valor em seu objeto de conexão. Substitua os valores da amostra emred.

    1. Especifique o tipo de AWS conexão:

      ... conn_id='aws',
    2. Especifique a opção de banco de dados Apache Airflow:

      ... conn_type='mysql',
    3. Especifique o URL da IU do Apache Airflow no Amazon MWAA:

      ... host='288888a0-50a0-888-9a88-1a111aaa0000.a1.us-east-1.airflow.amazonaws.com/home',
    4. Especifique o ID da chave de AWS acesso (nome de usuário) para fazer login no Amazon MWAA:

      ... login='YOUR_AWS_ACCESS_KEY_ID',
    5. Especifique a chave de acesso AWS secreta (senha) para fazer login no Amazon MWAA:

      ... password='YOUR_AWS_SECRET_ACCESS_KEY',
    6. Especifique a variável de sessão de shell extra:

      ... extra=extra
    7. Feche o objeto de conexão.

      ... )
  7. Imprima a string do URI de conexão:

    >>> myconn.get_uri()

    Você deve ver a string do URI de conexão na resposta:

    'mysql://288888a0-50a0-888-9a88-1a111aaa0000.a1.us-east-1.airflow.amazonaws.com%2Fhome?role_arn=arn%3Aaws%3Aiam%3A%3A001122332255%3Arole%2Fservice-role%2FAmazonMWAA-MyAirflowEnvironment-iAaaaA&region_name=us-east-1'
Python script

O script Python a seguir não requer a CLI do Apache Airflow.

  1. Copie o conteúdo da amostra de código a seguir e salve localmente como mwaa_connection.py.

    import urllib.parse conn_type = 'YOUR_DB_OPTION' host = 'YOUR_MWAA_AIRFLOW_UI_URL' port = 'YOUR_PORT' login = 'YOUR_AWS_ACCESS_KEY_ID' password = 'YOUR_AWS_SECRET_ACCESS_KEY' role_arn = urllib.parse.quote_plus('YOUR_EXECUTION_ROLE_ARN') region_name = 'YOUR_REGION' conn_string = '{0}://{1}:{2}@{3}:{4}?role_arn={5}&region_name={6}'.format(conn_type, login, password, host, port, role_arn, region_name) print(conn_string)
  2. Substitua os espaços reservados emred.

  3. Execute o script a seguir para gerar uma string de conexão.

    python3 mwaa_connection.py

Etapa 4: adicione as variáveis no Secrets Manager

A seção a seguir descreve como criar o segredo para uma variável no Secrets Manager.

Para criar o segredo
  1. Abra o console de AWS Secrets Manager.

  2. Selecione Armazenar um novo segredo.

  3. Selecione Outro tipo de segredo.

  4. No painel Especificar os pares de chave/valor a serem armazenados nesse painel secreto, escolha Texto simples.

  5. Adicione o valor da variável como Texto simples no formato a seguir.

    "YOUR_VARIABLE_VALUE"

    Por exemplo, para especificar um número inteiro:

    14

    Por exemplo, para especificar uma string:

    "mystring"
  6. Em Chave de criptografia, escolha uma opção de AWS KMS chave na lista suspensa.

  7. Insira um nome no campo de texto para Nome secreto no formato a seguir.

    airflow/variables/YOUR_VARIABLE_NAME

    Por exemplo:

    airflow/variables/test-variable
  8. Escolha Próximo

  9. Na página Configurar segredo, no painel Nome e descrição do segredo, faça o seguinte.

    1. Em Nome secreto, forneça um nome para seu segredo.

    2. (Opcional) Em Descrição, insira uma descrição para o nome do segredo.

    Escolha Avançar.

  10. Em Configurar rotação - opcional, deixe as opções padrão e escolha Avançar.

  11. Repita essas etapas no Secrets Manager para quaisquer variáveis adicionais que você queira adicionar.

  12. Na página Analisar, analise os detalhes do segredo e escolha Armazenar.

Etapa 5: adicione a conexão no Secrets Manager

A seção a seguir descreve como criar o segredo para o URI da string de conexão no Secrets Manager.

Para criar o segredo
  1. Abra o console de AWS Secrets Manager.

  2. Selecione Armazenar um novo segredo.

  3. Selecione Outro tipo de segredo.

  4. No painel Especificar os pares de chave/valor a serem armazenados nesse painel secreto, escolha Texto simples.

  5. Adicione a string do URI de conexão como texto simples no formato a seguir.

    YOUR_CONNECTION_URI_STRING

    Por exemplo:

    mysql://288888a0-50a0-888-9a88-1a111aaa0000.a1.us-east-1.airflow.amazonaws.com%2Fhome?role_arn=arn%3Aaws%3Aiam%3A%3A001122332255%3Arole%2Fservice-role%2FAmazonMWAA-MyAirflowEnvironment-iAaaaA&region_name=us-east-1
    Atenção

    O Apache Airflow analisa cada um dos valores na string de conexão. Você não deve usar aspas simples nem duplas, ou ele analisará a conexão como uma única string.

  6. Em Chave de criptografia, escolha uma opção de AWS KMS chave na lista suspensa.

  7. Insira um nome no campo de texto para Nome secreto no formato a seguir.

    airflow/connections/YOUR_CONNECTION_NAME

    Por exemplo:

    airflow/connections/myconn
  8. Escolha Próximo

  9. Na página Configurar segredo, no painel Nome e descrição do segredo, faça o seguinte.

    1. Em Nome secreto, forneça um nome para seu segredo.

    2. (Opcional) Em Descrição, insira uma descrição para o nome do segredo.

    Escolha Avançar.

  10. Em Configurar rotação - opcional, deixe as opções padrão e escolha Avançar.

  11. Repita essas etapas no Secrets Manager para quaisquer variáveis adicionais que você queira adicionar.

  12. Na página Analisar, analise os detalhes do segredo e escolha Armazenar.

Código de exemplo

Recursos

Próximas etapas