GitHub Actions peut s'authentifier auprès d'AWS via le fournisseur OIDC de GitHub, en assumant un rôle avec sts:AssumeRoleWithWebIdentity et sans secret stocké. La stratégie de confiance du rôle est censée épingler la revendication sub du jeton à un repo:org/name:... spécifique. Lorsque cette condition est en wildcard ou limitée uniquement à l'organisation, un workflow dans n'importe quel dépôt correspondant, y compris un fork ou un dépôt que vous créez, assume le rôle.
La confiance trop permissive#
aws iam get-role --role-name <role> --query 'Role.AssumeRolePolicyDocument'
# look for token.actions.githubusercontent.com:sub with StringLike "repo:org/*"
# or a condition on :aud only, with no :sub pin
Un sub comme repo:org/*:ref:refs/heads/* accepte n'importe quelle branche de n'importe quel dépôt de l'organisation ; un sub absent accepte n'importe quel dépôt pour lequel GitHub émettra un jeton.
Assumer depuis un workflow#
Un workflow que vous contrôlez dans un dépôt correspondant demande le jeton OIDC et assume :
permissions: { id-token: write }
steps:
- uses: aws-actions/configure-aws-credentials@v4
with:
role-to-assume: arn:aws:iam::<acct>:role/<role>
aws-region: us-east-1
Notes d'exploitation#
- La restriction limitée à la seule organisation est l'erreur courante : une organisation publique laisse des tiers ouvrir un dépôt qui satisfait
repo:org/*. - La revendication
audseule n'est pas une restriction ; sans conditionsub, tout jeton émis par le fournisseur est accepté. - Voir OIDC pour la mécanique générale de web-identity derrière cela.
Outils#
- aws-actions/configure-aws-credentials : l'action d'assumption standard.
- AWS CLI (
sts assume-role-with-web-identity) avec un jeton obtenu depuis le runtime Actions.