【问题标题】:cloudformation/user data...pass OS user password without echoing to logscloudformation/用户数据...传递操作系统用户密码而不回显到日志
【发布时间】:2016-01-04 21:58:52
【问题描述】:

所以我想弄清楚如何在密码从 cloudformation 传递到操作系统后不显示我的密码。所以首先我在我的 cloudformation 脚本上使用下面,我输入的密码是“NoEcho”...

“DBPASS”:{ “无回声”:“真”, "Description" : "oracle 用户密码", “类型”:“字符串”, “最小长度”:“1”, “最大长度”:“20” },

然后在我的云结构的用户数据部分,我在下面为 oracle 用户设置密码。但问题是用户被回显到 boot.log/cloud-init.log 所以密码是可见的......我试图隐藏密码,所以它在日志中看不到。

"DBPASS=", { “参考”:“DBPASS” }, "\n",

"echo -e \"$DBPASS\n$DBPASS\" | passwd $oracle\n",

然后我正在考虑做类似下面的事情,但不确定如何将“DBPASS”变量传递给输入两次..

stty -echo 读取 DBPASS stty回声

我的目标是为 oracle 用户设置密码而不回显到日志...

【问题讨论】:

  • 添加更多细节将有助于该问题的读者为您提供帮助。我得到了什么:听起来 DBPASS 是 cloudformation 模板的参数。听起来您也正在使用模板的 cloudinit 部分中的 DBPASS 参数来配置您稍后将使用的用户 oracle。您是否尝试过将 STDOUT 和 STDERR 从该特定命令重定向到 /dev/null ?
  • @Mircea 是的,我已经尝试将 STDOUT 设置为 /dev/null 用于 ""DBPASS=", { "Ref": "DBPASS" }, "\n"," 部分,但我可以设置为 oracle 用户设置密码我必须使用 echo -e 命令...直到,除非有其他方法
  • 您能分享您看到的实际模板和日志吗? (明明去掉密码)

标签: linux amazon-web-services amazon-cloudformation


【解决方案1】:

如果您需要保护敏感信息不被从您的 EC2 实例中读取,那么您根本不应该将它放在您的用户数据启动脚本中,不管它是否被存储为Cloud-initdefault log output 的一部分,因为用户数据脚本作为instance metadata 的一部分仍然是可读的。

请参阅 EC2 文档的 Instance Metadata and User Data 部分中的此重要注释:

重要

虽然您只能从实例本身访问实例元数据和用户数据,但这些数据不受加密方法的保护。任何可以访问该实例的人都可以查看其元数据。因此,您应该采取适当的预防措施来保护敏感数据(例如长期存在的加密密钥)。您不应将敏感数据(例如密码)存储为用户数据。

作为敏感数据的一种替代方法,您可以将内容上传到私有 S3 存储桶,然后使用您的用户数据脚本中的 aws s3 cp 将其下载到 EC2 实例。有关此方法的更多详细信息,请参阅问题的my answerHow can I (securely) download a private S3 asset onto a new EC2 instance with cloudinit?

【讨论】:

    【解决方案2】:

    您可以从命令行将数据库凭据作为参数传递。您需要在启动 Cloudformation 堆栈时传递这些凭据,但在任何地方都看不到。看看这个templatewhere DB 参数是从参数中提供的('default' 没有在参数中设置。所以,你必须在启动你的 cloudformation 堆栈时传递它们)

    【讨论】:

      猜你喜欢
      • 2023-03-29
      • 1970-01-01
      • 2015-01-16
      • 2016-03-24
      • 2018-11-17
      • 1970-01-01
      • 2013-07-07
      • 2011-11-14
      • 2020-02-15
      相关资源
      最近更新 更多