[2025年8月最新版] AWSにLambda関数を GitHub Actions から安全にデプロイする方法
概要
AWS Lambdaの関数を漏洩のリスクがあるアクセスキーの代わりに、OIDCを使用して安全にGitHub Actionsからデプロイする方法です。
前提条件
- Lambda関数を既に作成済み
- 今回使用したアーキテクチャはarm64
Step.1 IDプロパイダの設定
AWSコンソールのIAM→IDプロパイダ ページから「プロパイダを追加」を選択し、以下の内容でIDプロパイダを作成します。
プロバイダのタイプ: OpenID Connect
URL: https://token.actions.githubusercontent.com
対象者(Audience): sts.amazonaws.com
Step.2 デプロイ用のロールを作成
IAM→ロール ページから「ロールを追加」を選択し、以下の手順でデプロイ用のロールを作成します。
1. 信頼されたエンティティ
repositoryとbranchはオプションですが、セキュリティの観点から設定することをおすすめします。
エンティティタイプ: ウェブアイデンティティ
アイデンティティプロバイダー: Step.1で作成したプロパイダ(token.actions.githubusercontent.com
)
Audience: sts.amazonaws.com
GitHub organization: 自分のGitHubアカウント名 or 組織名
GitHub repository: Workflowを置くリポジトリ
GitHub branch: デプロイ対象のブランチ
2. 許可を追加
今回は最小権限の原則に則り必要最低限の権限のみを持つワークフローを作成します。このステップは飛ばして何も選択せずに次に進んでください。
余計なのを選択するとそれだけセキュリティ上のリスクが上がるだけです。
3. 名前、確認、および作成
適当なロール名と説明を追加してロールを作成します。
Step.3 ロールにポリシーを追加
ポリシーを設定
作成したロールの詳細ページにアクセスし、「許可ポリシー→許可を追加→インラインポリシーを作成」でポリシーを追加します。
「ポリシーの作成」ページに飛んだらサービスからLambdaを選択し、「アクション 許可」のセクションで以下の権限を追加します。
UpdateFunctionCode
UpdateFunctionConfiguration
GetFunctionConfiguration
ARNを追加
続いて「リソース」セクションでfunctionの「ARNを追加」をクリックします。
「ARNを指定」というダイアログが開くので、リージョンと関数名(Resource function name)を設定します。関数名にはその名の通りデプロイ対象のLambda関数名を設定してください。ARNを追加したら「次へ」をクリックします。
確認して作成
ポリシー名を聞かれるので適当に入力してポリシーの作成を完了します。
Step.4 GitHub側で環境変数を設定
通常のGitHub Actionsのリポジトリにシークレットを追加するのと同様の手順で、以下のシークレット(環境変数)を追加します。別にsecretである必要はありませんがアカウントIDなどを公開するのも微妙なのでsecret扱いにしています。
AWS_LAMBDA_REGION
デプロイ先のリージョン(ap-southeast-1
など)
AWS_LAMBDA_DEPLOY_ROLE_ARN
Step.3 で作成したロールのARN(arn:aws:iam::[アカウントID]:role/[ロール名]
の形式)
Step.5 workflowを作成
ここまでの手順が完了したらあとは実際にworkflowを作成するだけです。今回はシンプルなGoで書いた関数をデプロイしています。
最後のステップはaws-actions/aws-lambda-deploy@v1
のリポジトリのREADMEを見て適当に設定してください。
この手順に関しては他の記事を見たほうが早いと思われるので詳しい説明は省略します。
name: Deploy to AWS Lambda
on:
push:
branches: [ "main" ]
permissions: {}
jobs:
deploy:
name: Update functions
runs-on: ubuntu-latest
permissions:
id-token: write
contents: read
steps:
- name: Checkout
uses: actions/checkout@v5
- name: Setup Go
uses: actions/setup-go@v5
with:
go-version: '1.24.3'
- name: Build
run: |
GOOS=linux GOARCH=arm64 go build -o bootstrap
mkdir deploy
cp bootstrap deploy/
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v4
with:
aws-region: ${{ secrets.AWS_LAMBDA_REGION }}
role-to-assume: ${{ secrets.AWS_LAMBDA_DEPLOY_ROLE_ARN }}
role-session-name: lambda-deploy
- name: Deploy Lambda Function
uses: aws-actions/aws-lambda-deploy@v1
with:
function-name: [Lambdaの関数名]
code-artifacts-dir: deploy
handler: main.handler
runtime: provided.al2023 # Amazon Linux 2023
architectures: arm64
Done!
以上で完了です。上手く動かないときは各所で設定したリポジトリ名や関数名、ブランチ名、リージョンが正しいか、設定したポリシーに漏れがないかを確認してください。
Discussion