본문 바로가기
[Developer]/Any

Github에서 Keystore를 Secret Key로 반영하기(feat. Android)

by 해피빈이 2021. 8. 14.

Photo by Jon Moore on Unsplash

 

일단, 기존에 keystore를 프로젝트 내부에서 파일로 보관하여 사용중인 상황이었다.

프로젝트 내에 keystore를 가지고 있었기 때문에, 이 파일이 보안에 취약한 상황이었고, 제거하기로 마음먹었다.

(물론 실제 프로젝트에서는 지난 커밋에 이미 파일이 들어있는 상황이기 때문에 여전히 취약한건 마찬가지일 것이다. 하지만 이 후에 신규 프로젝트 적용시 이 방법을 응용하면 도움이 될 것이기에 시도하기를 추천한다.)

 

또한 전제조건으로는 Android 빌드를 이미 gradle 명령 한번에 릴리즈 apk까지 생성될 수 있도록 한 상태이어야 한다.

 

아래의 방법은 윈도우를 기준으로 하였으며, 일부 부분을 제외하고는 OS와 무관하게 진행이 가능하다.

 

1. OpenSSL 설치

먼저 OpenSSL을 설치한다. 이유로는 base64 인코딩을 하기 위해서이다.

이것을 설치하는 방법은 다양하게 있다.

나의 경우에는 chocolatey를 이용하여 진행하였다.

choco라는 명령을 사용하여 패키지매니저의 역할로서 install을 수행하도록 하기 때문에 매우 쉬우므로 이 방법을 추천한다.

반드시 명령 프롬프트(cmd)를 띄울 땐, 관리자 모드로 띄워주어야 하며, 명령어는 다음과 같다.

choco install openssl

 

위와 같은 방법으로 설치를 하고 결과가 나온다면 잘 설치가 된 것이다.

 

그래서 실행을 해보니 이런 오류가 나온다.

그 이유는 현재 PATH에 반영된 것은 사실이지만, 창을 새로 열지 않고 같은 커맨드 윈도우 안에 있기 때문이다.

 

그래서 다시 새로운 명령 프롬프트를 띄우고 openssl을 입력하면 다음과 같이 오류가 나지 않는 것을 볼 수 있다.

 

2. keystore를 base64로 바꾸기

 

그러면 이제 바로 기존의 keystore를 base64로 인코딩해야 한다. base64 인코딩이란, 바이너리 데이터를 ASCII문자 범위의 텍스트 데이터로 바꿔주는 작업이라고 보면 된다. 그래서 저장될 파일의 확장자도 txt로 세팅하였다.

openssl base64 -in [키스토어 파일명] -out [저장될텍스트파일명]

 

이렇게 잘 진행되고나면, 아래와 같이 기존 파일에서 txt파일로 바뀌게 된다.

 

3. base64로 변환된 Keystore를 Github Secret에 저장하기

 

이제 생성된 txt파일을 저장하러 gitbub에 간다.

해당 프로젝트로 이동 후, Settings -> Secrets -> Actions로 이동하면, 오른쪽 상단에 New repository secret이라는 버튼이 있다.

그 버튼을 누르면 새로운 secret을 저장할 수 있다.

 

나의 경우에는 APP_KEYSTORE_BASE64라는 이름으로 저장하였다.

그리고 내용은 앞에서 생성한 txt파일을 그대로 복사하여 붙여넣으면 된다.

간단하다. 내용은 매우 길지만 모두 잘 들어가는 것을 알 수 있다.

 

4. Github Action에 반영하기

 

그렇게 저장하고 나서 기존에 있던 github action의 yml 파일로 이동한다.

해당 파일을 편집하여 열고 아래처럼 내용을 추가해준다.

- name: Generate Keystore file from Github Secrets
  run: |
    echo "$KEYSTORE" > ./keystore/keystore.b64
    base64 -d -i ./keystore/keystore.b64 > [원래 저장하고 있던 키스토어 파일명(경로포함)]
  env:
    KEYSTORE: ${{ secrets.APP_KEYSTORE_BASE64 }}

저장하면 대충 이런식일 것이다.

참고로 이 스크립트는 gradlew assembleRelease 혹은 apk빌드를 하기 직전에 진행되도록 생성해주면 된다.

 

그리고 원래 있던 파일은 아래처럼 이동하여 삭제해준다.

이 파일을 삭제하고 Github Secrets에서 생성하려는 것이 주 목적이었으니 말이다.

 

하지만 이 파일이 사라진다고 해당 디렉토리까지 사라지면 낭패를 볼 수 있으니, 해당 디렉토리에 .keep이라는 빈 파일을 하나 생성해 놓는다.

아래와 같은 방식으로 진행하면 된다.

 

여기까지 정상적으로 진행되었다면, 이제 Actions 탭에 가서 빌드를 돌려보자.

아래처럼 나왔다면 성공이다.

 

이 방법으로 앞으로는 keystore 저장없이 안전한 github 생활을 해보자.

반응형

댓글