【问题标题】:AWS SSM Parameter Store: How can I edit multi-line "SecureString" values using the console?AWS SSM Parameter Store:如何使用控制台编辑多行“SecureString”值?
【发布时间】:2018-09-17 02:57:54
【问题描述】:

目前,我使用单个 SSM parameter 来存储一组由换行符分隔的属性,如下所示:

property1=value1
property2=value2
property3=value3

(我知道 4K 大小限制,没关系。)

这对于存储非敏感信息(如环境配置)的普通String 类型参数来说效果很好,但我也想使用SecureString 参数类型对机密执行类似操作。

问题是我无法在控制台中编辑参数值,因为它使用的 HTML 输入字段为 type="password",不处理换行符。

多行值适用于实际参数存储后端 - 我可以使用 SSM API 设置一个包含多行的值,并且它们也可以使用 EC2 CLI 正确读取。

但我无法使用控制台编辑它们。这是一个问题,因为使用 SecureString 参数的全部意义在于,我打算通过控制台编辑/查看这些机密的唯一位置(以便控制权限并审核访问)。

我可以实现一些基础架构变通方法(每个秘密一个参数,将秘密存储在 S3 或其他秘密存储服务等),但它们都有缺点 - 我只是想找出是否有办法使用控制台解决这个问题?

有什么办法可以解决这个问题并使用控制台编辑多行 SecureString 参数?
我可以用来告诉浏览器使用文本区域而不是“密码”类型字段的任何类型的浏览器解决方法或黑客攻击? 我正在使用 Chrome,但我很乐意通过使用其他浏览器或其他东西来解决这个问题(编辑机密非常少见,在控制台中查看多行值可以正常工作)。

编辑

发布此问题后,AWS 通知我有一个全新的“AWS Systems Manager”用户界面,但它仍然存在同样的问题 - 我在这个新用户界面上尝试了以下浏览器黑客攻击,但没有运气。

浏览器破解尝试 1 失败:我尝试打开浏览器控制台,运行 document.getElementById("Value").value = "value1\nvalue2",然后单击保存按钮,该按钮设置了我注入的值,但换行符被过滤掉了。

浏览器破解尝试 2 失败:我尝试使用浏览器检查器将元素更改为 TextArea,然后输入两行输入并单击保存,但这根本没有设置值。

【问题讨论】:

  • 我们在工作中所做的事情是输入类似property1=value1\nproperty2=value2\nproperty3=value3 的内容,然后在从 ssm 读取值后,将 \n 替换为实际的换行符。如果有更好的解决方案,我会很感兴趣

标签: html amazon-web-services ssm aws-ssm


【解决方案1】:

如果你愿意,你可以试试我的应用https://github.com/ledongthuc/awssecretsmanagerui

我尝试创建它以更轻松地更新多行值和二进制文件。希望对您的案例有所帮助。

【讨论】:

    【解决方案2】:

    最后,我决定这个问题的答案是“不要那样做”。当我试图让它发挥作用时,我并不想听到它。

    出于以下原因,您应该为每个密钥使用单独的 SSM 参数:

    • 能够在细粒度级别授予权限;例如您有一个用于调用您的服务的 API 密码,以及一个用于服务与数据库对话的数据库密码 - 如果您将它们存储在同一个密钥中,您就不能只授予对 API 密码的访问权限。
    • 能够单独跟踪密钥访问 - SSM 访问日志只能告诉您目标机器/用户当时访问了 SSM 参数,它无法告诉您访问了哪个密钥
    • 能够使用单独的 KMS 密钥进行加密

    请注意,您一次最多只能请求 10 个 SSM 参数。

    【讨论】:

      【解决方案3】:

      https://docs.aws.amazon.com/cli/latest/userguide/cli-using-param.html#cli-using-param-file,我了解到您可以将文件作为参数传递给--value 参数。所以如果你的文件名为secrets.properties,你可以这样做:

      aws ssm put-parameter --type SecureString --name secrets --value file://secrets.properties
      

      【讨论】:

      • 是的,但我使用的是控制台。
      • 不知道文件选项,没有它很难。让我开心!
      【解决方案4】:

      使用最近推出的新secrets manager 可能会更好。它的接口非常接近参数存储,但它更好地支持一个位置的多个参数。

      我想知道控制台的变化是否是由于服务的预期发布,因为他们有一个围绕秘密的定价模型,而参数存储是免费的

      【讨论】:

      • 我不明白秘密管理器的意思,它的作用似乎很昂贵。我刚刚用制表符分隔秘密,然后在实例上使用“sed -e 'y/\t/\n/'”将其转换为换行符。我真的不应该这样做 - 特别是考虑到机密管理器似乎不需要“密码类型”字段,为什么我不能使用 textarea 作为参数存储。 Whatevs,现在已经完成了。
      【解决方案5】:

      我找到了一种方法,但是太费力了,也太奇怪了——如果有人能找到更简单的方法,我会把它标记为答案。

      解决方法是安装“Tamper Chrome”扩展程序 + 应用程序,然后在浏览器发送 XHR 请求时捕获它,并将新行编辑到 JSON 中。

      布莱赫。加上“篡改 Chrome”非常糟糕,我不想在我的机器上运行它。

      【讨论】:

      • 对直接 API 请求使用 aws-cli 或其他机制似乎是唯一的解决方案。这似乎是控制台中的一个不幸的设计缺陷。
      • 我什至无法通过 aws cli 让它工作。添加换行符只会导致它们被逐字解释(转义)。你知道让它发挥作用的方法吗?
      • @darrend 我实际上在使用 Terraform,所以通过 API 将换行符放入值中的是它,而不是我。但是我正在使用 aws cli 获取值,因此阅读绝对有效。但我实际上没有证据证明您可以使用命令行将换行符写入参数值(但我猜它应该可以工作,您可能应该查看您的引用/转义机制)。
      • @Shorn 谢谢,我最后想通了,但你需要使用--cli-input-json 开关并将值作为 json 对象传递(编辑:我将添加作为答案)跨度>
      猜你喜欢
      • 2019-07-27
      • 2020-04-22
      • 2020-03-18
      • 2020-08-22
      • 1970-01-01
      • 2019-09-18
      • 2023-03-20
      • 1970-01-01
      • 2020-02-08
      相关资源
      最近更新 更多