スクリプトはcloud-init
秘密を含むように環境変数の値を設定する必要があります。
秘密がログに印刷さ
PASS
れるのを防ぐために、次の特定の構文を変更できますか?PSS
cloud-init
現在のコード:
以下は、セキュリティ秘密がログファイルに書き込まれるようにするcloud-initスクリプトの一部の例です。
export PASS=$PSS
echo "export PASS='$PSS'" >> /etc/environment
echo "export PASS='$PSS'" >> /etc/bashrc
echo "export PASS='$PSS'" >> /etc/profile
質問:
問題は、上記の現在のコードが変数に含まれる明示的な値をcloud-initログに出力することです。言い換えれば、現在の秘密を保護する唯一の方法は、ログをロックし、秘密の循環に対してできるだけ警戒することです。
私たちに必要なもの:
機密情報が出力およびログに印刷されるのを防ぐためのLinuxの基本的な方法はありますか?
私たちはツールやクラウドにこだわらないようにしています。これは、パイプラインツールの秘密の難読化機能に依存することを避け、AWS、Azure、または他のクラウドプロバイダで実行されている場合でも秘密を隠すことができることを意味します。私たちはこの問題に移植可能でLinux/bashに拘束されないソリューションを望んでいました。
純粋な RHEL だけでなく、Amazon Linux 2 や CentOS など、すべての Linux インスタンスに RHEL ベースのイメージを使用します。
コメントへの返信
@falcajr
問題によってcloud-initスクリプトが起動し、#!/bin/bash
スクリプトに問題があるかどうかにかかわらず問題が解決します。set -e
私たちが見る秘密ログは、cloud initスクリプトが実行されたときのコンソール出力です。間違いなくすでにどこかに保存されているので、独自の自動化システムに別々に保存する必要があります。 OPにはLinuxベースのソリューションが必要なので、ターゲットがどこにあるかは問題ではありません。たとえば、関数がある場合は、obscureFromOutput()
有効な構文で構成された疑似コードの代わりに、次のようなものを要求します。
echo "export PASS='obscureFromOutput($PSS)'" >> /etc/environment
@Isaac
コメントによると、PSS
cloud-initスクリプトの入力変数として受け取られます。PSS
私たちは他のツールに切り替えてもうまく機能するLinuxベースのソリューションが欲しいので、現在のパッカーが入力変数を送信するツールであることは重要ではないと思います。この問題に対する具体的な解決策がある場合、このOPは特定の解決策を要求します。ARM templates
cloud formation
@falcojr
その後、各コマンドを次のように作成する2番目の提案を試しましたが、秘密はまだパッカーのコマンドライン出力に表示され、ログにプッシュされました。
echo "export PASS='$PSS'" >> /etc/environment &> /dev/null
正しい構文を使用していますか?私が試すことができる他のものがありますか?
答え1
ファイルに静的に配置するのではなく、コード内でAWS Secrets Managerに保存して検索できますか?サーバーが起動時に権限を取得し、変数に保存し、実行中に使用できるようにインスタンス構成ファイルに権限を追加できます。
答え2
スクリプトにカプセル化できませんか?
私が理解したところによると、問題は、Amazonが各行をログに反映し、ログに記録する前に環境変数を拡張することです。
スクリプトでラップする場合は、環境変数を拡張する前に強制的にログを記録する必要があります。
まだテストしていません(電話で入力中)。
sh -c "
echo \"export PASS='\$PSS'\" >> /etc/environment
echo \"export PASS='\$PSS'\" >> /etc/bashrc
echo \"export PASS='\$PSS'\" >> /etc/profile
"
答え3
スクリプトに1つある場合は、set -x
次のようにトリックを実行できます。
# Turn off tracing before any commands with a secret in them.
set +x
export PASS=$PSS
echo "export PASS='$PSS'" >> /etc/environment
echo "export PASS='$PSS'" >> /etc/bashrc
echo "export PASS='$PSS'" >> /etc/profile
# Turn tracing back on after.
set -x
~によると文書:
-x
拡張後および実行前の引数または関連する単語のリストとともに、単純なコマンド、
for
コマンド、case
コマンド、コマンド、および算術コマンドのトレースを印刷します。select
変数for
の値PS4
が拡張され、結果の値がコマンドおよび拡張引数の前に印刷されます。
編集:フレーズと書式。