在AWS上玩一个小项目:
- Golang应用程序
- RDS/MySQL数据库
- 秘密管理人
- API网关和lambda
我正在本地运行Go应用程序来验证与数据库的交互,但我无法让它与秘密管理器一起工作.
使用以下示例代码:
func getCreds() {
config, err := config.LoadDefaultConfig(context.TODO(), config.WithRegion(region))
if err != nil {
log.Fatal(err)
}
svc := secretsmanager.NewFromConfig(config)
input := &secretsmanager.GetSecretValueInput{
SecretId: aws.String(secretName),
VersionStage: aws.String("AWSCURRENT"),
}
result, err := svc.GetSecretValue(context.TODO(), input)
if err != nil {
log.Fatal(err.Error())
}
var secretString string = *result.SecretString
log.Printf("pwd: %s", secretString)
}
我得到了
operation error Secrets Manager: GetSecretValue, exceeded maximum number of attempts, 3, failed to sign request: failed to retrieve credentials: failed to refresh cached credentials, no EC2 IMDS role found, operation error ec2imds
如果我理解正确,我需要向用户/策略添加权限.但在哪里添加这个呢?在IAM控制台中?还是秘密管理控制台?
那应该是什么呢?
{
"Version":"2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "secretsmanager:GetSecretValue",
"Principal": {"AWS": "<what to add here>"},
"Resource": "<and here>"
}
]
}