下面的两行 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
可以取消注释以进行现场故障排除,但默认情况下不会取消注释。