JJONG`sFACTORY
반응형
 

서론

지난번에는 Ansible과 gitAction을 통해 EC2에 자동 배포하는 인프라를 구축했었다.

 

[gitAction] Ansible + gitAction을 이용한 EC2 자동배포

서론 이전에 Ansible playbook을 실행하면 각 서버에 배포 할 수 있게끔 처리를 해 두었다. 이제, git에 push가 실행되었을 때 해당 playbook을 실행할 수 있게 처리해 두면 진짜 자동배포가 완료된다! 변

jjong-factory.tistory.com

문제는, 마지막에도 언급 했듯이 잠시 테스트 용으로 만든거라 SSH 인증쪽을 전부 뚫어 놨다는 것..

세상에는 나쁜 사람들이 많기 때문에 구멍난 곳을 서둘러 막아줘야 한다..!

그러기 위해서 먼저, 보안그룹을 설정할 수 있는 IAM 계정을 하나 만들어야 한다.

 

 

Security Group 설정할 정책 생성

일단 IAM 계정을 생성하기 전, 보안그룹을 설정할 수 있는 정책을 만들자.

bash
{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "ec2:RevokeSecurityGroupIngress", "ec2:AuthorizeSecurityGroupIngress" ], "Resource": [ "[security-group-arn]", "[security-group-role-arn]" ] } ] }

일단 Action쪽의 두개의 규칙은 다음과 같다.

ec2:RevokeSecurityGroupIngress : 보안 그룹에 규칙을 삭제

ec2:authorizeSecurityGroupIngress : 보안 그룹에 규칙을 추가

 

다음은 Resuorce 부분인데,

arn:aws:ec2:[Region]:[Account]:security-group/[security-group-id]

arn:aws:ec2:[Region]:[Account]:security-group-rule/[rule-id]

형태로 넣어주면 되는데,

 

잘 모르겠다 싶으면 IAM Console 에서 정책을 생성 하고

요거를 눌러서 리소스 부분을 추가해 주자.

 

 

IAM 생성 및 키 발급

얼마나 된지 잘 모르겠는데, IAM 생성방식과 키 발급 방식이 조금 변경 되었다.

일단 AWS Console에서 IAM 페이지->사용자 탭으로 이동해서

우측에 있는 사용자 추가를 눌러주고 적절히 사용자 명을 입력해준다.

 

그 다음으로는 권한 설정에서 그룹을 생성해주고, 아까 생성한 정책을 연결.

 

IAM 유저가 생성이 되는데, 해당 사용자로 들어가서 [보안 자격 증명] -> [액세스 키]->[액세스키 발급]을 눌러주고

ACCESS_KEY와 SECRET_KEY를 발급받자!

 

Git Action 편집

이제, Git Action 값만 편집해 주면 된다!

그 전에, 아까 발급받은 KEY값들을 적절히 변수로 추가해준다.

 

그런데 어제 작성한 문서에서 SSH 접속 부분 컴파일이 안되는 문제가 있어서

해당 부분의 uses 부분을 변경해 주었다.

bash
name: deploy on: workflow_dispatch: push: branches: - master jobs: deploy: runs-on: ubuntu-latest steps: # GET GITHUB ACTION IP - name: Get Github Actions IP id: ip uses: haythem/public-ip@v1.3 # AWS IAM ACCESS - name : AWS Credentials uses: aws-actions/configure-aws-credentials@v2 with: aws-access-key-id: ${{ secrets.AWS_SECURITY_ACCESS_KEY_ID }} aws-secret-access-key: ${{ secrets.AWS_SECURITY_SECRECT_KEY }} aws-region: ap-northeast-2 # APPEND Github Action IP to Security group - name : Append Github Action IP to Security group run: | aws ec2 authorize-security-group-ingress --group-id ${{ secrets.AWS_SG_ID }} --protocol tcp --port 22 --cidr ${{ steps.ip.outputs.ipv4 }}/32 - name: Run Ansible playbook uses: cross-the-world/ssh-pipeline@v1.2.0 with: key: ${{ secrets.SSH_KEY }} host: ${{ secrets.HOST }} user: ${{ secrets.USER }} script: | cd /etc/ansible/playbooks ansible-playbook arkinfo-deploy-role.yml # Remove Github Action IP to Security group - name: Remove Gihub Actinos IP to Security group run: | aws ec2 revoke-security-group-ingress --group-id ${{ secrets.AWS_SG_ID }} --protocol tcp --port 22 --cidr ${{ steps.ip.outputs.ipv4 }}/32

참조::

https://tesseractjh.tistory.com/275

 

[Github Actions/AWS] Github Actions에서 SSH로 EC2 인스턴스에 접근하기

※ 이 방법은 EC2 인스턴스에 SSH로 직접 접근하는 방식으로, 빌드를 EC2 인스턴스 상에서 진행하기 때문에 EC2 메모리 등의 자원을 사용하여 서비스에 영향을 줄 수 있습니다. 빌드를 Github Actions에

tesseractjh.tistory.com

 

Jobs Stpes 설명!

 

1) Get Github Actions IP

https://github.com/marketplace/actions/public-ip

 

Public IP - GitHub Marketplace

Queries the runner's public IP address

github.com

위 정보를 사용하여, 현재 github action의 ip값을 받아온다.

위 링크에서, Example workflow을 확인하면 어떻게 흘러가는지 바로 할 수 있다.

 

2) AWS Credentials

https://github.com/marketplace/actions/configure-aws-credentials-for-github-actions

 

Configure AWS Credentials For GitHub Actions - GitHub Marketplace

Configure AWS credential and region environment variables for use with the AWS CLI and AWS SDKs

github.com

AWS에서 제공해주는GitHub Actions용 인증.

발급받은 키값으로 인증 절차를 거쳐준다.

 

3) Append Github Action IP to Security group

ec2에 해당 group-id 값에 github action이 실행되는 ip값을 프로토콜 tc, 포트 22번으로 inbound를 추가한다.

 

4) Run Ansible playbook

EC2에 접속한 뒤 Ansible playbook을 실행

 

4) Remove Github Action IP to Security group

3)에서 추가한 보안그룹을 삭제

이제 구멍난 부분을 전부 막아 두었다!

 

결과 확인

정상적으로 GitAction이 실행 되었다.

여기서 스탭별로 클릭해 보면 Step 별로 어떻게 흘러가는지 자세히 확인이 가능하다.

반응형