AWS 보안 그룹에 GitHub Actions IP 추가 및 삭제하는 방법
AWS EC2 인스턴스에 GitHub Actions로 배포 시 보안을 강화하기 위해 배포 전에는 GitHub Actions의 IP를 보안 그룹에 추가하고 배포 후에는 해당 IP를 보안 그룹에서 삭제하는 방법입니다.
GitHub Actions 워크플로우
전체 워크플로우
---
name: Remote SSH Command for Deploy
on:
push:
branches:
- main
env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
AWS_DEFAULT_REGION: us-east-1
AWS_SG_ID: sg-07f3
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: GitHub Action Runner Public IP(Check IP)
id: ip
uses: haythem/public-ip@v1.3
# 디버깅을 위해 IP 주소 확인
#- name: Print Public IP
# run: |
# echo ${{ steps.ip.outputs.ipv4 }}
# echo ${{ steps.ip.outputs.ipv6 }}
- name: Configure AWS Credentials
uses: aws-actions/configure-aws-credentials@v4
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: ${{ env.AWS_DEFAULT_REGION }}
- name: Add GitHub Action IP to Security Group
run: |
aws ec2 authorize-security-group-ingress \
--group-id ${{ env.AWS_SG_ID }} \
--protocol tcp \
--port 22 \
--cidr ${{ steps.ip.outputs.ipv4 }}/32 || echo "The IP already exists in the security group"
# 디버깅을 위해 경로 확인
# - name: Check files in current directory
# run: |
# ls -R ./
- name: Copy deploy.sh to Remote Server
run: |
mkdir -m 700 -p $HOME/.ssh
echo "${{ secrets.AWS_EC2_SSH_KEY }}" > $HOME/.ssh/aws_ec2.pem
chmod 600 $HOME/.ssh/aws_ec2.pem
scp -i $HOME/.ssh/aws_ec2.pem -o StrictHostKeyChecking=no -r ./shell_scripts/deploy.sh \
${{ vars.AWS_EC2_USER }}@${{ vars.AWS_EC2_HOST }}:/home/${{ vars.AWS_EC2_USER }}/ || exit 1
- name: Execute scripts using remote SSH commands
uses: appleboy/ssh-action@v1.2.0
with:
host: ${{ vars.AWS_EC2_HOST }}
username: ${{ vars.AWS_EC2_USER }}
key: ${{ secrets.AWS_EC2_SSH_KEY }}
script: |
cd $HOME
chmod +x deploy.sh
./deploy.sh
- name: Remove GitHub Action IP from Security Group
run: |
aws ec2 revoke-security-group-ingress \
--group-id ${{ env.AWS_SG_ID }} \
--protocol tcp \
--port 22 \
--cidr ${{ steps.ip.outputs.ipv4 }}/32 || echo "Failed to remove IP from security group."
---
워크플로우 설명
1. 트리거
main 브랜치로 코드가 푸시될 때 실행됩니다.
on:
push:
branches:
- main
2. 환경 변수
AWS_ACCESS_KEY_ID와 AWS_SECRET_ACCESS_KEY는 GitHub Secrets를 통해 안전하게 저장된 AWS 자격 증명을 사용합니다.
env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
AWS_DEFAULT_REGION: us-east-1
AWS_SG_ID: sg-07f3
3. build
이 작업은 EC2 서버에 파일을 복사하고 원격에서 배포 스크립트를 실행합니다.
3.1 Checkout Code
최신 코드를 체크아웃하여 배포에 필요한 파일을 준비합니다.
- name: Checkout code
uses: actions/checkout@v4
3.2 GitHub Actions 러너 IP 확인
현재 GitHub Actions 러너의 공인 IP 주소를 가져옵니다.
- name: GitHub Action Runner Public IP(Check IP)
id: ip
uses: haythem/public-ip@v1.3
3.3 AWS 자격 증명 구성
AWS CLI 명령어를 사용할 수 있도록 AWS 자격 증명을 구성합니다.
- name: Configure AWS Credentials
uses: aws-actions/configure-aws-credentials@v4
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: ${{ env.AWS_DEFAULT_REGION }}
3.4 보안 그룹에 GitHub Actions IP 추가
GitHub Actions 러너의 IPv4 주소를 보안 그룹에 추가합니다.
- name: Add GitHub Action IP to Security Group
run: |
aws ec2 authorize-security-group-ingress \
--group-id ${{ env.AWS_SG_ID }} \
--protocol tcp \
--port 22 \
--cidr ${{ steps.ip.outputs.ipv4 }}/32 || echo "The IP already exists in the security group"
3.5 배포 스크립트 복사
GitHub Actions 러너에서 EC2 서버로 deploy.sh 파일을 복사합니다.
- name: Copy deploy.sh to Remote Server
run: |
mkdir -m 700 -p $HOME/.ssh
echo "${{ secrets.AWS_EC2_SSH_KEY }}" > $HOME/.ssh/aws_ec2.pem
chmod 600 $HOME/.ssh/aws_ec2.pem
scp -i $HOME/.ssh/aws_ec2.pem -o StrictHostKeyChecking=no -r ./shell_scripts/deploy.sh \
${{ vars.AWS_EC2_USER }}@${{ vars.AWS_EC2_HOST }}:/home/${{ vars.AWS_EC2_USER }}/ || exit 1
3.6 배포 스크립트 실행
원격 서버에서 deploy.sh를 실행합니다.
- name: Execute scripts using remote SSH commands
uses: appleboy/ssh-action@v1.2.0
with:
host: ${{ vars.AWS_EC2_HOST }}
username: ${{ vars.AWS_EC2_USER }}
key: ${{ secrets.AWS_EC2_SSH_KEY }}
script: |
cd $HOME
chmod +x deploy.sh
./deploy.sh
3.7 보안 그룹에서 GitHub Actions IP 제거
배포가 완료된 후 GitHub Actions 러너의 IP를 보안 그룹에서 삭제합니다.
- name: Remove GitHub Action IP from Security Group
run: |
aws ec2 revoke-security-group-ingress \
--group-id ${{ env.AWS_SG_ID }} \
--protocol tcp \
--port 22 \
--cidr ${{ steps.ip.outputs.ipv4 }}/32 || echo "Failed to remove IP from security group."
이 워크플로우는 GitHub Actions를 활용해 EC2 배포 작업을 안전하고 효율적으로 자동화하는 데 적합합니다.
참고URL
- GitHub Marketplace : Checkout
- GitHub : Public IP
- GitHub Marketplace : "Configure AWS Credentials" Action for GitHub Actions
- GitHub Marketplace : SSH Remote Commands
'퍼블릭 클라우드' 카테고리의 다른 글
AWS EC2에서 NGINX 애플리케이션을 Docker 이미지로 빌드하고 Docker Hub에 업로드하는 방법 (0) | 2025.01.19 |
---|---|
Spring Boot 애플리케이션을 Docker 이미지로 빌드하고 Docker Hub에 배포한 뒤 AWS EC2에 배포하는 방법 (0) | 2025.01.18 |
SecureCRT 클라이언트에서 AWS EC2 서버에 SSH 접속 시 오류가 발생하는 경우 (0) | 2025.01.10 |
Spring Boot 프로젝트를 GitHub Actions를 이용해 배포 자동화하는 방법 (0) | 2025.01.09 |
Amazon RDS에서 스냅샷 복원을 하는 방법 (0) | 2025.01.06 |