使用 AWS cli 解析来自 AWS 机密管理器的机密
Parsing secrets from AWS secrets manager using AWS cli
我正在使用 AWS cli 检索存储在 AWS 机密管理器中的机密,如下所示:
aws secretsmanager get-secret-value --secret-id secrets
哪个returns
arn:aws:secretsmanager<ID>:secret:my_secrets <number> my_secrets {"API_KEY":"ABCDEFGHI"} <UUID string>
VERSIONSTAGES AWSCURRENT
有谁知道我是怎么只得到秘钥的("API_KEY":"ABCDEFGHI")?
我需要将这些秘密移动到我的注册任务定义环境变量中。最好的方法是将它们存储在一个文件中并在我们之后将其删除或将它们存储在变量中。在 linux 机器上是 运行。
使用 CLI 的 --query
选项只提取秘密。
aws secretsmanager get-secret-value --secret-id secrets --query SecretString --output text
aws secretsmanager get-secret-value --secret-id secrets| jq --raw-output '.SecretString' | jq -r .API_KEY
使用 jq 可以打印。
helloV 回答的小补充。您可以添加输出参数 text
以删除引号。
aws secretsmanager get-secret-value \
--secret-id secrets \
--query SecretString \
--output text
所以我在提取我需要的东西时遇到了一些麻烦,我存储在 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
当你有多个密码并且你得到 json return 时,你可以使用
来获取密码的确切值
aws secretsmanager get-secret-value --secret-id <secret_bucket_name> | jq --raw-output '.SecretString' | jq -r .key_for_password
使用它来获取密钥的值。确保填写您的secert ID和密钥:
aws secretsmanager get-secret-value --secret-id <yourSecretID> | jq '.SecretString' | tail -c +2 | head -c -2 | tr -d '\' | jq .<YourSecretKey>
如果您的秘密只有一个 key/pair 值,并且您只想打印出该值,并且不想依赖您的系统先安装 jq,您可以这样做:
aws secretsmanager get-secret-value --secret-id secrets --query SecretString --output text | cut -d: -f2 | tr -d \"}
PowerShell solution without Jq
$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
这里的很多答案取决于 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"])'
基于.
用于将所有可用的 AWS 机密列出到 /tmp/name.text 并从中查找特定机密值的脚本
注意需要 AWS CLI 配置才能运行此脚本成功
#!/bin/bash
aws secretsmanager list-secrets | grep "Name" | awk '{print }' | 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
根据“...没有 jq
”的答案,这里有一个供 node
用户使用的答案。 (需要现代 bash 和 nodejs,可以通过使用 echo |
而不是清洁器 <<<
轻松重写为仅使用 sh)
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 缓存在环境变量中。如果您只需要一个值:
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")
我正在使用 AWS cli 检索存储在 AWS 机密管理器中的机密,如下所示:
aws secretsmanager get-secret-value --secret-id secrets
哪个returns
arn:aws:secretsmanager<ID>:secret:my_secrets <number> my_secrets {"API_KEY":"ABCDEFGHI"} <UUID string>
VERSIONSTAGES AWSCURRENT
有谁知道我是怎么只得到秘钥的("API_KEY":"ABCDEFGHI")? 我需要将这些秘密移动到我的注册任务定义环境变量中。最好的方法是将它们存储在一个文件中并在我们之后将其删除或将它们存储在变量中。在 linux 机器上是 运行。
使用 CLI 的 --query
选项只提取秘密。
aws secretsmanager get-secret-value --secret-id secrets --query SecretString --output text
aws secretsmanager get-secret-value --secret-id secrets| jq --raw-output '.SecretString' | jq -r .API_KEY
使用 jq 可以打印。
helloV 回答的小补充。您可以添加输出参数 text
以删除引号。
aws secretsmanager get-secret-value \
--secret-id secrets \
--query SecretString \
--output text
所以我在提取我需要的东西时遇到了一些麻烦,我存储在 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
当你有多个密码并且你得到 json return 时,你可以使用
来获取密码的确切值aws secretsmanager get-secret-value --secret-id <secret_bucket_name> | jq --raw-output '.SecretString' | jq -r .key_for_password
使用它来获取密钥的值。确保填写您的secert ID和密钥:
aws secretsmanager get-secret-value --secret-id <yourSecretID> | jq '.SecretString' | tail -c +2 | head -c -2 | tr -d '\' | jq .<YourSecretKey>
如果您的秘密只有一个 key/pair 值,并且您只想打印出该值,并且不想依赖您的系统先安装 jq,您可以这样做:
aws secretsmanager get-secret-value --secret-id secrets --query SecretString --output text | cut -d: -f2 | tr -d \"}
PowerShell solution without Jq
$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
这里的很多答案取决于 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"])'
基于
用于将所有可用的 AWS 机密列出到 /tmp/name.text 并从中查找特定机密值的脚本
注意需要 AWS CLI 配置才能运行此脚本成功
#!/bin/bash
aws secretsmanager list-secrets | grep "Name" | awk '{print }' | 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
根据“...没有 jq
”的答案,这里有一个供 node
用户使用的答案。 (需要现代 bash 和 nodejs,可以通过使用 echo |
而不是清洁器 <<<
轻松重写为仅使用 sh)
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 缓存在环境变量中。如果您只需要一个值:
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")