views4GCPのストレージサービスについてまとめてみた。システム開発本部所属です。KMSの鍵で暗号化された情報を扱う方法を紹介します。Functionsで外部サービスのIDやパスワードを扱う際の参考になればと思います。SchedulerもGAとなりました。Functionsでしたが、使い勝手がとても良くなりました。AWSのLambdaでPythonのコードを動かした経験がある方への間口が広がったように思いますが、Lambdaと同じ感覚で使おうとすると詰まってしまうポイントがまだまだあります。詰まるポイントの一つとして「認証情報」をどうやって扱えばよいの?というところがあります。Functionsのサービスアカウントに役割をつけて利用するのがベストプラクティスとなっています。MailgunなどGCP外のサービスを利用する際にはコード内でID/passwordやシークレットなどの認証情報を使わざるを得ない状況が発生します。このような場合、Lambdaでは下記どちらかの方法をとるのが一般的かと思います。経由で暗号化された認証情報を利用する。Functionsでは同様の機能が用意されておらず、同じことをやろうとすると利用者側での実装が必要となります。Functionsで認証情報をどう扱えばよいの?というところの一案について、本記事では下記フローでの処理例を紹介します。KMSはGCPの暗号鍵管理サービスです。KMSについては詳しくは扱いませんが、弊社のブログ記事でも紹介していますので「KMSって何よ?」と思われる方はまずご一読いただけますと幸いです。KMSで暗号化された情報を使ってみる!構成説明では、実際にやってみましょう。構成と処理の流れは下記図をご確認ください。ringは削除することができません。KMSを試される場合はテスト用のプロジェクトを作成して使用することをおすすめします。Functionsの環境変数に設定し、関数(Python)のコードから下記処理を行います。ringとKey(暗号鍵)を作成します。「ステータス」に緑のチェックマークが入って使用可能になっていれば作成終了です。Functionsの関数から、先ほど作成したKeyを使用するためのサービスアカウントを作成します。役割は下記2つを設定してください。KMSを使用して暗号化を行う方法として、下記2つを紹介いたします。KMSで平文(テキスト)を暗号化するとバイナリに変換されます。Functionsの環境変数として設定ができないため、HEX(16進数)もしくはbase64でエンコードされたテキストとして出力します。一般的にはbase64でエンコードする方法が使われると思いますが、16進数に変換するやり方も参考として紹介します。いう文字列を暗号化する例です。KMSのモジュールを導入してください。google-cloud-kmsPythonのサンプルコードは以下になります。KMSの鍵情報と暗号化したい文字列を設定してください。KMSのAPI経由で暗号化文字列を出力するコード。byte列に変換した文字列を暗号化。print("▼暗号化文字列(暗号化byte列→base64)→暗号対象文字列(plain):")print(raw_plain_str002)実行すると下記のように出力されます。KMSのクライアントは暗号化したい文字列をbytes型で渡す必要がある等々、ちょっとした癖がありますので使い方については下記リンクをご一読ください。Functionsでテストしてみましょう。下記内容で関数を作成します。場所と同じにしています。ring、Keyの情報を設定してください。textに変換して出力する。Functionsでテスト実行してみましょう。暗号化する前の文字列が表示されていたら成功です。「テスト」の項目から「関数をテスト」のボタンをクリック。アウトプットに「OK」が表示されて、ログに復号化された文字列(hogehoge)が表示されれば成功です。Functionsの環境変数にセットして利用する方法を紹介いたしました。本番環境で使用するには、鍵のローテーションや接続情報が更新された際の運用などいろいろな考慮が必要になるかと思いますが、Cloudのよいところは気軽に始められるところです。使ってみないとわからないことも多々ございますので、まずは最小構成で試してみていただき、ご利用の環境にあった構成を見つけていただければと思います。個人的には、このようなセキュリティに関する機能はサービス側で実装してほしいという思いがあります。GCPには新しいサービスばかりに目を向けるのではなく、既存サービスの機能向上やサービス間の連携をもっと頑張って欲しいところです。Platformのご利用について様々な技術支援を行っております。