使用AWS cli从AWS秘密管理器解析秘密

Mod*_*man 8 linux amazon-web-services aws-cli aws-secrets-manager

我正在检索我使用AWS cli存储在AWS秘密管理器中的秘密,如下所示:

aws secretsmanager get-secret-value --secret-id secrets
Run Code Online (Sandbox Code Playgroud)

哪个回报

arn:aws:secretsmanager<ID>:secret:my_secrets <number> my_secrets {"API_KEY":"ABCDEFGHI"}       <UUID string>
VERSIONSTAGES   AWSCURRENT
Run Code Online (Sandbox Code Playgroud)

有谁知道我如何得到秘密("API_KEY":"ABCDEFGHI")?我需要将这些秘密移到我的register-task-definition环境变量中.最好的方法是将它们存储在文件中并在我们之后删除它或将它们存储在变量中.它在linux机器上运行.

谢谢

kad*_*dir 20

helloV 答案的小补充。您可以添加输出参数text以删除引号。

aws secretsmanager get-secret-value \
   --secret-id secrets \
   --query SecretString \
   --output text
Run Code Online (Sandbox Code Playgroud)


Jon*_*Jon 13

如果您的秘密只有一个密钥/对值,并且您只想打印该值,并且您不想依赖先安装了 jq 的系统,您可以执行以下操作:

aws secretsmanager get-secret-value --secret-id secrets --query SecretString --output text | cut -d: -f2 | tr -d \"}
Run Code Online (Sandbox Code Playgroud)


hel*_*loV 12

使用--queryCLI选项仅提取密码.

aws secretsmanager get-secret-value --secret-id secrets --query SecretString
Run Code Online (Sandbox Code Playgroud)

  • 啊 `SecretString` 选择整个秘密字符串,它不用于匹配秘密密钥 (5认同)
  • 这不再起作用了吗?每个秘密对我来说都是无效的 (2认同)

小智 11

因此,我在提取所需内容(存储在 SecretsManager 中的两个变量的值)时遇到了一些麻烦。所以这对我有用。

注意:这是 AWS SecretsManager 文档中的示例。

我跑了这个

aws secretsmanager get-secret-value --secret-id MyTestDatabaseSecret --version-stage AWSPREVIOUS
Run Code Online (Sandbox Code Playgroud)

该查询的响应是:

{
  "ARN": "arn:aws:secretsmanager:us-west-2:123456789012:secret:MyTestDatabaseSecret-a1b2c3",
  "Name": "MyTestDatabaseSecret",
  "VersionId": "EXAMPLE1-90ab-cdef-fedc-ba987EXAMPLE",
  "SecretString": "{\n  \"username\":\"david\",\n  \"password\":\"BnQw&XDWgaEeT9XGTT29\"\n}\n",
  "VersionStages": [
    "AWSPREVIOUS"
  ],
  "CreatedDate": 1523477145.713
}
Run Code Online (Sandbox Code Playgroud)

现在我想获得准确的用户名或密码的值

aws secretsmanager get-secret-value --secret-id MyTestDatabaseSecret --version-stage AWSPREVIOUS | jq --raw-output .SecretString | jq -r ."password"
Run Code Online (Sandbox Code Playgroud)

输出

BnQw&XDWgaEeT9XGTT29
Run Code Online (Sandbox Code Playgroud)


小智 9

aws secretsmanager get-secret-value --secret-id secrets| jq --raw-output '.SecretString' | jq -r .API_KEY

使用jq可以打印。

  • jq 不是标准的 util (7认同)
  • 如果您的秘密有破折号,您可以使用:`aws Secretsmanager get-secret-value --secret-id my-secret --query SecretString --output text | jq '."我的秘密"'` (2认同)
  • 更正,除了使其适用于带有破折号的秘密之外,还可以删除引号:`aws Secretsmanager get-secret-value --secret-id my-secret --query SecretString --output text | jq -r '."我的秘密"'` (2认同)

Ase*_*ain 8

当您有多个秘密并获得 json 返回时,您可以使用获取密码的确切值

aws secretsmanager get-secret-value --secret-id <secret_bucket_name> | jq --raw-output '.SecretString' | jq -r .key_for_password
Run Code Online (Sandbox Code Playgroud)

  • 这是这个答案的复制粘贴/sf/answers/3704485221/ (2认同)

Ami*_*nes 8

所有答案都有效,但需要第三方集成(主要jq)。以下 bash 命令无需任何其他第三方解决方案即可获取相关值 -

SECRET_ARN=arn:aws:secretsmanager:eu-west-1:123456:secret:/test
SECRET_KEY=DB_PASSWORD
aws secretsmanager get-secret-value \ 
  --secret-id $SECRET_ARN \ 
  --query SecretString \
  --output text | grep -o '"$SECRET_KEY":"[^"]*' |  grep -o '[^"]*$'
Run Code Online (Sandbox Code Playgroud)

  • 标记的答案获取所有秘密值。我的示例根据密钥获取特定值。 (4认同)

Hea*_*ers 7

这里的很多答案都取决于jq. 如果您不想安装任何其他依赖项,可以使用python3单行:

aws secretsmanager get-secret-value \
   --output text \
   --query SecretString \
   --secret-id my-secret-name \
| python3 -c 'import json, sys; print(json.load(sys.stdin)["my-secret-key"])'
Run Code Online (Sandbox Code Playgroud)

基于helloV 的回答