所以我试图弄清楚如何在从cloudformation传递到操作系统后不显示我的密码。所以首先我在我的cloudformation脚本中使用下面的" NoEcho"我输入的密码开始了......
" DBPASS" :{ " NOECHO" :" true", "说明" :" oracle用户的密码", "类型" :" String", "&MINLENGTH#34; :" 1", "的MaxLength" :" 20" },
然后在我的云形成的用户数据部分中,我在下面为oracle用户设置密码。但问题是用户回显到boot.log / cloud-init.log,所以密码是可见的......我试图隐藏密码,以便在日志中看不到。
" DBPASS =&#34 ;, { "参考":" DBPASS" }, " \ n",
" echo -e \" $ DBPASS \ n $ DBPASS \" | passwd $ oracle \ n",
然后我想做下面的事情,但不知道如何传入" DBPASS"变量输入两次..
stty -echo 阅读DBPASS stty echo我的目标是为oracle用户设置密码而不回显日志......
答案 0 :(得分:0)
如果您需要保护敏感信息不被EC2实例读取,那么您不应该将其放在用户数据启动脚本中 ,无论它是否作为Cloud-init default log output的一部分存储,因为用户数据脚本仍然可以作为{{3}的一部分阅读}。
请参阅EC2文档的instance metadata部分中的重要注意事项:
重要强>
虽然您只能从实例本身访问实例元数据和用户数据,但数据不受加密方法的保护。任何可以访问该实例的人都可以查看其元数据。因此,您应采取适当的预防措施来保护敏感数据(例如长期加密密钥)。您不应将敏感数据(如密码)存储为用户数据。
作为敏感数据的另一种替代方法,您可以将内容上传到专用S3存储桶,然后使用来自用户数据脚本的Instance Metadata and User Data将其下载到EC2实例。有关此方法的详细信息,请参阅问题aws s3 cp
my answer。
答案 1 :(得分:0)
您可以从命令行将数据库凭据作为参数传递。您需要在启动Cloudformation堆栈时传递这些凭据,但在任何地方都不会显示。查看此template,其中DB参数是从参数提供的('默认'未在参数中设置。因此,您必须在启动云形式堆栈时传递它们)