如果我们在AWS Lambda函数中使用secret manager从secrets管理中获取secrets时,我们会遇到这个问题。这种情况通常是因为Lambda函数的权限配置不正确所导致的。以下是解决此问题的步骤。
确保要访问的secrets已存储在AWS Secrets Manager中,方法是登录到AWS控制台,转到AWS Secrets Manager并检查secrets是否存在。
确保Lambda函数具有访问AWS Secrets Manager的权限。我们可以通过为Lambda函数添加IAM角色来实现,该角色需要具有访问secrets的权限。以下是IAM策略的示例:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"secretsmanager:GetSecretValue"
],
"Resource": [
"arn:aws:secretsmanager:region:account-id:secret:secret-name"
]
}
]
}
在该策略中,“secretsmanager:GetSecretValue”表示Lambda函数将可以获取secrets的权限,而“arn:aws:secretsmanager:region:account-id:secret:secret-name”表示要访问的凭据的ARN。
const AWS = require('aws-sdk');
const client = new AWS.SecretsManager({
region: 'us-west-2'
});
exports.handler = async function(event, context, callback) {
let secret;
try {
const data = await client.getSecretValue({ SecretId: 'mySecretName' }).promise();
secret = data.SecretString;
} catch (err) {
console.log(err);
return callback(err);
}
// Use the secret in the rest of the code
};
在此示例中,使用AWS SDK for JavaScript和AWS Secrets Manager客户端在Lambda函数中获取