갬미의 성장일기

Day 64 - Cloud network IAM, CICD 본문

Cloud/Cloud 공부일기

Day 64 - Cloud network IAM, CICD

갬미 2022. 4. 12. 23:01

오늘 배운 내용

- Cloud network - IAM

- CICD 준비


Cloud network 

Cloud network의 보안정책은 리소스에 대한 정책과 User에 대한 정책으로 나눌 수 있다

IAM - Identity and Access Management

User에 대한 정책임 - 누가 어떤 리소스에 무엇을 할 것인지 정한다

 

GCP 

IAM이 될 수 있는 오브젝트들 - projects, resources, roles, members 

만약 내가 내친구 이슬이 구글계정에 프로젝트 ownership권한을 준다면 이슬이는 해당 프로젝트를 자신이 만든 프로젝트처럼 사용할 수 있다

 

who = 보안 주체

1. 구글 계정 - 사람에서 부여되는 권한

2. 서비스 어카운트 - 객체 (ex. VM이 스토리지(리소스)에 접근) 객체에 주는 권한 

 

cloud 스토리지에 VM이 접근하기 위해서 -> 서비스 어카운트 생성 후 VM에 권한 부여

github action에서 running 되는 컨테이너가 gke에 무엇인가를 배포하려면 서비스 어카운트가 필요

권한을 주고 배포할 수 있도록 해야 함


gcp service account 실습

VM과 클라우드 버킷을 만들고 클라우드 버킷에 데이터를 하나 넣어둔다

# bucket data 다운로드
gsutil ls gs://gymin/
gsutil cp gs://gymin/git.jpg .

다운받는것은 가능하지만 

로컬의 data를 버킷(클라우드 스토리지)에 올리려니까 403 error가 떨어짐 --> 권한없음 오류

read는 되지만 write는 안됨

vm에 read-write권한을 주어야 한다

 

IAM >Service accounts

Storage에 Admin 권한을 주는 서비스 어카운트 생성

--> VM 생성시 다음 서비스 어카운트를 선택하면 접근 가능하다

 

VM을 만들때 서비스 어카운트를 바로 줄 수없는 경우 -> key를 이용해서 권한을 준다

서비스 어카운트 managed key > add key 새로운 키 받아 VM에 업로드

key.json 파일을 받고 VM으로 옮겨 다음 명령어 실행

# gcloud auth activate-service-account 서비스 어카운트 이름  --key-file 키파일명
gcloud auth activate-service-account storage-rw@annular-magnet-343008.iam.gserviceaccount.com --key-file auth.json

업로드가 잘됨


AWS

AWS 콘솔의 모든 작업은 API 호출을 통해 요청된다

IAM - 누가 어떤 리소스에 어떻게 액션을 취할 수 있는가?

 

who = 보안 주체

1. root user : 모든 권한, 계정 생성 후 사용하지 않을것을 권장

2. IAM user : 장기 자격 증명 (내가 쓰고있는 계정)

3. Role: 임시 자격 증명, 정의된 제한범위 내에서 aws api 사용 가능 (gcp - service account)

4. application: role을 부여받은 리소스 (vm등 ..)

 

AWS who - 계정, group role 서비스 어카운트
GCP who - 계정, group 정책 role

 

aws는 두가지 방법으로 api에 authentication 할 수 있다 (IAM)

1. console 접속 - ID, PW로 접속

2. api/cli/sdk 접속 - Access key, secret key 이용하여 증명

     GCP는 Access key, Secret key으로 증명 불가능 - 서비스 어카운트로 허가 후 접근

 

임시자격증명(role)은 토큰을 이용


AWS role 실습

IAM 역할 만들기 (VM에서 S3 접근 가능하게 하는 권한)

인스턴스 > 보안 > IAM 역할 수정

권한 부여 후 aws s3 ls

aws s3 ls gymin1 # 안에 들어있는 data가 보임

# data 업로드
echo "hi" > hi.txt
aws s3 cp hi.txt s3://gymin1

data가 업로드 됨

 


CICD

한번 들어보면 좋은 유튜브

 

