39

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

aws secretsmanager get-secret-value --secret-id secrets

哪个返回

arn:aws:secretsmanager<ID>:secret:my_secrets <number> my_secrets {"API_KEY":"ABCDEFGHI"}       <UUID string>
VERSIONSTAGES   AWSCURRENT

有谁知道我是如何得到秘密的(“API_KEY”:“ABCDEFGHI”)?我需要将这些秘密移动到我的注册任务定义环境变量中。最好的方法是将它们存储在一个文件中并在我们之后删除它或将它们存储在变量中。它在linux机器上运行。

4

11 回答 11

69

使用--queryCLI 的选项仅提取密钥。

aws secretsmanager get-secret-value --secret-id secrets --query SecretString --output text
于 2018-06-18T19:10:04.370 回答
27

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

使用 jq 你可以打印。

于 2018-10-22T00:58:14.373 回答
22

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

aws secretsmanager get-secret-value \
   --secret-id secrets \
   --query SecretString \
   --output text
于 2019-05-06T23:24:50.587 回答
10

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

aws secretsmanager get-secret-value --secret-id <secret_bucket_name> | jq --raw-output '.SecretString' | jq -r .key_for_password
于 2019-10-31T19:38:57.330 回答
5

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

aws secretsmanager get-secret-value --secret-id secrets --query SecretString --output text | cut -d: -f2 | tr -d \"}
于 2021-02-14T04:57:47.000 回答
3

所以我在提取我需要的东西时遇到了一些麻烦,我存储在 SecretsManager 中的两个变量的值。所以这对我有用。

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

我跑了这个

aws secretsmanager get-secret-value --secret-id MyTestDatabaseSecret --version-stage AWSPREVIOUS

这个查询的响应是:

{
  "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
}

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

aws secretsmanager get-secret-value --secret-id MyTestDatabaseSecret --version-stage AWSPREVIOUS | jq --raw-output .SecretString | jq -r ."password"

输出

BnQw&XDWgaEeT9XGTT29
于 2019-10-31T13:11:41.610 回答
1

没有 Jq 的 PowerShell 解决方案

$a = aws secretsmanager get-secret-value --region <region> --secret-id <secret-name>  | ConvertFrom-Json 

$a 所有 json 转换为对象类型

输出

ARN           : xxxxxx
Name          : postgxxx
VersionId     : fxxxx-xx-x-xx
SecretString  : {"key":"value","key2":"value"}
VersionStages : {xxxxx}
CreatedDate   : xxxxx.xx

$b = $a.SecretString | ConvertFrom-Json

输出

key : value
key2 : value

$b.key

**Output** 
value
于 2021-06-30T12:14:49.643 回答
1

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

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

基于helloV 的回答

于 2021-10-20T21:48:55.907 回答
0

将所有可用 AWS 机密列出到 /tmp/name.text 并从中查找特定机密值的脚本

注意需要 AWS CLI 配置才能成功运行此脚本

#!/bin/bash

aws secretsmanager list-secrets | grep  "Name" | awk '{print $2}' | tr -d '"' | sed 's/,/ /g' > /tmp/name.text

for line in `cat /tmp/name.text`
do

echo $line >> /tmp/secrets-values.txt

aws secretsmanager get-secret-value --secret-id "$line" | grep "XYZ" >>  /tmp/secrets-values.txt
done
于 2021-10-27T03:59:17.633 回答
0

在“...没有jq”答案的脉络中,这里有一个供node用户使用的答案。(需要现代的 bash 和 nodejs,可以很容易地重写为只使用 sh 通过使用 anecho |而不是清洁器<<<

SECRET_ARN="..."
REGION=us-east-1

SECRET_BLOB=$(aws secretsmanager get-secret-value --region="$REGION" --output=text --query SecretString --secret-id "$SECRET_ARN")

MY_VALUE=$(node -pe 'JSON.parse(require("fs").readFileSync("/dev/stdin").toString()).myKey' <<< "$SECRET_BLOB")

MY_OTHER_VALUE=$(node -pe 'JSON.parse(require("fs").readFileSync("/dev/stdin").toString()).myOtherKey' <<< "$SECRET_BLOB")

如果需要从密钥中提取多个值,则需要将 json blob 缓存在 env var 中。如果您只需要一个值:

MY_VALUE=$(aws secretsmanager get-secret-value --region="$REGION" --output=text --query SecretString --secret-id "$SECRET_ARN" | node -pe 'JSON.parse(require("fs").readFileSync("/dev/stdin").toString()).myKey' <<< "$SECRET_BLOB")
于 2021-11-03T16:01:49.153 回答
-3

使用它来获取密钥的值。确保填写您的密钥 ID 和密钥:

aws secretsmanager get-secret-value --secret-id <yourSecretID> | jq '.SecretString' | tail -c +2 | head -c -2 | tr -d '\' | jq .<YourSecretKey>
于 2020-06-23T20:55:18.657 回答