본문 바로가기

그 외

[Travis CI] yml 및 secret 파일 암호화하는 방법

Travis CI 사용 시 암호화된 yml 파일로 빌드하기

Travis CI 를 Github 를 이용하여 구성할 때 중요한 것이 중요한 정보가 된 yml 파일을 올리는 것입니다.

DB Connection 정보나, AWS Secrect key, Access Key 등 암호 정보가 포함된 파일이 노출된다면 큰 문제가 발생할 수 있기 때문입니다.

하지만, CI 를 구성하기 위해선 이런 정보가 없다면 Build 가 실패하게 됩니다.

이러한 CI 를 구성하기 위해 Travis 에서 제공하는 파일 암호화를 이용하여 구성하는 방법을 알아보겠습니다.

 

 

Travis CI CLC 구성

우선 Travis CI 의 CLC(Command Line Client) 를 이용하기 위해 아래 커맨드를 입력하여 설치합니다. (Mac OS 기준)

$ gem install travis
    

그 후 Travis CI 에 로그인을 해줍니다.

travis login --com
    

만약, travis-ci.org 를 사용하고 있다면 --org 옵션을 사용해주셔야 합니다.

 

 

 

Automated Encryption 을 위한 사전 구성

 

암호화된 Travis CI 를 구성하기 위해선 다음과 같은 조건이 필요합니다.
  1. 해당 repository 가 Travis CI 에 set up 되어 있어야 합니다.
  2. 로그인된 Travis CI CLC 의 version 이 1.7.0 이상이여야 합니다.
  3. 작업하고자하는 repository 가 local 에 clone 이나 copy 가 되어 terminal 에서 작업할 수 있어야 합니다.

 

 

 

파일 암호화하기

위의 조건을 성립시켰다면 아래의 명령어로 암호화를 진행합니다.

$ travis encrypt-file super_secret.yml
    

 

위의 명령어를 실행하면 해당 파일을 AES256 을 이용하여 암호화하여 .enc 파일로 생성해줍니다.

그 후 다음과 같은 내용이 등장하게 됩니다.

openssl aes-256-cbc -K $encrypted_0a6446eb3ae3_key -iv $encrypted_0a6446eb3ae3_iv -in super_secret.txt.enc -out super_secret.txt -d
    

 

이 내용을 해당 repository 의 .travis.yml 에 다음과 같이 추가해주시면 됩니다.

before_install:
     - openssl aes-256-cbc -K $encrypted_0a6446eb3ae3_key -iv $encrypted_0a6446eb3ae3_iv -in ./super_secret.txt.enc -out ./super_secret.txt -d
    

 

그 후, .enc 파일과 .travis.yml 파일을 commit 후 push 해주면 travis 가 build 시 해당 파일을 복호화하여 실행하게 됩니다.

주의 - 절대 암호화 대상인 yml 파일을 commit 해서는 안됩니다.

일반적인 경우는 이렇게 끝나지만 저같은 경우 다음과 같은 오류가 발생하였습니다.

 

 

 

iv undefined 오류

해당 파일을 commit 후 push 하여 CI 가 성공될거라고 생각했지만, 예상과 다르게 iv undefined 라는 오류와 함께 실패하였습니다.

구글링해본 결과 다음과 같은 내용이 있었습니다.

Are you by any chance using 2FA on GitHub? I have to use travis login --pro with --github-token to get this to work. I don't know if this is a problem, but may be.
    

 

즉, Github 의 인증이 Two-factor authentication 설정이 되어 있는 경우 단순 로그인으로는 github 에 연결되어 있는 복호화하기 위한 iv 값을 읽지 못한다는 것이었습니다.

따라서, travis login 을 --pro 로 해야된 다는 것이었습니다.

따라서, 위에서 설명한 Travis CI CLC 구성 시

travis login --com
    

이 부분을

travis login --pro
    

로 입력하여 아이디 및 Token 값을 패스워드로 입력하여 로그인하게되면 해결이 됩니다.

     

 

 

결론

Travis 로 CI 를 구성할 때 secret key 를 관리하기 위한 방법을 알아봤습니다.

만약, DB 접속정보나 AWS 관련 정보를 암호화되지 않은 채 노출된다면 비용 등 큰 문제가 발생할 수 있기 때문에 주의가 필요합니다.

실제로, 암호화되지 않은 S3 bucket key 를 github 에 올렸다가 AWS 에서 수차례 메일이 온 경험이 있습니다.

결국 key 를 파기하고 재발행하여 해결하였지만, 만약 인지하지 못했다면 악용이 될 수 있으니 주의가 필요합니다.