[AWS ECR] Github Actions 를 활용한 이미지 등록

‍정진철·2023년 6월 20일
0

AWS

목록 보기
1/4

AWS IAM 란 ?


AWS Identity and Access Management(IAM)은 AWS 리소스에 대한 액세스를 안전하게 제어할 수 있는 웹 서비스입니다. IAM을 사용하면 사용자가 액세스할 수 있는 AWS 리소스를 제어하는 권한을 중앙에서 관리할 수 있습니다. IAM을 사용하여 리소스를 사용하도록 인증(로그인) 및 권한 부여(권한 있음)된 대상을 제어합니다.

https://docs.aws.amazon.com/ko_kr/IAM/latest/UserGuide/introduction.html


수행 기능

  • AWS 리소스 접근 제어 기능
  • IAM 사용자 및 그룹 생성, 수정, 삭제
  • IAM 정책 생성 및 관리
  • AWS 리소스에 대한 엑세스 권한 부여 및 제거

사용자 그룹 (User Group):
사용자 그룹은 IAM 사용자의 집합입니다. 사용자 그룹을 생성하여 사용자에게 일괄적으로 권한을 할당할 수 있습니다. 그룹에는 여러 사용자를 포함시킬 수 있으며, 그룹에 할당된 권한은 그룹 내의 모든 사용자에게 적용됩니다.

사용자 (User):
사용자는 AWS 리소스에 액세스하는 개별적인 계정입니다. 각 사용자에는 고유한 자격증명(액세스 키 및 비밀 액세스 키)이 있으며, 해당 사용자에 대한 권한 및 규칙을 설정할 수 있습니다.

역할 (Role):
역할은 특정 작업을 수행하기 위해 권한이 부여된 IAM 개체입니다. 일반적으로 AWS 리소스에 액세스하는 서비스나 애플리케이션에 역할을 할당하여 보안을 강화하고 필요한 권한을 제한적으로 부여합니다. 역할은 사용자에게 직접 연결되지 않고, 필요한 서비스나 애플리케이션에게 임시 자격 증명을 제공하여 역할을 수행합니다.

정책 (Policy):
정책은 AWS 리소스에 대한 액세스를 제어하기 위한 규칙 세트입니다. 정책은 JSON 형식으로 작성되며, 특정 사용자, 그룹 또는 역할에 연결될 수 있습니다. 정책은 허용되는 작업, 리소스, 효과 등을 정의하여 액세스 제어를 구성합니다.
정책은 JSON 형식이며 다음과 같은 구성 요소를 포함

  • Principal : 접근을 허용 혹은 차단하고자 하는 대상
  • Action : principal이 어떤 행위를 하는지 지정
  • Resource : 해당 identity를 가진 사용자가 어디 접근을 허용할지 차단할
    지를 지정
  • Condition : 다양한 조건들을 넣어 복잡하게 설정 가능
  • Effect : 허용할지 거부할지 결정(allow보다 deny가 우선순위 높음)

자격증명 공급자 (Identity Provider):
자격증명 공급자는 외부 신뢰 관계를 통해 IAM 사용자의 인증을 처리하는 서비스입니다. AWS에서 제공하는 자격증명 공급자인 AWS 계정과 함께, 페이스북, 구글, 아마존 Cognito 등의 외부 자격증명 공급자를 사용할 수 있습니다. 이를 통해 외부 사용자를 IAM에 연결하고 외부 ID 공급자를 통해 사용자 인증을 수행할 수 있습니다.


AWS IAM 등록


암호 키 & 비밀 키 발급

  • 보안 자격 증명으로 들어가기
  • 실습을 위한 ECR을 로컬에서 올리기 위함이므로 로컬 코드로 선택

Github Settings

  • 발급받은 키 등록 ( 이름 준수 )




ECR 생성

  • 보라색 박스에 자신의 레포지토리 이름을 설정한다

Github Actions 작성

# This is a basic workflow to help you get started with Actions

name: Image push Amazon ECR

# Controls when the workflow will run
on:
  # Triggers the workflow on push or pull request events but only for the "main" branch
  push:
    branches: ["main"]
  pull_request:
    branches: ["main"]

  # Allows you to run this workflow manually from the Actions tab
  workflow_dispatch:

env:
  AWS_REGION: us-east-1
# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
  # This workflow contains a single job called "build"
  build:
    name: Build image
    # The type of runner that the job will run on
    runs-on: ubuntu-latest

    # Steps represent a sequence of tasks that will be executed as part of the job
    steps:
      # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
      - name: Checkout
        uses: actions/checkout@v3

      - name: Config AWS credentials
        uses: aws-actions/configure-aws-credentials@v2
        with:
          aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
          aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          aws-region: ${{ env.AWS_REGION }}

      - name: Login to Amazon ECR
        id: login-ecr-public
        uses: aws-actions/amazon-ecr-login@v1
        with:
          registry-type: public

      - name: Build, tag, and push image to Amazon ECR
        id: build-image
        env:
          REGISTRY: ${{ steps.login-ecr-public.outputs.registry }}
          REGISTRY_ALIAS: i8c7e5c5
          REPOSITORY: jincheol
          IMAGE_TAG: ${{ github.sha }}
        run: |
          # Build a docker container and
          # push it to ECR so that it can
          # be deployed to ECS.

          docker build -t $REGISTRY/$REGISTRY_ALIAS/$REPOSITORY:$IMAGE_TAG .
          docker push $REGISTRY/$REGISTRY_ALIAS/$REPOSITORY:$IMAGE_TAG
          echo "::set-output name=image::$REGISTRY/$REGISTRY_ALIAS/$REPOSITORY:$IMAGE_TAG"


윗부분은 위에서 ECR 레포지토리 이름을 설정한 부분을 넣어줘야 하고 ALIAS는
보란색 박스의 별칭으로 입력


결과


profile
WILL is ALL

0개의 댓글