cicd는 간단하게 말하면

수정된 소스코드를 자동으로 빌드, 배포하는 작업이다

[--> 더 자세하게 수정]

소스코드를 업데이트 하는 방법은 다음과 같다 

vm에서

<일반적인 배포>

개발 - 빌드 - 서버에 배포 (직접)

<CICD>

코드를 깃에 올린다 젠킨스(cicd tool)가 event 감지 - [ 코드 클론 - 빌드 - 서버에 배포 ] - 자동화

 

컨테이너에서

<일반적인 배포>

개발 - 빌드 - 컨테이너 이미지 생성, push - deploy image 수정

<CICD>

코드를 깃에 올린다 젠킨스(cicd tool)가 event 감지 - [ 코드 클론 - 빌드 - 컨테이너 이미지 생성, push -deploy image수정 (cli) ] - 자동화

 

이러한 자동화 프로세스를 work flow라고 한다 

 [ event 감지 - 코드 클론 - 빌드 - 컨테이너 이미지 생성, push -deploy image수정 (cli) ] = work flow

 

CICD 사용하기

jenkins - jenkins 서버가 따로 있음

--> git hib, git lab 들과 연동이 가능 

이런 이벤트성 작업을 받아 git push가 되는 순간에 다시 배포하는것을 젠킨스에서 자동으로 가능함

- 현업에서도 많이 사용하는 툴

-GUI로 작업이 가능하다

 

jenkins 서버에서 

gradle 깔고 

git 이벤트 발생 시 -> git clone -> gradle build -> docker file build, push -> k8s에 배포

 

- git과 연동하는 작업이 필요한데 조금 귀찮다

이를 대신할 수 있는 git action 이라는 기능이 생김 - 이것도 현업에서 많이 사용하는 편

 

github action 사용하기 - SaaS 형태

소스코드 파일과 git 연동 후 cicd action ymal을 만들어 사용한다

work flow에는 하나 이상의 job이 있어야 한다 

 

workflow yaml 파일

커밋

workflow 생김

 

소스코드 수정 후 push 하면 action내용이 하나 생김

들어가서 작업내용 확인하기

 

action 서버에서 소스코드 빌드(gradle), docker image 생성 workflow file

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

name: cicd test

# 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:

# 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:
    # 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
      - uses: actions/checkout@v3
      - name: install jdk
        uses: actions/setup-java@v3
        with:
          distribution: 'temurin'
          java-version: '11'
          cache: 'gradle'
          
      - name: chmod gradle
        run: chmod +x ./gradlew
        
      - name: build
        run: ./gradlew build --no-daemon
        
      - name: check build
        run: ls ./build/libs
        
      # docker setup
      - name: Set up Docker Buildx
        id: buildx
        uses: docker/setup-buildx-action@v1

      - name: docker ps
        run: docker ps

      - name: docker build 
        run: |
              cp ./build/libs/*.war ./Dockerfile
              docker build -t test ./Dockerfile
              docker images

각 step별로 필요한 프로그램을 설치하고 명령어를 넣는다 

-> checkout = git clone과 같음

 

오늘의 회고

  • git action yaml을 강사님과 함께 만들때 여러 오류도 많이 나고 해결하는데 시간이 좀 걸렸는데 어차피 내가 혼자 했어도 났을 오류 였기 때문에,, 강사님과 같이 해결해보고 방법을 찾아가는 과정이 유익했다 ~ 수강생분들 중에 오류가 나면 능동적으로 방법을 찾아보시고 해결책을 제시해주시는 분들이 많은데 그분들을 볼때 마다 반성하게 된다.. 열심히 해야지😂

'Cloud > Cloud 공부일기' 카테고리의 다른 글

Day 66 - CICD (eks)  (0) 2022.04.14
Day 65 - CICD  (0) 2022.04.13
Day 63 - Cloud network  (0) 2022.04.11
Day 62.5 - AWS 3tier 구성하기  (0) 2022.04.11
Day 62 - GCP 2tier (LB, Autoscaling)  (0) 2022.04.08
Comments