Usar segredos do AWS Secrets Manager em tarefas do GitHub - AWS Secrets Manager

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á.

Usar segredos do AWS Secrets Manager em tarefas do GitHub

Para usar um segredo em uma tarefa do GitHub, você pode usar uma ação do GitHub para recuperar segredos do AWS Secrets Manager e adicioná-los como Environment variables (Variáveis de ambiente) ocultadas em seu fluxo de trabalho do GitHub. Para obter mais informações sobre o GitHub Actions, consulte Understanding GitHub Actions (Noções básicas sobre o GitHub Actions) nos documentos do GitHub.

Quando você adiciona um segredo ao seu ambiente do GitHub, ele fica disponível para todas as outras etapas da sua tarefa do GitHub. Siga as orientações em Security hardening for GitHub Actions (Fortalecimento de segurança para GitHub Actions) a fim de auxiliar na prevenção de que segredos sejam usados indevidamente em seu ambiente.

É possível definir a cadeia de caracteres inteira no valor do segredo como o valor da variável de ambiente ou, caso a cadeia de caracteres seja JSON, pode analisar o JSON a fim de definir variáveis de ambiente individuais para cada par chave-valor JSON. Se o valor do segredo for um binário, a ação o converterá em uma cadeia de caracteres.

Para visualizar as variáveis de ambiente criadas utilizando seus segredos, ative o log de depuração. Para obter mais informações, consulte Habilitando o log de depuração nos documentos do GitHub.

Para usar as variáveis de ambiente criadas com base em seus segredos, consulte Variáveis de ambiente no GitHub Docs.

Pré-requisitos

Para usar essa ação, primeiro você precisa configurar as credenciais da AWS e definir a Região da AWS em seu ambiente do GitHub usando a etapa de configure-aws-credentials. Siga as instruções em Configurar ação de credenciais da AWS para o GitHub Actions para Assumir a função diretamente utilizando o provedor de OIDC do GitHub. Isso permite que você use credenciais de curta duração e evite armazenar chaves de acesso adicionais externas ao Secrets Manager.

O perfil do IAM que a ação assume deve ter as seguintes permissões:

  • GetSecretValue sobre os segredos que você deseja recuperar.

  • ListSecrets em todos os segredos.

  • (Opcional) Decrypt na KMS key se os segredos forem criptografados com uma chave gerenciada pelo cliente.

Para ter mais informações, consulte Autenticação e controle de acesso para o AWS Secrets Manager.

Uso

Para usar a ação, adicione uma etapa ao fluxo de trabalho que use a sintaxe a seguir.

- name: Step name uses: aws-actions/aws-secretsmanager-get-secrets@v2 with: secret-ids: | secretId1 ENV_VAR_NAME, secretId2 name-transformation: (Optional) uppercase|lowercase|none parse-json-secrets: (Optional) true|false
Parâmetros
secret-ids

ARNS, nomes e prefixos de nomes dos segredos.

Para definir o nome da variável de ambiente, insira-o antes do ID do segredo e acrescente uma vírgula. Por exemplo, o ENV_VAR_1, secretId cria uma variável de ambiente chamada ENV_VAR_1 utilizando o secretId do segredo. O nome da variável de ambiente pode consistir em letras maiúsculas, números e sublinhados.

Para usar um prefixo, digite pelo menos três caracteres seguidos de um asterisco. Por exemplo, dev* corresponde a todos os segredos com um nome que começa em dev. O número máximo de segredos correspondentes que podem ser recuperados é 100. Se você definir o nome da variável e o prefixo corresponder a diversos segredos, a ação falhará.

name-transformation

Por padrão, a etapa cria cada nome de variável de ambiente utilizando o nome do segredo, o qual é transformado para incluir apenas letras maiúsculas, números e sublinhados, bem como não começar com um número. Para as letras no nome, é possível configurar a etapa para usar letras minúsculas com lowercase ou não alterar as maiúsculas e minúsculas das letras com none. O valor padrão é uppercase.

parse-json-secrets

(Opcional) Por padrão, a ação define o valor da variável de ambiente para a cadeia de caracteres JSON inteira no valor do segredo. Defina parse-json-secrets como true para criar variáveis de ambiente para cada par chave-valor no JSON.

Observe que, se o JSON usar chaves que diferenciam maiúsculas de minúsculas, como “nome” e “Nome”, a ação apresentará conflitos de nomes duplicados. Nesse caso, defina os parse-json-secrets como false e analise o valor do segredo JSON separadamente.

Nomeação de variáveis de ambiente

