서론
지난번에는 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 부분을 변경해 주었다.
bashname: 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 별로 어떻게 흘러가는지 자세히 확인이 가능하다.
'DevOps' 카테고리의 다른 글
테스트에 관하여.. (1) | 2023.05.08 |
---|---|
TypeScript에 jest를 적용해보자 (0) | 2023.05.08 |
[gitAction] Ansible + gitAction을 이용한 EC2 자동배포 (0) | 2023.04.26 |
[Ansible] Ansible role을 이용한 github 배포 (0) | 2023.04.26 |
[Ansible] Ansible roles (0) | 2023.04.25 |
서론
지난번에는 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 부분을 변경해 주었다.
bashname: 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 별로 어떻게 흘러가는지 자세히 확인이 가능하다.
'DevOps' 카테고리의 다른 글
테스트에 관하여.. (1) | 2023.05.08 |
---|---|
TypeScript에 jest를 적용해보자 (0) | 2023.05.08 |
[gitAction] Ansible + gitAction을 이용한 EC2 자동배포 (0) | 2023.04.26 |
[Ansible] Ansible role을 이용한 github 배포 (0) | 2023.04.26 |
[Ansible] Ansible roles (0) | 2023.04.25 |