Skip to main content

GitHub Actions から AWS へアクセスする

AWS にアップロードしたりデプロイしたりするには、IAM の認証情報が必要になります。GitHub Actions のワークフローで認証情報を設定する方法です。

固定キーを使う

参照) Deploying using GitHub Actions

IAM ユーザーを作成し、アクセスキーを Action secrets の AWS_ACCESS_KEY_ID/AWS_SECRET_ACCESS_KEY に設定しておきます。ワークフローからは Configure AWS Credentials アクションを使用して、この認証情報を使用します。

steps:
- uses: aws-actions/configure-aws-credentials@v4
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: ap-northeast-1

IAM Roles for Service Accounts

固定のアクセスキーではなく IAM ロールによる一時的な認証情報を使用したい場合、GitHub を IdP プロバイダとして連携します。

参考) https://dev.classmethod.jp/articles/github-actions-aws-sts-credentials-iamrole/

  1. IAM > Identity providers > Add provider
  2. 以下指定して Add provider
    • Provider type: OpenID Connect
    • Provider URL: https://token.actions.githubusercontent.com (*1) ※入力して Get thumbprint を押す
    • Audience: sts.amazonaws.com

(*1) GitHub Enterprise Server の場合は、https://HOSTNAME/_services/token と入力します。

Identity providers 一覧

Actions から使用したい IAM ロールには、Trusted entities (信頼関係) を以下のように指定しておきます。(管理コンソールから IAM ロール作成する場合は「Trusted entity type」に「Web identity」を選択して必要な項目を入力すれば、下記のように初期設定されます。)

⚠︎Condition ステートメントに記述したリポジトリからのみ、この IAM ロールを使用できます。関係ないリポジトリから使われないよう、注意しましょう。

{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Federated": "arn:aws:iam::(アカウントID):oidc-provider/token.actions.githubusercontent.com"
},
"Action": "sts:AssumeRoleWithWebIdentity",
"Condition": {
"StringEquals": {
"token.actions.githubusercontent.com:aud": "sts.amazonaws.com"
},
"StringLike": {
"token.actions.githubusercontent.com:sub": "repo:yh1224/*:*"
}
}
}
]
}

ワークフローから Configure AWS Credentials アクションを使用して、以下の記述でこの IAM ロールから認証情報を取得することができます。

permissions:
id-token: write
contents: read

steps:
- uses: aws-actions/configure-aws-credentials@v4
with:
role-to-assume: (ロールの ARN)
aws-region: ap-northeast-1