Как учетные данные AWS работают в GitHub Actions?

В своих модульных тестах я использую aws-sdk для тестирования SES, для которого требуются некоторые учетные данные, мы сталкиваемся с проблемой доступа к секретам с помощью GitHub Actions.

Вначале я пытался установить значения ~/.aws/credentials, используя команду run из рабочих процессов github:

# .github/workflows/nodejs.yml
steps:
  ...
  - name: Unit Test
    run: |
      mkdir -p ~/.aws
      touch ~/.aws/credentials

      echo "[default]
      aws_access_key_id = ${{ secrets.AWS_ACCESS_KEY_ID }}
      aws_secret_access_key = ${{ secrets.AWS_SECRET_KEY_ID }}
      region = ${AWS_DEFAULT_REGION}

      [github]
      role_arn = arn:aws:iam::{accountID}:role/{role}
      source_profile = default" > ~/.aws/credentials 

      npm test
    env:
      AWS_DEFAULT_REGION: us-east-1
      CI: true

Изначально мой тестовый файл:

// ses.test.js
const AWS = require("aws-sdk")
const credentials = new AWS.SharedIniFileCredentials({ profile: "github" })
AWS.config.update({ credentials })
...

Я попытался использовать другой способ получения учетных данных на своих тестах, например, и тоже не работает:

const AWS = require("aws-sdk")
const credentials = new AWS.ChainableTemporaryCredentials({
  params: {RoleArn: "arn:aws:iam::{accountID}:role/{role}"},
  masterCredentials: new AWS.EnvironmentCredentials("AWS")
)}

AWS.config.update({ credentials })

Наконец, я попытался создать настроенное действие (с использованием библиотеки действий js, например: @ actions / core, @ actions / io, @ actions / exec), чтобы получить значения AWS env и установить его на ~/.aws/credentials, но также не работает как ожидал

Один из способов, который работал, заключался в раскрытии AWS_ACCESS_KEY_ID и AWS_SECRET_ACCESS_KEY (без использования секретов GitHub Actions, что не идеально, в целях безопасности)

У кого-то есть идеи, как учетные данные AWS могут работать в GitHub Actions с секретами?

Большое спасибо за внимание.


person fsilva    schedule 31.10.2019    source источник
comment
Разве для этого не стоит взглянуть на заранее подготовленные экшены? github.com/actions/aws   -  person Romain Prévost    schedule 31.10.2019
comment
привет @ RomainPrévost, спасибо за ответ, это действие претендует на использование aws cli ... может быть, я мог бы использовать для установки учетных данных с помощью cli, я увижу для этого документацию AWS. еще раз спасибо.   -  person fsilva    schedule 31.10.2019


Ответы (3)


К счастью, aws-sdk должен автоматически определять учетные данные, заданные как переменные среды, и использовать их для запросов

Чтобы получить доступ к секретам в вашем действии, вам необходимо установить их в репо. Затем вы можете выставить их на шаге как env var.

Подробнее см. Зашифрованные секреты GitHub.

  1. На GitHub перейдите на главную страницу репозитория.
  2. Под именем вашего репозитория перейдите на вкладку ⚙ Настройки.
  3. Кнопка настроек репозитория
  4. На левой боковой панели нажмите Секреты
  5. Введите имя для вашего секрета в поле ввода Имя.
  6. Введите значение вашего секрета
  7. Нажмите Добавить секрет

В вашем случае вы захотите добавить секреты как для AWS_ACCESS_KEY_ID, так и для AWS_SECRET_ACCESS_KEY.

Теперь, когда они установлены, вы можете передать эти значения в действие через yaml рабочего процесса:

steps:
...
- name: Unit Test
  uses: ...
  env:
    AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
    AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
  run: ...
person csexton    schedule 01.11.2019
comment
на самом деле должно быть что-то еще, когда я получаю эту ошибку: Error: ENOENT: no such file or directory, open '/home/runner/.aws/credentials' - person Madeo; 22.07.2020

Взгляните на: https://github.com/aws-actions/configure-aws-credentials

Он позволяет настраивать учетные данные AWS и переменные среды региона для использования в других действиях GitHub. Переменные среды будут обнаруживаться как AWS SDK, так и AWS CLI, чтобы определить учетные данные и регион, которые будут использоваться для вызовов AWS API.

person Dennis Kieselhorst    schedule 03.03.2021

Если запуск aws из командной строки для вас приемлем, вы можете установить следующие переменные ENV и просто использовать aws команды без необходимости запускать aws configure:

env:
  AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
  AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
  AWS_DEFAULT_REGION: us-east-1
  AWS_DEFAULT_OUTPUT: json
person thisismydesign    schedule 11.08.2020