lambrollでAWS LambdaをDockerデプロイするときに注意したいIam ポリシー設定
lambrollでAWS LambdaをDockerデプロイするときに注意したいIam ポリシー設定
lambrollはAWS lambdaをさくっとデプロイすることが可能なツールです
今回はlambrollでAWS LambdaをGithub actionsからDockerデプロイしようとした際にエラーが発生たのですが
エラーの内容に対応した内容をメモとして残します。
この記事が参考となるひと
- lambrollでAWS LambdaをGithub actionsからzipデプロイはできていたが、コンテナデプロイできるようにもしたい
- lambroll deployするとコンテナデプロイできなくて各種ログで
check the ecr permissions
のようなエラー出力がされた
github actionsのworkflow
下記のようなGithub Actionsのworkflowを運用しようとしていました。
jobs:
deploy:
name: ecr push and lambroll deploy
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Configure AWS credentials from Test account
uses: aws-actions/configure-aws-credentials@v2
with:
role-to-assume: arn:aws:iam::111111111111:role/my-github-actions-role-test
aws-region: ap-northeast-1
- name: Login to Amazon ECR
id: login-ecr
uses: aws-actions/amazon-ecr-login@v1
- name: Build, tag, and push docker image to Amazon ECR
env:
REGISTRY: ${{ steps.login-ecr.outputs.registry }}
REPOSITORY: my-ecr-repo
IMAGE_TAG: ${{ github.sha }}
run: |
docker build -t $REGISTRY/$REPOSITORY:$IMAGE_TAG .
docker push $REGISTRY/$REPOSITORY:$IMAGE_TAG
- uses: fujiwara/lambroll@v0
with:
version: v0.12.2
- run: |
lambroll deploy
※ECR Push自体はlambrollではできなさそうだったので、AWS製の下記のgithub actionsを使ってimageのpushをしています
エラーログの内容
ログでは下記のようなエラー内容になっていました
lambda does not have permission to access the ecr image. check the ecr permissions.
AWSマネージコンソールにログインして、CloudTrailで確認してみても同じようなエラーが発生していて、Github Actionsに紐付けたロールに影響していたのでそのロールのIAM周りを見直してみることに
イベント名をCreateFunction20150331
で絞り込みすると当該ログがみつかるはず(CreateFunction
ではなかった)
CIの実行ユーザのIam設定の修正
AWSのドキュメントを参考(Permissionsのあたり)に
CIの実行ロールでは下記のような編集を行ってみた
{
"Statement": [
{
"Action": [
"lambda:UpdateFunctionConfiguration",
"lambda:UpdateFunctionCode",
"lambda:UpdateAlias",
"lambda:ListTags",
"lambda:GetFunctionConfiguration",
"lambda:GetFunction",
"lambda:CreateFunction",
"lambda:CreateAlias",
+ "ecr:SetRepositoryPolicy",
+ "ecr:GetRepositoryPolicy",
+ "ecr:DeleteRepositoryPolicy"
],
"Effect": "Allow",
"Resource": "*",
"Sid": ""
}
],
"Version": "2012-10-17"
}
※DeleteRepositoryPolicy
はlambroll delete
で使うのかも?と思って付与しています
これでも同様のエラーが発生するので、次にあやしいと思ったLambda実行ロールのIam設定を
Lambda実行ロールのIam設定の修正
Lambda実行ロールについて、修正前はAWSマネージドポリシーのAWSLambdaBasicExecutionRole
のみアタッチした状態でした。
また、AWSのドキュメントを参考(Amazon ECR permissionsのあたり)に
追加で下記のポリシーを作成してアタッチしたところGithub ActionsからlambrollでのDockerデプロイが可能になりました。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "LambdaECRImageRetrievalPolicy",
"Effect": "Allow",
"Action": [
"ecr:BatchGetImage",
"ecr:GetDownloadUrlForLayer"
],
"Resource": "*"
}
]
}
Discussion