sops를 사용하여 Google App Engine 환경 변수 값을 안전하게 설정하는 방법

Google App Engine을 위한 애플리케이션 설계이 설정 파일을 yaml로 써야 합니다.
API Key 등 창고에 직접 제출하지 않으려는 것과 같은 환경 변수도 기재돼 있는데 당연히 명문으로 직접 쓰고 싶지 않다.
왜냐하면 우리 팀은 sops를 이용해서 그 부근의 소개를 해결하고 있기 때문이다.

이른바 sops


https://github.com/mozilla/sops
sops는 AWS KMS와 GCP KMS가 관리하는 암호 키로 임의의 파일을 암호화하고 복호화할 수 있는 명령행 소프트웨어다.
우리 팀은 주로 GCP를 사용하기 때문에 아래의 예도 기본적으로 GCP KMS를 사용하는 것을 전제로 쓴 것이다.(단, AWS를 사용하더라도 프로그램 자체는 거의 변하지 않는다.)

절차.


app.yaml에서 암호화하고 싶은 환경 변수의 설정 파일 잘라내기


app.yaml은 includes의 지시성을 사용하여 다른 파일에 쓴 내용을 읽을 수 있습니다.includes에 관해서는 구 버전의 문서에만 기재되지만 GAE Standard의 go1.11〜go1.14. nodejs12도 사용할 수 있는지 확인할 수 있습니다.
https://cloud.google.com/appengine/docs/standard/python/config/appref
이것includes을 사용하여 다음과 같이 설정합니다.
app.yaml(은닉할 필요가 없는 값은 더 잘 쓴다)
runtime: go114
env_variables:
  DB_HOST: /cloudsql/PROJECT_ID:asia-northeast1:INSATNCE_NAME
  DB_NAME: dbname
includes:
  - secret.yaml
secret.yaml(숨기고 싶은 값 여기 있음)
env_variables:
    DB_USER: root
    DB_PASSWORD: password

secret.sops로 암호화


그리고 sops secret으로yaml을 암호화하면 됩니다.
sops에 대한 설정 방법과 사용 방법은 아래 README에 상세하게 기재되어 있으니 참조하십시오.
2.2 Encrypting using GCP KMS
암호화할 때 KMS ResourceID를 명령줄 옵션으로 하나씩 지정하는 것은 번거롭기 때문에 .sops.yaml 만들어 제출하는 것을 권장합니다.
.sops.yaml
creation_rules:
  - gcp_kms: projects/my-project/locations/global/keyRings/sops/cryptoKeys/sops-key # KMS ResourceID を記載
설정할 수 있다면 다음과 같은 방식으로 암호화하여 저장한다.(당연히 원래의 시크릿.yaml을 삭제해야 한다.gitignore에 넣어도 잊지 마라)
다 됐습니다.enc.yaml은 GCP KMS에서 생성한 암호화 키로 암호화됩니다.
즉, 내용을 보려면 권한을 부여받은 계정과 서비스 계정이 필요하며, 이 암호 키로 복호화할 수 있습니다.

GiitHub Action으로 설계


GiitHub Actions의 yaml 중에서 필요한 부분만 선택한다면 다음과 같습니다.
다만 일반 다운로드 sops의 2진법은 gcloud app deploy 앞에서 디코딩되고 있다.간단하네.GOOGLE_APPLICATION_CREDENTIALS에서 지정한 서비스 계정에 해당하는 암호 키를 사용하는 복호화 권한을 부여하는 것을 잊지 마십시오.
$ sops -e secret.yaml > secret.enc.yaml
지금 찾아봤는데 sops가 설치된 Actionhttps://github.com/mdgreenwald/mozilla-sops-action이 이걸 쓸 수 있을 것 같아요.

좋은 웹페이지 즐겨찾기