As variáveis de ambiente criadas pela ação são nomeadas da mesma forma que os segredos dos quais elas vêm. As variáveis de ambiente têm requisitos de nomenclatura mais rígidos do que os segredos, portanto, a ação transforma os nomes de segredos para atender a esses requisitos. Por exemplo, a ação transforma letras minúsculas em letras maiúsculas. Se você analisar o JSON do segredo, o nome da variável de ambiente incluirá tanto o nome do segredo quanto o nome da chave JSON, por exemplo, MYSECRET_KEYNAME. É possível configurar a ação para não transformar letras minúsculas.

Se duas variáveis de ambiente terminarem com o mesmo nome, a ação falhará. Nesse caso, você deverá especificar os nomes que deseja usar para as variáveis de ambiente como aliases.

Exemplos de quando os nomes podem entrar em conflito:

  • Um segredo chamado "MySecret" e um segredo chamado "mysecret" se tornariam variáveis de ambiente denominadas "MYSECRET".

  • Um segredo chamado "secret_keyname" e um segredo analisado em JSON chamado "Secret" com uma chave chamada "keyname" se tornariam variáveis de ambiente chamadas "SECRET_KEYNAME".

É possível definir o nome da variável de ambiente especificando um alias, conforme mostrado no exemplo a seguir, que cria uma variável chamada ENV_VAR_NAME.

secret-ids: | ENV_VAR_NAME, secretId2
Aliases em branco
  • Se você definir parse-json-secrets: true e inserir um alias em branco, seguido por uma vírgula e depois pelo ID do segredo, a ação nomeará a variável de ambiente da mesma forma que as chaves JSON analisadas. Os nomes das variáveis não incluem o nome do segredo.

    Se o segredo não contiver um JSON válido, a ação criará uma variável de ambiente e a nomeará da mesma forma que o nome do segredo.

  • Se você definir parse-json-secrets: false e inserir um alias em branco, seguido por uma vírgula e depois pelo ID do segredo, a ação nomeará as variáveis de ambiente como se você não especificasse um alias.

Veja a seguir um exemplo de um alias em branco.

,secret2

Exemplos

exemplo 1. Obtenha segredos por nome e por ARN

O exemplo a seguir cria variáveis de ambiente para segredos identificados por nome e por ARN.

- name: Get secrets by name and by ARN uses: aws-actions/aws-secretsmanager-get-secrets@v2 with: secret-ids: | exampleSecretName arn:aws:secretsmanager:us-east-2:123456789012:secret:test1-a1b2c3 0/test/secret /prod/example/secret SECRET_ALIAS_1,test/secret SECRET_ALIAS_2,arn:aws:secretsmanager:us-east-2:123456789012:secret:test2-a1b2c3 ,secret2

Variáveis de ambiente criadas:

EXAMPLESECRETNAME: secretValue1 TEST1: secretValue2 _0_TEST_SECRET: secretValue3 _PROD_EXAMPLE_SECRET: secretValue4 SECRET_ALIAS_1: secretValue5 SECRET_ALIAS_2: secretValue6 SECRET2: secretValue7
exemplo 2. Obtenha todos os segredos que começam com determinado prefixo

O exemplo a seguir cria variáveis de ambiente para todos os segredos com nomes que começam com beta.

- name: Get Secret Names by Prefix uses: 2 with: secret-ids: | beta* # Retrieves all secrets that start with 'beta'

Variáveis de ambiente criadas:

BETASECRETNAME: secretValue1 BETATEST: secretValue2 BETA_NEWSECRET: secretValue3
exemplo 3. Análise do JSON no segredo

O exemplo a seguir cria variáveis de ambiente ao analisar o JSON no segredo.

- name: Get Secrets by Name and by ARN uses: aws-actions/aws-secretsmanager-get-secrets@v2 with: secret-ids: | test/secret ,secret2 parse-json-secrets: true

O segredo test/secret tem o seguinte valor de segredo.

{ "api_user": "user", "api_key": "key", "config": { "active": "true" } }

O segredo secret2 tem o seguinte valor de segredo.

{ "myusername": "alejandro_rosalez", "mypassword": "EXAMPLE_PASSWORD" }

Variáveis de ambiente criadas:

TEST_SECRET_API_USER: "user" TEST_SECRET_API_KEY: "key" TEST_SECRET_CONFIG_ACTIVE: "true" MYUSERNAME: "alejandro_rosalez" MYPASSWORD: "EXAMPLE_PASSWORD"
exemplo 4 Use letras minúsculas para nomes de variáveis de ambiente

O exemplo a seguir cria uma variável de ambiente com um nome em minúsculas.

- name: Get secrets uses: aws-actions/aws-secretsmanager-get-secrets@v2 with: secret-ids: exampleSecretName name-transformation: lowercase

Variável de ambiente criada:

examplesecretname: secretValue