首页 > 后端开发 > Golang > 正文

Secrets Manager 更新密钥 - 密钥字符串附加 JSON 编码

WBOY
发布: 2024-02-13 12:30:09
转载
1275人浏览过

secrets manager 更新密钥 - 密钥字符串附加 json 编码

php小编子墨为您带来最新的 Secrets Manager 更新密钥技巧:密钥字符串附加 JSON 编码。这个技巧可以让您更加灵活和安全地管理密钥,同时还能提供更多的功能和选项。通过将密钥字符串与 JSON 编码结合起来,您可以轻松地添加额外的信息和属性,例如密钥的有效期或者访问权限。这个更新将大大增强您对密钥的控制和管理能力,让您的应用程序更加安全可靠。快来了解这个令人兴奋的新功能吧!

问题内容

我正在使用 aws cli 更新包含 x509 证书的 json 密钥。我传递到 --secret-string 参数的有效负载是我期望的编码,但在上传并存储在 aws 中时,secretsmanager 正在对换行符执行附加编码。

问题

我遇到的问题是,在解组秘密时,pem 和关键内容并未完全转义。我在 go 中有一个应用程序服务器,当将机密传递到 tls.x509keypair() 时,它无法识别证书的内容。

我可以在网络上手动将 cli 命令中的有效负载粘贴到密钥中,它会保留现有的格式,并且我的代码可以正常工作。

我主要想看看是否可以做一些事情来修复上传编码,而不是在获取秘密时必须在 go 中格式化/取消转义 pem/key 内容。

示例

cli 命令:

aws secretsmanager update-secret --secret-id my-secret --secret-string '{"pem":"-----begin certificate-----
...
...
...
-----end certificate-----
","key":"..."}'
登录后复制

实际上传的秘密:

Find JSON Path Online
Find JSON Path Online

Easily find JSON paths within JSON objects using our intuitive Json Path Finder

Find JSON Path Online 30
查看详情 Find JSON Path Online
{"PEM":"-----BEGIN CERTIFICATE-----\\n...\\n...\\n...\\n-----END CERTIFICATE-----\\n",,"KEY":"..."}
登录后复制

我使用 awk 来加入 pem 内容,并使用 jq 来更新 + 字符串化 json。字符串化的 json 是我正在寻找的正确格式。

awk: string_pem=$(awk '{printf "%s\n", $0}' $pemfile)

jq: secret_string=$(jq -r 'tostring' $updated_secret)

解决方法

我可以确认此命令设置的秘密

aws secretsmanager update-secret --secret-id my-secret --secret-string '{"pem":"-----begin certificate-----
...
...
...
-----end certificate-----
","key":"..."}'
登录后复制

按预期工作(请参阅本答案底部的 go 演示)。

这是一个完成整个事情的简化命令

aws secretsmanager update-secret --secret-id -secret --secret-string "$(jq -n --arg cert "$(cat /path/to/cert/file)" --arg key "$(cat /path/to/key/file)" -c '{"pem": $cert, "key": $key}')"
登录后复制

这是一个用于验证上传内容的 go 演示:

package main

import (
    "context"
    "crypto/tls"
    "encoding/json"

    "github.com/aws/aws-sdk-go-v2/aws"
    "github.com/aws/aws-sdk-go-v2/config"
    "github.com/aws/aws-sdk-go-v2/service/secretsmanager"
)

func main() {
    secretName := "test1"
    region := "ap-southeast-1"

    config, err := config.LoadDefaultConfig(context.TODO(), config.WithRegion(region))
    if err != nil {
        panic(err)
    }

    svc := secretsmanager.NewFromConfig(config)

    input := &secretsmanager.GetSecretValueInput{
        SecretId: aws.String(secretName),
    }

    result, err := svc.GetSecretValue(context.TODO(), input)
    if err != nil {
        panic(err)
    }

    var secret struct {
        PEM string `json:"PEM"`
        KEY string `json:"KEY"`
    }
    {
    }

    if err := json.Unmarshal([]byte(*result.SecretString), &secret); err != nil {
        panic(err)
    }

    if _, err := tls.X509KeyPair([]byte(secret.PEM), []byte(secret.KEY)); err != nil {
        panic(err)
    }
}
登录后复制

以上就是Secrets Manager 更新密钥 - 密钥字符串附加 JSON 编码的详细内容,更多请关注php中文网其它相关文章!

相关标签:
最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:stackoverflow网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
热门推荐
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号