0
0

GitHub ActionでDockerをビルドしてECRにPush

Posted at

はじめに

AWSのリソースに対する認証は、OpenID Connect (OIDC)を使用し、GitHub ActionsでDockerをビルドしてECRにPushした時のメモ。

前提

  • ECRのリポジトリは作成済であること
  • GitHubのルートリポジトリにDockerfileを登録してあること

ざっくりした流れ

以下の順に作業を行った。

  1. IAMからIDプロバイダを作成
  2. IAMロールを作成する
  3. IAMポリシーを作成してIAMロールにアタッチ
  4. GitHub Actionsのワークフローを作成

IAMからIDプロバイダを作成

プロバイダのタイプで、OpenID Connectを選択し、

作成したIDプロバイダのARNはメモしておく。

IAMロールを作成する

カスタム信頼ポリシーにJsonを張り付ける。
作成したロールのARNはメモしておく。

{
    "Version": "2012-10-17",
    "Statement": 
        {
            "Effect": "Allow",
            "Principal": {
                "Federated": "<作成したIDプロバイダのARN>"
            },
            "Action": "sts:AssumeRoleWithWebIdentity",
            "Condition": {
                "StringEquals": {
                    "token.actions.githubusercontent.com:aud": "sts.amazonaws.com"
                },
                "StringLike": {
                    "token.actions.githubusercontent.com:sub": "repo:<GitHubユーザー名>/*"
                }
            }
        }
    ]
}

IAMポリシーを作成してIAMロールにアタッチ

IAMポリシーのアクセス許可をJsonで指定

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "ecr:GetAuthorizationToken",
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "ecr:BatchCheckLayerAvailability",
                "ecr:GetDownloadUrlForLayer",
                "ecr:GetRepositoryPolicy",
                "ecr:DescribeRepositories",
                "ecr:ListImages",
                "ecr:DescribeImages",
                "ecr:BatchGetImage",
                "ecr:InitiateLayerUpload",
                "ecr:UploadLayerPart",
                "ecr:CompleteLayerUpload",
                "ecr:PutImage"
            ],
            "Resource": "<ECRのリポジトリのARN>"
        }
    ]
}

GitHub Actionsのワークフローを作成

mainブランチへpushしたときに実行。

Build and Push Docker Image to ECR
on:
  push:
    branches:
      - main

jobs:
  build-and-push:
    runs-on: ubuntu-latest

    permissions:
      id-token: write
      contents: read

    steps:
      - name: Checkout repository
        uses: actions/checkout@v3

      - name: Configure AWS credentials
        uses: aws-actions/configure-aws-credentials@v2
        with:
          role-to-assume: <IAMロールのarn>
          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 image to Amazon ECR
        env:
          ECR_REGISTRY: <AWSアカウント>.dkr.ecr.ap-northeast-1.amazonaws.com
          ECR_REPOSITORY: <ECRのリポジトリ名>
          IMAGE_TAG: latest
        run: |
          docker build -t $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG .
          docker push $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG
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