GitHub Actions OIDC AWS: получить временные credentials
GitHub Actions может получать временные AWS credentials через OIDC, без долгоживущих access keys в GitHub Secrets. Для этого AWS IAM должен доверять provider GitHub и ограничивать роль конкретным репозиторием и веткой.
Запросить временные AWS credentials в workflow
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.