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 를 구성하기 위해선 다음과 같은 조건이 필요합니다.
- 해당 repository 가 Travis CI 에 set up 되어 있어야 합니다.
- 로그인된 Travis CI CLC 의 version 이 1.7.0 이상이여야 합니다.
- 작업하고자하는 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 를 파기하고 재발행하여 해결하였지만, 만약 인지하지 못했다면 악용이 될 수 있으니 주의가 필요합니다.
'그 외' 카테고리의 다른 글
스타트업에서 대기업 계열서로 이직 후기(feat.F-lab) (1) | 2021.10.15 |
---|---|
2019년 회고 (0) | 2020.01.22 |
[HTTP] CORS(Cross-Origin Resource Sharing) 이란 (0) | 2020.01.14 |
[IntelliJ] IntelliJ 에서 Invalidate Cashe 했을 때 발생한 빌드문제 해결 (1) | 2019.10.28 |
[IntelliJ] Intellij Test Code 실행 시 Gradle 로 실행되는 문제 (0) | 2019.08.17 |