みなさんはAWSのCodeシリーズは使っていますか?
特にCodeBuildは時間指定のアラームで呼び出したり、CodePipelineから実行したり様々な用途で使用できて便利ですよね。
今回は、ちょっとだけハマった・・・というか疑問みたいなことがあったので検証してみました。
その結果を共有してみたいと思います。
見出し
機密情報はCodeBuildのログに出力されない
機密情報を保護するために、CodeBuild ログでは次の情報は非表示になっています。 • AWS アクセスキー ID詳細については、AWS Identity and Access Management ユーザーガイド の「IAM ユーザーのアクセスキーの管理」を参照してください。 • パラメータストアを使用して指定された文字列。詳細については、『Amazon EC2 Systems Manager ユーザーガイド』の「Systems Manager パラメータストア」および「Systems Manager パラメータストアコンソールのチュートリアル」を参照してください。 • AWS Secrets Manager を使用して指定された文字列。
昔のドキュメントに書かれていたのですが、基本的にCodeBuildではパラメータストアやシークレットマネージャーから取得した機密情報はログ出力されません。
これについて勘違いしていたことがあったのが今回の疑問の発端です。
◆今回の疑問
パラメータストアやシークレットマネージャーの情報を環境変数で受け取って使用していた。機密情報が保存されている環境変数の内容が隠されてしまうのは分かっているが、環境変数以外の文字列も***(アスタリスク)で隠されてしまうものがある。
ということで、これについて軽く検証をしてみました。
検証:パラメータストアに機密情報を登録
検証のためにパラメータストアへ「Test」というキーに対して「hogehoge」という機密情報を保存しました。
検証:単純なCodeBuildの実行
続いて、echoコマンドで「hogehogepiyopiyo」を出力するだけのCodeBuildプロジェクトを作成しました。
この時点では環境変数の設定をしておらず、パラメータストアから値を受け取っていません。
この状態でBuildを実行すると、想定どおり「hogehogepiyopiyo」することが分かります。
ここまでは意図していた挙動です。
検証:機密情報を渡す
続いて、先ほどのプロジェクトに環境変数として「Test」というパラメータを渡して実行してみます。
Buildspecの中身は変更していません。
すると、単純なechoコマンドを実行しているにも関わらず「***piyopiyo」という表示になってしまいます。
CodeBuildは環境変数で受け取ったパラメータストアやSecretManagerなどの機密情報の内容と合致する全ての文字列を「***」に変換していることが分かります。
何を勘違いしていたか
ここまで読んで、「いや、当たり前でしょう」と思う人の方が多いかと思います。
なので私が何を勘違いしてしまったのかについて解説をしておきます(笑)
例えば、環境変数からTestという名前で機密情報を受け取った時に、
1, echo ${Test}
2, echo “hogehogepiyopiyo”
を実行すると、1番目の出力は「***」で隠されて、2番目の出力はそのまま表示されると思い込んでいました。
今考えるとなるほどと納得できる内容ですね。
そもそも文字列を全部置換する方法じゃないと、コマンドやスクリプトなどの標準出力から隠したい情報が漏れてしまう可能性もあります。
もちろん表示上が「***」になっているだけで、内部的にはきちんとした値で解釈されていました。
まとめると
CodeBuildでは、読み込んだ機密情報と「合致する文字列全て」が「***」に置換される。
「***」表示は出力ログ上のものなので、実際にはきちんとした値で解釈されている。
CodeBuildはすごい!
以上!!
コメントを残す