次の2行のbashコードは、RHEL8を実行しているAzure VMのcloud-initスクリプトで秘密を抽出します.ただし、これらの2行のそれぞれには、世界中に見えるようにクラウド初期化ログに秘密を印刷する意図しない副作用があります。
秘密がログに印刷されないようにするには、次の2行で具体的に何を変更する必要がありますか?
myVar=$(az keyvault secret show --name "mySecretsFile" --vault-name "$VAULT_NAME" --query "value")
echo "$myVar" | base64 --decode --ignore-garbage >>/home/username/somefoldername/keys.yaml
上記の2行のログは次のとおりです。ここでは、公開フォーラムの実際の秘密を編集します。実際のログでは、秘密は2回印刷されます。
+ myVar='"really-long-alpha-numeric-secret-redacted-for-stack-exchange"'
+ echo '"really-long-alpha-numeric-secret-redacted-for-stack-exchange"'
これはおそらく、ログ内の特定の種類のアイテムの印刷を抑制する方法に関する簡単なbashの質問です。
答え1
最も高速で簡単な解決策は、おそらく親set +x
スクリプトで設定されているように見えるシェルトレースオプションを無効にすることです。
最終的により良い解決策はset -x
。これらのスクリプトをテストしてデバッグした後、このような追跡オプションはもはやset -x
役に立ちません。この例に示すように、重要な資格情報やその他のデータを誤って公開して有害になる可能性があります。
クラウドサーバーのユーザーデータから呼び出されるスクリプトと、cloud-initで実行される親/子スクリプトを作成しました。私のスクリプトの上部付近にはトレースを有効にする行がありますが、ソースコードストアにチェックインされているバージョンには常にその行がコメントアウトされています。 #set -x
フィールドのトラブルシューティングのためにコメントを解除することはできますが、デフォルトではコメントを解除しません。