はじめに
これまでGit ActionsでAWSサービスと連携する場合は、アクセスキーとシークレットキーといったクレデンシャル情報を使っていたが、IAMロール認証で行えるようになったとのこと。
ということで、IAMロール認証を用いたGithub ActionsのLambda関数デプロイの方法をまとめてみた。
IAMロールの作成
- 最初に認証に必要なIAMロールの作成を行う。
- 下記のように進めていく。
IAMポリシーの作成
- IAMポリシーを作成。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:PutObject",
"iam:ListRoles",
"lambda:UpdateFunctionCode",
"lambda:CreateFunction",
"lambda:UpdateFunctionConfiguration"
],
"Resource": "*"
}
]
}
プロバイダの作成
- IDブロバイダを作成。
- プロバイダのタイプ:OpenID Connect
- プロバイダURL:token.actions.githubusercontent.com
- 対象者:sigstore
IAMロールの作成
- IAMロールを作成。
- 下記の通りに設定する。
- 信頼されたエンティティ:ウェブID
- IDプロバイダ:上記で作成したIDプロバイダを選択
- Audience:IDプロバイダ作成時の対象者
- ポリシー:上記で作成したIAMポリシー
- 作成したIAMロールのARNは、Github Actionsの設定で必要なので控えておく。
Lambda関数の作成
- あらかじめLambda関数を作成しておく。
- Github Actionsが実行されたときに、対象のLambda関数がないというエラーになってしまうため。
- あくまでも初回のデプロイのときの考慮。
- Lambda関数名は、Github Acionsの設定で必要なので控えておく。
Githubの設定
リポジトリの作成
- Lambda関数を格納するリポジトリを作成する。
Secretの設定
- IAMロールのARNをGithubのSecretsに登録しておく。
- 登録方法は下記参照。
https://docs.github.com/ja/actions/security-guides/encrypted-secrets - Secret登録時の項目は以下のようにする。
Github Actionsの設定
ワークフローの作成
- 対象のリポジトリの「Actions」タブを押すと、下記画像のページが表示されるので「set up a workflow yourself」をクリック。
- 設定ファイルの作成画面が表示されるので、ここに記載していく(内容については次章)
設定ファイルの作成
- 上記手順で作成した設定ファイルを下記のように書いていく。
name: deploy to lambda
on:
push:
branches:
- main
pull_request:
jobs:
deploy:
runs-on: ubuntu-latest
permissions:
id-token: write
contents: read
steps:
- name: Configure AWS Credentials
run: |
export AWS_ROLE_ARN=${{ secrets.AWS_ROLE_ARN }}
export AWS_WEB_IDENTITY_TOKEN_FILE=/tmp/awscreds
export AWS_DEFAULT_REGION=ap-northeast-1
echo AWS_WEB_IDENTITY_TOKEN_FILE=$AWS_WEB_IDENTITY_TOKEN_FILE >> $GITHUB_ENV
echo AWS_ROLE_ARN=$AWS_ROLE_ARN >> $GITHUB_ENV
echo AWS_DEFAULT_REGION=$AWS_DEFAULT_REGION >> $GITHUB_ENV
curl -H "Authorization: bearer $ACTIONS_ID_TOKEN_REQUEST_TOKEN" "$ACTIONS_ID_TOKEN_REQUEST_URL&audience=sigstore" | jq -r '.value' > $AWS_WEB_IDENTITY_TOKEN_FILE
- uses: actions/checkout@v2
- uses: actions/setup-python@v2
with:
python-version: 3.9
- run: zip -r package.zip ./*
- run: pip3 install awscli
- run: aws lambda update-function-code --function-name {作成したLambda関数名} --zip-file fileb://package.zip --publish
※{作成したLambda関数名}の箇所は{}は除去すること。
実行
- 実際に実行を行うと、以下のような画面が表示される、無事完了すると、Lambdaに関数がデプロイされる。