使用 aws codepipeline 将 aws Secret Manager 从一个账户复制到另一个账户

发布于 2025-01-09 14:30:36 字数 879 浏览 1 评论 0原文

我使用 cloudformation 模板创建了一个秘密并将其保存在变量中。

AUTH_AWS_SECRET_DEV=$(aws secretsmanager get-secret-value --region $AWS_DEFAULT_REGION --secret-id "sample_auth_aws_secret" --output text) 

我得到的这个参考变量的输出是

arn:aws:secretsmanager:us-east-1:56875858585:secret:sample_auth_aws_secret-yfw3B2 2022-02-23T15:13:14.166000+00:00sample_auth_aws_secret {"clientId":"sample123","秘密":"wjwjwjwjwjwjwjsjsjsj"} a62a2e90-c2dc-4936-82a1-014c72ac62e5 版本AWSCURRENT

我需要使用 bash 脚本运行 aws create Secret 命令,以便它将在 aws 另一个账户中创建相同的机密。

根据 aws 文档的命令示例是

aws secretsmanager create-secret \
    --name sample_auth_aws_secret \
    --description "My test secret created with the CLI." \
    --secret-string "{\"clientId\":\"sample123\",\"secret\":\"wjwjwjwjwjwjwjsjsjsj\"}"

如何在 bash 脚本中动态地从该引用变量中获取这些所需的值?

I created a secret using cloudformation template and keep it inside a variable.

AUTH_AWS_SECRET_DEV=$(aws secretsmanager get-secret-value --region $AWS_DEFAULT_REGION --secret-id "sample_auth_aws_secret" --output text) 

The output of this reference variable I am getting is

arn:aws:secretsmanager:us-east-1:56875858585:secret:sample_auth_aws_secret-yfw3B2
2022-02-23T15:13:14.166000+00:00 sample_auth_aws_secret
{"clientId":"sample123","secret":"wjwjwjwjwjwjwjsjsjsj"}
a62a2e90-c2dc-4936-82a1-014c72ac62e5 VERSIONSTAGES AWSCURRENT

I need to run aws create secret commands using bash scripts so that it will create the same secrets in aws another account.

The command example as per the aws doc is

aws secretsmanager create-secret \
    --name sample_auth_aws_secret \
    --description "My test secret created with the CLI." \
    --secret-string "{\"clientId\":\"sample123\",\"secret\":\"wjwjwjwjwjwjwjsjsjsj\"}"

How can I take these required values from that reference variable dynamically in bash script?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

江挽川 2025-01-16 14:30:36

使用简单的 JSON 处理就可以轻松实现。我已经使用 jq 为您演示了它。但有多个可以被挑选来完成这项工作。

AWS cli 支持多种输出格式,从 JSON 中提取数据是处理该任务的最有效方法。

jq是一个外部包,需要安装才能使用。请参阅步骤中的链接

以下是 get-secret-value 格式,其输出为 JSON。

输入图片这里的描述

使用 jq,您可以从 JSON 字符串中提取特定的密钥并将其传递给下一个命令。

输入图片此处描述

注意:我已使用 cat 输出通过管道进行过滤以进行演示,但可以用 AWS CLI 命令替换它来检索机密。最后一节中的示例。


总结 将

所有内容放在一起,您就得到了解决方案。 --output 标志更改为 JSON 而不是文本。可以在 .credentials 文件中进行配置以全局应用该设置。

secretValue=$(aws secretsmanager get-secret-value --region $AWS_DEFAULT_REGION --secret-id "sample_auth_aws_secret" --output json | jq '.SecretString')
secretName=$(aws secretsmanager get-secret-value --region $AWS_DEFAULT_REGION --secret-id "sample_auth_aws_secret" --output json | jq '.Name')

secretsmanager create-secret \
--name $secretName \
--description "My test secret created with the CLI." \
--secret-string $secretValue

注意:我特意简化了脚本,它是可以优化的。可以将输出存储在变量中以检索多个密钥,而不是进行两个 aws 调用输出。

It can be achieved easily using simple JSON processing. I have used jq to demo it for you. but there are multiple out there which can be cherry-picked for the job.

AWS cli supports multiple output formats, and extracting data from JSON is the most efficient way to tackle the task.

jq is an external package, It will require installing before use. refer to the link on the steps.

Below is the format get-secret-value with output as JSON will follow.

enter image description here

Using jq you can extract the specific key from the JSON string and pass it to the next command.

enter image description here

Note: I have used cat output to be piped for filtering for the demo, but it can be replaced with AWS CLI command to retrieve secret. Example in the final section.


Summing it up

Putting it all together, you get your solution. The --output flag is changed to JSON instead of text. This can be configured in the .credentials file to apply the setting globally.

secretValue=$(aws secretsmanager get-secret-value --region $AWS_DEFAULT_REGION --secret-id "sample_auth_aws_secret" --output json | jq '.SecretString')
secretName=$(aws secretsmanager get-secret-value --region $AWS_DEFAULT_REGION --secret-id "sample_auth_aws_secret" --output json | jq '.Name')

secretsmanager create-secret \
--name $secretName \
--description "My test secret created with the CLI." \
--secret-string $secretValue

Note: I have purposely simplified the script, it can be Optimised. Instead of making two aws call output can be stored in a variable to retrieve multiple keys.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文