无意中将秘密打印到 cloud-init 日志中

无意中将秘密打印到 cloud-init 日志中

下面的两行 bash 代码将秘密提取到运行 RHEL8 的 Azure VM 的 cloud-init 脚本中。但是这两行中的每一行都有一个意想不到的副作用,即将秘密打印到云初始化日志中以供全世界查看。

为了防止他们将秘密打印到日志中,下面两行中必须具体更改什么?

myVar=$(az keyvault secret show --name "mySecretsFile" --vault-name "$VAULT_NAME" --query "value")
echo "$myVar" | base64 --decode --ignore-garbage >>/home/username/somefoldername/keys.yaml

上面两行的日志如下所示,不同之处在于我们在这里编辑了公共论坛的实际秘密。在实际日志中,秘密被打印两次:

+ myVar='"really-long-alpha-numeric-secret-redacted-for-stack-exchange"'
+ echo '"really-long-alpha-numeric-secret-redacted-for-stack-exchange"'

这可能是一个简单的 bash 问题,关于如何抑制在日志中打印某些类型的东西。

答案1

最快、最简单的解决方案可能是禁用set +x似乎已在父脚本中设置的 shell 跟踪选项。

最终更好的解决方案是删除set -x父脚本中的 。在测试和调试这些脚本后,诸如此类的跟踪选项set -x不再有帮助,并且如本示例所示,甚至可能因意外暴露敏感凭据或其他数据而有害。

我编写了从云服务器上的用户数据调用的脚本,以及在 cloud-init 下运行的父/子脚本。我的脚本在顶部附近有一行用于启用跟踪,但签入源代码存储库的版本始终注释掉该行: #set -x

可以取消注释以进行现场故障排除,但默认情况下不会取消注释。

相关内容