0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

GitHubActionsでECRにpushしようとしたら権限エラーでハマった

Posted at

はじめに

GitHubActionsでECRにpushをしようと試みた際にIAMロールの権限エラーで少しハマったので備忘録として起こったこと、原因とその対処法をまとめます。

何が起こったのか

以下のymlファイルでGitHubActionsからECRへのイメージプッシュを試みました。

main.yml
name: Build And Push

on:
  workflow_call:
  workflow_dispatch:

env:
  AWS_REGION: ap-northeast-1
  ECR_REGISTRY: 992382548989.dkr.ecr.ap-northeast-1.amazonaws.com

jobs:
  build:
    name: Build And Push
    runs-on: ubuntu-latest
    permissions:
      id-token: write
      contents: read
    steps:
      - name: Checkout repository
        uses: actions/checkout@v4

      - name: Set up QEMU
        uses: docker/setup-qemu-action@v3

      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v3

      - uses: aws-actions/configure-aws-credentials@v4
        with:
          role-to-assume: ${{ secrets.AWS_IAM_ROLE_ARN }}
          aws-region: ${{ env.AWS_REGION }}
          
      - name: Login to Amazon ECR  
        run: |
          aws ecr get-login-password --region ${{ env.AWS_REGION }} | docker login --username AWS --password-stdin ${{ env.ECR_REGISTRY }}

      - name: Build and push API
        uses: docker/build-push-action@v5
        with:
          push: true
          provenance: false
          tags: ${{ env.ECR_REGISTRY }}/develop/skygallery:latest
          context: ./backend

しかし、以下の権限エラーが出てしまいます。

buildx failed with: ERROR: failed to solve: failed to push <アカウントID>.dkr.ecr.ap-northeast-1.amazonaws.com/develop/skygallery:latest: unexpected status from HEAD request to https://<アカウントID>.dkr.ecr.ap-northeast-1.amazonaws.com/v2/develop/skygallery/manifests/latest: 403 Forbidden

ECRへのpushに使用しているIAMロールの権限は以下の通りです。
ECRのpushに必要な権限はあるはず。。なのになぜエラー??!!

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "GetAuthorizationToken",
            "Effect": "Allow",
            "Action": [
                "ecr:GetAuthorizationToken"
            ],
            "Resource": "*"
        },
        {
            "Sid": "PushImageOnly",
            "Effect": "Allow",
            "Action": [
                "ecr:BatchCheckLayerAvailability",
                "ecr:InitiateLayerUpload",
                "ecr:UploadLayerPart",
                "ecr:CompleteLayerUpload",
                "ecr:PutImage"
            ],
            "Resource": "arn:aws:ecr:ap-northeast-1:<AWSアカウントID>:repository/<リポジトリ名>"
        }
    ]
}

原因と解決策

調べてみるとecrへのpushを行っている「docker/build-push-action@v5」においてimageのmanifestを取得しているらしく、それをするための権限「"ecr:BatchGetImage",」が不足しているとのことでした。
上記権限を追加したIAMロールがこちら。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "GetAuthorizationToken",
            "Effect": "Allow",
            "Action": [
                "ecr:GetAuthorizationToken"
            ],
            "Resource": "*"
        },
        {
            "Sid": "PushImageOnly",
            "Effect": "Allow",
            "Action": [
                "ecr:GetDownloadUrlForLayer",
                "ecr:BatchGetImage",
                "ecr:BatchCheckLayerAvailability",
                "ecr:InitiateLayerUpload",
                "ecr:UploadLayerPart",
                "ecr:CompleteLayerUpload",
                "ecr:PutImage"
            ],
            "Resource": "arn:aws:ecr:ap-northeast-1:992382548989:repository/develop/skygallery"
        }
    ]
}

ECRのpushに使用しているIAMロールの権限を上記のように更新したら無事成功しました。

参考にさせていただいた記事

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?