パスワードや、秘密鍵など、平文でソース管理したくないセンシティブなデータをKMSで暗号化しておくことで、Cloud Buildのビルドタスク中に復号化して利用できる。
以下、Cloud KMS で暗号化する方法を簡単に紹介する。
質問・訂正・改善・苦情・ご意見あれば、コメントにてよろしくお願いします。
暗号化の流れ
事前準備:
- アカウント認証・対象プロジェクトセット(こちら参照)
- APIの有効化
- keyringの作成
- keyの作成
事前準備ができたら:
- 任意のkeyを使ってファイル(またはバイナリ)を暗号化
APIを有効化する
- Google Cloud KMS API
いつもgcpのconsole上でポチポチしてるけど、下記のようにもできるみたい。
# APIを探す
gcloud services list --available | grep kms
=> cloudkms.googleapis.com Cloud Key Management Service (KMS) API
# APIを有効化する
gcloud services enable cloudkms.googleapis.com
=> Operation "operations/acf.326e9d96-1132-40e0-986c-7e3a0917ef12" finished successfully.
Keyrings を作成する
keyのグルーピングに使う模様。文字通り鍵を束ねるキーリング。
locationを指定して作成。
生成
gcloud kms keyrings create keyringname --location global
一覧表示
gcloud kms keyrings list --location global
=> NAME
projects/projectname/locations/global/keyRings/keyringname
Key を作成する
keyring、locationを指定して作成。
生成
gcloud kms keys create keyname --purpose encryption --location global --keyring default
必須オプション
--purpose {encryption | asymmetric-encription | asymmetric-signing}
- encryption = 対称鍵
- asymmetric-encription = 非対称鍵(暗号化用)
- asymmetric-signing = 非対称鍵(署名用)
一覧表示
gcloud kms keys list --location global --keyring keyringname
=>NAME PURPOSE LABELS PRIMARY_ID PRIMARY_STATE
projects/projectname/locations/global/keyRings/keyringname/cryptoKeys/keyname ENCRYPT_DECRYPT 1 ENABLED
ファイルの暗号化
keyが作成できたら、そのkeyを使ってファイルの暗号化ができる。
暗号化
# 暗号化対象のファイルを用意
echo -n "sample text" >> sample.txt
# 暗号化
gcloud kms encrypt --location global \
--keyring keyringname --key keyname \
--plaintext-file sample.txt \
--ciphertext-file sample.txt.encrypted
location, keyring, key, plaintext-file(暗号化する元ファイル), ciphertext-file(暗号化したファイルの出力先) を指定して暗号化する。
cat sample.txt.encrypted
=> $<��~F�ڴ/jS�E�����N��*gɢR�c4TNF�L��Qao�S1emrt(�]��6���l}q�v��f�q0yQ�?i�^
# ↑正しく暗号化できている
入出力について
plaintext-file、 ciphertext-file は 『-』 を指定することで標準入力と出力につなぐことができる
cat sample.txt | gcloud kms encrypt --location global \
> --keyring default --key keypassword \
> --plaintext-file - \
> --ciphertext-file -
=>$<��~���)�Ɇ���,��O.�/���9NEd��b4TNFҕ0���6��F�$'���?>��u�r��*����}��9$��,&GHR
で、暗号化したファイルをどう使うの?
は、別途ビルドタスクの記事をご参照ください。