1 minute read

GitHub Actions로 ARM64 플랫폼 빌드 및 배포 용도의 Linux 유저를 만들자. GitHub Actions로 빌드한 결과물을 Linux 인스턴스로 복사한다. 빌드 결과물 저장할 디렉터리의 쓰기 권한이 필요하다. 딱 필요한 권한만 세팅한 Linux 유저를 만들자. 비밀키를 GitHub이 제공하는 저장소 환경 secrets에 저장해서 내가 관리하는 것보다 훨씬 더 안전하다고 해서 필요 이상의 막대한 권한을 가진 유저 비밀키를 동네방네 뿌리는 잘못된 습관을 만들지 말자.

배포용 유저 생성 - deployuser

deployuser 로 직관적인 이름의 유저를 만든다.

sudo useradd -m -s /bin/bash deployuser

-m 옵션으로 홈 디렉터리를 만들고 bash 를 기본 셸로 지정했다.

보조 그룹(supplementary groups) 멤버로 추가

deployuser 는 배포할때만 사용한다. 나는 평소에 ubuntu 유저를 사용한다. 평소에 사용하는 유저로 deployuser 가 배포한 바이너리를 똑같은 권한으로 접근하고 싶다. 이럴 때 사용하라고 group이 있다. 특정 디렉터리 접근을 위해서는 유저당 여러 개를 가질 수 있는 보조 그룹(supplementary groups)을 추가한다.

appgroup 그룹을 추가하고 ubuntudeployuser 유저를 그룹에 추가한다.

sudo groupadd appgroup

sudo usermod -aG appgroup ubuntu
sudo usermod -aG appgroup deployuser

그룹에 멤버로 추가가 잘 됐는지 확인해본다.

grep ^appgroup /etc/group

appgroup:x:1003:ubuntu,deployuser

appgroup 그룹이 권한을 가진 디렉터리 생성

/app 디렉터리를 만들고 소유자는 deployuser, 그룹은 appgroup 으로 설정한다.

sudo mkdir /app
sudo chown deployuser:appgroup /app

drwxr-xr-x   2 deployuser appgroup  4096 Jun 15 07:07 app

유저 뿐만 아니라 그룹에게도 똑같은 권한을 세팅한다.

sudo chmod 775 /app

drwxrwxr-x   2 deployuser appgroup  4096 Jun 15 07:07 app

GitHub Actions로 /app 디렉터리로 파일을 복사한다. group이 appgroup 으로 세팅되게 한다.

sudo chmod g+s /app

drwxrwsr-x   2 deployuser appgroup  4096 Jun 15 07:07 app

xs 로 바뀌었다.

ssh 키 생성 및 GitHub에 등록

반대라서 헷갈릴 수 있다. GitHub에서 Linux 인스턴스로 접속한다. 즉 비밀키가 GitHub에 저장되어야 한다.

ssh 키를 생성한다.

sudo su deployuser
ssh-keygen -t ed25519 -C "github-actions-deploy"

authorized_keys 파일을 만들고 방금 만든 ssh 키의 공개키를 추가한다.

touch ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys

cat ~/.ssh/id_ed25519.pub >> ~/.ssh/authorized_keys

이제 비밀키를 클립보드에 복사한다. pbcopy는 클립보드에 저장하는 MacOS 명령어다.

ssh my-app 'sudo su - deployuser -c "cat ~/.ssh/id_ed25519"' | pbcopy

복사한 비밀키를 GitHub이 제공하는 저장소 환경 secrets에 저장하고 쓴다.

links