워크플로우 파일은 Github Repository에 push되기에 아이디, 비밀번호와 같은 민감한 정보들을 그대로 사용할 시 위험하다. 그래서 Github Actions에서는 이러한 민감 정보를 저장할 Actions Secrets을 제공한다. 이 Actions Secrets를 저장하는 방법과 secrets Context를 사용하여 사용하는 방법을 알아보자.
Actions Secrets는 레포지토리 설정 혹은 Organization 설정에서 다룰 수 있다. 전자는 해당 레포지토리에만 적용되고, 후자는 Organization의 모든 레포지토리에 대해 적용된다. 설정의 좌측 탭을 찾아보면, Secrets
란이 있으며 이를 클릭한 뒤 Actions 탭을 선택해주자.
위 페이지에서 우측 상단의 New repository secret
을 클릭하여 새 Secret을 추가할 수 있다.
위처럼 Secret의 이름과 값을 지정할 수 있다. 한번 값을 저장하고 나면, 이후에는 해당 값을 확인할 방법이 없으니 주의하자.
위처럼 Secret이 추가된 것을 확인할 수 있다. 저장된 Secret은 값을 업데이트하거나 삭제할 수만 있으며, 값을 조회하는 것을 불가능하다.
이전 섹션에서 저장한 Actions Secret을 사용하려면 secrets Context를 이용하면 된다. secrets Context은 다음 속성으로 구성되어 있다.
속성명 | 설명 |
---|---|
secrets | secrets 변수들을 담고있는 오브젝트이다. |
secrets.<secret_name> ㅤㅤ | 특정 secret의 값이다. |
매우 간단한 구성이다. 이전 섹션에서 저장했던 SLACK_WEBHOOK_URL
Secret을 가져오고 싶다면, secrets.SLACK_WEBHOOK_URL
으로 가져올 수 있다.
- name: Send JSON data to Slack
uses: slackapi/slack-github-action@v1.18.0
with:
payload: |
{
"key": "value",
"foo": "bar"
}
env:
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
위는 secrets context를 사용한 예제 코드이다.
secrets.GITHUB_TOKEN
GITHUB_TOKEN
는 워크플로우가 실행될 때 자동으로 만들어지는 특별한 Secret이다. GITHUB_TOKEN
은 Access Token으로 사용되며, 워크플로우가 실행될 때 필요한 권한을 얻을 수 있게 해준다. 또한, 이 토큰의 권한은 워크플로우가 포함된 레포지토리에만 한정된다. 자세한 정보는 다음 문서를 참고하자.
Github Actions에서 워크플로우를 실행하면, 위처럼 어떤 값이 사용되었는지 로그를 볼 수 있다. 그렇다면 Secrets을 사용한 경우에도 위처럼 로그를 살펴보면, 정보가 누출될 수 있지 않을까라는 생각을 할 수 있다. 그러나 Github Actions에서는 Secrets값을 마스킹 처리해주기에 안전하다. 몇가지 예시를 보자.
- run: echo ${{ secrets.SLACK_WEBHOOK_URL }}
# > RUN echo **
# ***
위처럼 secret 값을 그대로 사용한 경우, 명령어와 출력결과 모두 마스킹처리된 것을 볼 수 있다.
env:
SLACK: ${{ secrets.SLACK_WEBHOOK_URL }}
- run: echo ${{ env.SLACK }}
# > RUN echo **
# ***
만약 Secret 값을 env처럼 다른 Context에 담아도 마스킹처리를 해준다.
- run: |
test=${{ secrets.SLACK_WEBHOOK_URL }}
echo "$test"
# > test=***
# > echo "$test"
# ***
- run: |
test1=${{ secrets.SLACK_WEBHOOK_URL }}
test2="test2"
echo "$test1$test2"
# > test1=***
# > test2="test2"
# > echo "$test1$test2"
# ***test2
심지어는 위처럼 run Step 내부에서 환경변수에 담아 출력하거나 아예 변형을 가하더라도 마스킹 처리를 해준다.
로그인 아이디, 비밀번호와 같은 중요한 정보들은 워크플로우 파일에 하드코딩하지말고 Secrets를 사용해서 안전하게 보관하자.