# GitHub Actions 번역하며 요약하기
https://help.github.com/en/actions/configuring-and-managing-workflows/creating-and-storing-encrypted-secrets
- 암호화된 secrets 는 엑세스토큰같은 중요한 정보를 레파지토리에 저장할 수 있게 해준다
- 레파지토리의 소유자여야 암호화된 secret 를 생성할 수 있으며, organization 레파지토리일 경우 어드민 권한이 있어야 한다
- REST API 를 사용하여 secrets 를 생성하는 경우 레파지토리에 쓰기 권한이 있는 누구든지 secrets 를 생성할 수 있다
- 파일 편집 권한이 있다면 워크플로우 파일에서 암호화된 secrets 를 사용하고 읽을 수 있다
참고) GitHub Actions secrets API & Access permissions on GitHub
0. About encrypted secrets
- Secrets 은 깃헙 액션을 함께 사용하기 위한 레파지토리에 생성하는 암호화된 환경변수이다
- 깃헙에 도달(?) 하기 전에 secrets 를 암호화하기위해 'libsodium sealed box' 를 사용하며
워크플로우에서 secrets 를 사용할 때까지 암호화를 유지한다 - 깃헙은 자동으로 secrets 로그를 삭제하지만 의도적으로 로그를 출력하는건 피해야한다
1. Creating encrypted secrets
- Secret 이름은 공백을 포함할 수 없다
- 깃헙이 로그에서 secret 를 삭제하는걸 보장하려면 secret 의 값으로
JSON 또는 인코딩된 Git blob 이 포함된 구조화된 데이터를 사용하지 말아야 한다 - 깃헙 레파지토리의 셋팅탭으로 진입하여 왼쪽 사이드바에 'Secrets' 를 클릭해보면 아래와 같은 내용이 쓰여있다
- Secrets 는 암호화된 환경 변수로써 선택된 action 에서만 노출된다
- 레파지토리의 collaborator 는 누구든지 워크플로우에 해당 secrets 를 사용할 수 있다
- Secrets 는 fork 의 PR 에 의해 트리거된 경우 워크플로우에 전달되지 않는다
- 인증서를 생성할 때 가능한 최소한의 퍼미션을 부여하는걸 추천한다
- 개인 인증서 사용 대신 배포 키 또는 서비스 계정을 사용하고 필요하다면 읽기 전용 퍼미션 권한을 부여하고
가능한 한 접근을 제한한다 - 개인 액세스 토큰 (PAT) 을 생성할 때 필요한 최소 범위을 선택한다
- Action 에 사용가능한 secret 를 만들려면 워크플로우 파일에서 secret 입력 또는 환경변수로 설정해야한다
(Action README 파일 참고)
2. Using encrypted secrets in a workflow
- GITHUB_TOKEN 제외하고 fork 한 레파지토리에서 워크플로우가 트리거될 때 secret 은 러너에 전달되지 않는다
- Secret 을 입력 또는 환경변수로 제공하려면 레파지토리에서 생성된 secrets 접근하기위해 secret context 를 사용할 수 있다
참고) Context and expression syntax for GitHub Actions
steps:
- name: Hello world action
with: # Set the secret as an input
super_secret: ${{ secrets.SuperSecret }}
env: # Or as an environment variable
super_secret: ${{ secrets.SuperSecret }}
- 가능하면 커맨드라인에서 프로세스간 secret 전달을 피한다
- 커맨드라인 프로세스는 다른 사용자 (ps command 사용) 가 볼 수 있거나 보안 검사 이벤트에 잡힐 수 있다
- Secret 보호를 위해 환경 변수, STDIN 또는 타켓 프로세스에서 지원하는 다른 메커니즘 사용하는게 좋다
- 커맨드라인에서 secret 를 전달해야만 한다면 적절한 인용 규칙 내에서 포함해야한다
- Secrets 는 종종 shell 에 영향이 갈 수 있는 특수 문자를 포함하기 때문에
특수문자를 사용하지 않으려면 환경 변수와 함께 인용을 사용한다
3. Limits for secrets
- 워크플로우는 100개 secret 이 있을 수 있으며 secret 환경변수의 이름은 레파지토리에서 유니크해야만 한다
- Secrets 는 64KB 로 제한되며 64KB 보다 더 큰 secrets 를 사용하려면,
레파지토리에 암호화된 secrets 를 저장하고 깃헙 secret 에 암호 해독을 저장한다 - 깃헙에서 레파지토리에 파일을 체크하기전에 gpg 를 사용해서 로컬 자격 증명을 암호화 할 수 있다
1. 터미널에서 아래 명령을 실행하여 gpg, AES256 암호 알고리즘을 사용하여 'my_secret.json' 파일을 암호화한다
- $ gpg --symmetric --cipher-algo AES256 my_secret.json
2. 암호를 입력하라는 메세지가 보일 것이다. (암호 기억해야함)
3. 레파지토리에 암호를 저장하기 위해 새로운 'secret' 을 생성한다
- 예를들어 LARGE_SECRET_PASSPHRASE 라는 이름으로 새 secret 을 생성하고 2번에서 입력한 암호를 secret 의 값으로 설정한다
4. 레파지토리에서 암호화된 파일을 복사 후 커밋한다 (ex. my_secret.json.gpg)
5. 암호를 복호화하려면 shell script 를 생성하고 'decrypt_secret.sh' 라고 저장한다
- #!/bin/sh # Decrypt the file mkdir $HOME/secrets # --batch to prevent interactive command --yes to assume "yes" for questions gpg --quiet --batch --yes --decrypt --passphrase="$LARGE_SECRET_PASSPHRASE" \ --output $HOME/secrets/my_secret.json my_secret.json.gpg
6. 레파지토리에 체크 전 shell script 가 실행가능한지 확인한다
- $ chmod +x decrypt_secret.sh $ git add decrypt_secret.sh $ git commit -m "Add new decryption script" $ git push
7. 워크플로우 step 에서 shell script 를 호출하고 secret 을 복호화하한다
- 워크플로우가 실행되는 환경에서 레파지토리의 복사본을 만들려면 'actions/checkout action' 을 사용한다
레파지토리의 루트에 상대적인 run 커맨드를 사용하여 shell script 를 참조한다
name: Workflows with large secrets
on: push
jobs:
my-job:
name: My Job
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Decrypt large secret
run: ./.github/scripts/decrypt_secret.sh
env:
LARGE_SECRET_PASSPHRASE: ${{ secrets.LARGE_SECRET_PASSPHRASE }}
# This command is just an example to show your secret being printed
# Ensure you remove any print statements of your secrets. GitHub does
# not hide secrets that use this workaround.
- name: Test printing your secret (Remove this step in production)
run: cat $HOME/secrets/my_secret.json
'기타개발 > GitHub Actions' 카테고리의 다른 글
GitHub Actions #8 - Authenticating with the GITHUB_TOKEN (0) | 2020.03.31 |
---|---|
GitHub Actions #7 - Using environment variables (0) | 2020.03.30 |
GitHub Actions #5 - Build and upload debug apk (0) | 2020.03.28 |
GitHub Actions #4 - Managing a workflow run (0) | 2020.03.27 |
GitHub Actions #3 - Starting with preconfigured workflow templates (0) | 2020.03.26 |
댓글