Это заняло у меня некоторое время, но я, наконец, обобщил свои мысли здесь: https://dev.to/viniciuskneves/use-aws-through-github-actions-without-secret-keys-32eo
Идея состоит в том, чтобы использовать Подключиться к OpenID к связаться с GitHub а затем иметь роль, которую может взять на себя GitHub Actions, и выполнять развертывание (те же политики, которые я бы дал пользователю GitHub Actions).
При использовании AWS CDK решение выглядит следующим образом:
const provider = новый OpenIdConnectProvider(этот, "GitHubProvider", {
URL-адрес: «https://token.actions.githubusercontent.com»,
clientIds: ["sts.amazonaws.com"], // В документации упоминается как "Аудитория"
});
константная роль = новая роль (эта, "Роль", {
предполагаемый по: новый OpenIdConnectPrincipal (поставщик, {
StringEquals: {
"token.actions.githubusercontent.com:aud": "sts.amazonaws.com", // "Аудитория" сверху
},
StringLike: {
"token.actions.githubusercontent.com:sub":
"repo:<ORGANIZATION>/<REPOSITORY>:*", // Организация и репозиторий, которым разрешено выполнять эту роль
},
}),
});
ведро.grantPut(роль); // Создает политику
После этого нам нужно обновить GitHub Actions, чтобы использовать это вместо наших пользовательских ключей:
...
разрешения:
id-токен: написать
content: read # Это необходимо для действий/оформления заказа (это упоминается в документации GitHub)
...
- имя: Настройка учетных данных AWS
использует: aws-actions/[email protected] # Версия на момент написания этой статьи
with: # Мы загружаем ключи, хранящиеся в секретах
role-to-assume: arn:aws:iam::<ACCOUNT>:role/<ROLE-NAME> # Вы можете указать имя роли при ее создании, иначе AWS автоматически сгенерирует его для вас
aws-регион: eu-central-1
- run: npm run deploy # Просто пример