GitHub Actions: AWS へアクセスする¶
GitHub Actions から AWS にアップロードしたりデプロイしたり。
固定キー¶
参照) Deploying using GitHub Actions
Configure AWS Credentials アクションでアクセスキーを設定します。
steps:
- uses: aws-actions/configure-aws-credentials@v1
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 ロールに AssumeRole したい場合。
参考) https://dev.classmethod.jp/articles/github-actions-aws-sts-credentials-iamrole/
permissions:
id-token: write
contents: read
steps:
- uses: aws-actions/configure-aws-credentials@v1
with:
role-to-assume: (ロールの ARN)
aws-region: ap-northeast-1
GitHub Actions から AssumeRole するには、以下の手順で GitHub を IdP として登録し、IAM ロールにそこから AssumeRole できるよう許可を与えておく必要があります。
GitHub を IdP として登録¶
- IAM > Identity providers > Add provider
- 以下指定して 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
と入力します。
IAM ロールの Trusted entities¶
IAM ロール作成時、「Trusted entity type」に「Web identity > 作成した Identity provider」を選択して作成すると、Trusted entities は以下のようになります。
{
"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"
}
}
}
]
}
このままだと全リポジトリに対して許可してしまうので、Condition に特定のリポジトリだけを許可する形にします。
{
"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/*:*"
}
}
}
]
}