ビジネスとIT活用に役立つブログBlog


GCPのKMSを利用してファイルを暗号化する

この記事をシェアする:

Kubernetes(以下、K8s)を利用してサービスを運営していく上で、アーティスではGitOpsを取り入れています。

ここでは、GitOpsについて詳しく触れませんが、概要は、k8sのmanifestをCLIから適用せずに、Gitを通してパイプライン上から自動的にクラスタに適用させます。

その上で問題になるのが、機密情報を含んだSecretsの取り扱いです。

K8sで機密情報を扱うには、Secretsオブジェクトを利用することが基本となります。
しかし、manifest上ではBase64エンコードされているだけなので、下記の通り、Gitにコミットすると機密情報が漏洩します。

If you configure the secret through a manifest (JSON or YAML) file which has the secret data encoded as base64, sharing this file or checking it in to a source repository means the secret is compromised. Base64 encoding is not an encryption method and is considered the same as plain text.Secrets - Kubernetes

GitOpsで自動化するためには、機密情報をGitにコミットする必要があるので、なんらかの方法で暗号化する必要があります。
そこで、今回はGCPで提供されているCloud KMS(Key Management Service)を利用して、機密ファイルを暗号化してみます。

Cloud KMSとはなんのサービスなのか

ファイルを暗号化するときに使用する対称鍵をクラウド上(GCP)に保管できます。 つまり、KMSで管理されている鍵にアクセスできる状態だと、gcloudコマンドから鍵を指定して、一発でファイルを暗号化できます。

又、鍵はクラウド上に保管されているため、ローカルにダウンロードして紛失したり漏洩するリスクが低下します。 対称鍵はその性質上、鍵を持っている人が増えれば増えるほど、漏洩するリスクが高まるので、複数人でも低リスクで鍵が使えます。(鍵を使うための権限の管理はGCPに統合されています)

その他にも、鍵のローテーションや、鍵の遅延的な破棄など、運用面でも非常に便利な機能がそろっています。

KMSで対称鍵を作る

では、早速KMSで対称鍵を作っていきます。

以下のコマンドは、gcloudコマンドがインストールされている前提です。 インストールが終わってない場合は、下記のリンクを参考にしてインストールしてください。

対称鍵を作るには、キーリングを先に作る必要があります。
今回は、asia-northeast1のみで利用する予定なので、locationにasia-northeast1を指定しました。

キーリングの命名が悩ましいですが、サービスやロールにあった適度な粒度の命名をしたいところです。

キーリングが作成されていることが確認できます。


次に、対称鍵を作成します。

KEYRING_NAMEに、先程作成したキーリング名を指定します。
purposeは、勝手に指定するのではなく、「asymmetric-encryption, asymmetric-signing, encryption」の中から1つ指定する必要があります。
今回は、対称鍵での暗号化なので、encryptionを指定します。


キーリング内に、対称鍵が作成されたことを確認できます。

ファイルを暗号化、復号化する

ここまでで、暗号化するための準備が完了したので、実際にファイルを暗号化してみます。

今回はsecret.yamlを暗号化して、secret.yaml.encに書き出します。 暗号化されたファイルの内容を確認すると、暗号化されている事が確認できます。


次は、暗号化したファイルを復号化してみます。

復号化されたファイルの内容を確認すると、暗号化前の内容に戻っていることが確認できます。

まとめ

Cloud KMSで対称鍵を作って、ファイルを暗号化、復号化することができました。
これで、Gitに機密ファイルをコミットすることができるので、GitOpsにて自動的にSecretを作成することができます。

GCPには、さまざまなサービスが用意されているので、それぞれのサービスを使うために多少の学習が必要になります。
Cloud KMSのように非常に便利で、生産性が上がり、リスクが下がるサービスが多いので、学習にコストをかける十分な理由があります。

補遺

  • なぜ、Kubesecを使わなかったの?

アーティスでは、CI/CDにCloud Buildを利用していて、Kubesecのカスタムドライバを見つけることができなかったので、直接KMSを利用しています。

The following two tabs change content below.
アーティス

アーティス

創造性を最大限に発揮するとともに、インターネットに代表されるITを活用し、みんなの生活が便利で、豊かで、楽しいものになるようなサービスやコンテンツを考え、創り出し提供しています。
この記事のカテゴリ:

SNSで最新の情報を
受け取ることができます!