GitHub Actions OIDC AWS: получить временные credentials

Категория: Backend · Язык: YAML · Обновлено:

GitHub Actions может получать временные AWS credentials через OIDC, без долгоживущих access keys в GitHub Secrets. Для этого AWS IAM должен доверять provider GitHub и ограничивать роль конкретным репозиторием и веткой.

Запросить временные AWS credentials в workflow

YAML
permissions:
  contents: read
  id-token: write

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - name: Configure AWS credentials
        uses: aws-actions/configure-aws-credentials@v6.3.0
        with:
          role-to-assume: ${{ vars.AWS_ROLE_ARN }}
          aws-region: ${{ vars.AWS_REGION }}

      - name: Check assumed identity
        run: aws sts get-caller-identity

Создайте AWS IAM OIDC provider с URL https://token.actions.githubusercontent.com и audience sts.amazonaws.com. Trust policy роли должна ограничивать aud и sub. Ниже полный минимальный документ для репозитория с immutable subject claim:

Текст
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Federated": "arn:aws:iam::<ACCOUNT_ID>:oidc-provider/token.actions.githubusercontent.com"
      },
      "Action": "sts:AssumeRoleWithWebIdentity",
      "Condition": {
        "StringEquals": {
          "token.actions.githubusercontent.com:aud": "sts.amazonaws.com",
          "token.actions.githubusercontent.com:sub": "repo:ORG@ORG_ID/REPO@REPO_ID:ref:refs/heads/main"
        }
      }
    }
  ]
}

Подставьте реальные org/repo IDs и ветку. Репозитории, использующие прежний формат subject claim, должны указать repo:ORG/REPO:ref:refs/heads/main; точная форма зависит от настроек и даты создания репозитория. Сверьте claim с настройкой GitHub и trust policy, иначе AWS отклонит AssumeRole. Ограничьте permissions самой IAM-роли только нужными действиями и ресурсами. Для production рассмотрите pin action на проверенный полный commit SHA вместо тега версии.

Источники: OIDC в GitHub Actions, aws-actions/configure-aws-credentials.