Rumah > pembangunan bahagian belakang > Golang > Rahsia kemas kini Pengurus Rahsia - rentetan rahsia ditambah dengan pengekodan JSON

Rahsia kemas kini Pengurus Rahsia - rentetan rahsia ditambah dengan pengekodan JSON

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
Lepaskan: 2024-02-13 12:30:09
ke hadapan
1277 orang telah melayarinya

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-----\n...\n...\n...\n-----end certificate-----\n","key":"..."}'
Salin selepas log masuk
Salin selepas log masuk

实际上传的秘密:

{"PEM":"-----BEGIN CERTIFICATE-----\\\\n...\\\\n...\\\\n...\\\\n-----END CERTIFICATE-----\\\\n",,"KEY":"..."}
Salin selepas log masuk

我使用 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-----\n...\n...\n...\n-----end certificate-----\n","key":"..."}'
Salin selepas log masuk
Salin selepas log masuk

按预期工作(请参阅本答案底部的 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}')"
Salin selepas log masuk

这是一个用于验证上传内容的 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)
    }
}
Salin selepas log masuk

Atas ialah kandungan terperinci Rahsia kemas kini Pengurus Rahsia - rentetan rahsia ditambah dengan pengekodan JSON. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan