Skip to main content

암호환된 시크릿 생성 및 사용

암호화 시크릿은 액세스 토큰과 같은 민감한 정보들을 레포지토리에 저장하게 해줍니다.

시크릿은 비밀번호, 암호로 번역됩니다만 깃허브의 시크릿 기능을 다른 일반 명사와 헷갈리지 않고 표현하기 위해서 고유명사화 해서 사용합니다.

write 권한을 갖고 있다면, 시크릿을 생성, 읽기, 그리고 사용할 수 있습니다.

암호화된 시크릿에 관하여#

시크릿은 레포지토리에서 만들어진 암호화된 환경변수로, 깃허브 액션에 의해서만 사용될 수 있습니다. 깃허브는 웹브라우저에서 시크릿을 퍼블릭-키 인증 암호화 및 Poly1305 사이퍼 알고리즘을 사용하여 암호화합니다. 더 많은 정보는 "TweetNaCl.js" 도큐멘테이션을 참고하세요. 액션에서 시크릿 사용을 가능하게하려면, 시크릿을 워크플로우 파일의 환경변수 또는 입력변수로 설정해야합니다.

암호화된 시크릿 생성하기#

시크릿은 공백을 포함하는 이름을 가질 수 없습니다. 깃허브가 로그에서 시크릿을 수정하는 것을 보장하기 위해, 시크릿의 값으로 구조화된 데이터를 사용하는 것은 피하세요. 예를들면 JSON을 포함하거나 인코딩된 git blobs을 피하세요.

1. 레포지토리의 메인 페이지로 이동한다.#

2. Settings 탭을 클릭한다.#

img

3. 왼쪽 사이드 바의 Secrets를 클릭한다.#

4. "Name" 상자에 이름을 입력한다.#

5. 시크릿의 값을 입력한다.#

6. Add secret을 클릭한다.#

액션에 시크릿을 통과시키려면, 입력 혹은 환경변수로 워크플로우 안에 시크릿을 설정해놓아야 합니다. 더 많은 정보는 "워크플로우 문법"을 참고하세요.

암호화된 시크릿 사용하기#

포크된 레포지토리로 부터 워크플로우가 트리거 되었을 때, 시크릿은 GITHUB_TOKEN 없이는 러너에 통과되지 못합니다.

시크릿을 입력 또는 환경변수로 액션에 제공하기 위해서는, secrets 컨텍스트를 사용하면 레포지토리 내의 만든 시크릿들에게 접근할 수 있습니다. 더 많은 정보는 "컨텍스트와 표현식"를 참고하세요.

시크릿의 제한#

워크플로우는 시크릿을 100개까지 가질 수 있습니다. 시크릿 환경 변수의 이름은 반드시 레포지토리 안에서 유일해야합니다.

시크릿은 64KB 사이즈로 제한됩니다. 이 보다 큰 용량으로 사용하고 싶다면, 암호화된 시크릿을 레포지토리에 보관하고, 암호해독 패스프레이즈를 시크릿으로 저장하십시오. 예를들면, 레포지토리의 파일을 체크하기 전에 gpg를 사용하여 자격증명을 로컬에서 암호화할 수 있습니다. 자세한 내용은 "gpg manpage"를 참고하세요.

::: warning 경고 시크릿이 액션이 실행될때 출력되지 않도록 주의하십시오. 이 워크어라운드를 사용할 때, 깃허브는 로그에 출력된 시크릿을 수정하지 않습니다. :::

1. 다음의 커맨드를 터미널에서 실행시켜 my_secret.json 파일을 gpg와 AES256 암호 알고리즘을 사용하여 암호화하십시오.#

$ gpg --symmetric --cipher-algo AES256 my_secret.json

2. 패스 프레이즈를 입력하라는 메세지가 표시됩니다. 패스프레이즈를 값으로 사용하는 깃허브에서 새 시크릿을 작성해야하므로, 패스 프레이즈를 기억해야합니다.#

3. 레포지토리에 패스프레이즈를 저장하기 위한 새 시크릿을 생성합니다.#

예를들면, LARGE_SECRET_PASSPHRASE라는 이름의 시크릿을 생성하고, 값을 윗단계에서 선택했던 패스 프레이즈로 설정합니다.

4. 암호화된 파일을 레포지토리에 복사하여 커밋합니다.#

이 예시에서는 my_secret_json.gpg가 암호화된 파일이다.

5. 패스워드를 해독하기 위해 쉘 스크립트를 생성합니다. 다음 파일을 decrypt_secret.sh로 저장합니다.#

# !/bin/sh
# 파일 디크립트하기
mkdir $HOME/serets
# --batch 하여 인터렉티브 커맨드를 막고 --yes 로 모든 질문에 yes로 대답하여 긴 초기화작업 생략하기
gpg --quiet --batch --yes --decrypt --passphrase="$LARGE_SECRET_PASSPHRASE" \
--output $HOME/secrets/my_secret.json my_secret.json.gpg

6. 쉘 스크립트가 실행가능한지 레포지토리에 체킹되기 전에 확인합니다.#

$ chmod +x decrypt_secret.sh
$ git add decrypt_secret.sh
$ git commit -m "Add new decryption script"
$ git push

워크플로우에서 step을 사용하여 쉘 스크립트를 부르고 시크릿을 해독합니다.#

워크플로우가 실행되고 있는 가상환경에서 레포지토리의 복사본을 소유하려면, actions/checkout 액션을 사용할 필요가 있습니다. 상대적인 레포지토리의 루트위치에서 run 커맨드로 쉘스크립트를 참조하세요.

name: Workflows with large secrets
on: push
jobs:
my-job:
name: My Job
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- name: Decrypt large secret
run: ./.github/scripts/decrypt_secret.sh
env:
LARGE_SECRET_PASSPHRASE: $
# 이 커맨드는 출력된 시크릿을 보여주는 예시일 뿐입니다.
# 시크릿의 출력문을 제거했는지 확인해주세요.
# 깃허브는 이 워크어라운드에서 사용하는 시크릿은 숨기지 않습니다.
- name: Test printing your secret (Remove this step in production)
run: cat $HOME/secrets/my_secret.json