【发布时间】:2021-05-18 17:10:12
【问题描述】:
我正在部署一个 AWS lambda 函数(使用 nodejs 12.x),该函数在调用时执行 AWS 命令(“iot:attachPrincipalPolicy”)。我正在使用凭据从 lambda 执行环境变量中运行此命令。
const AWS = require('aws-sdk/global');
const region = process.env['AWS_REGION'];
const accessKeyId = process.env['AWS_ACCESS_KEY_ID'];
const secretAccessKey = process.env['AWS_SECRET_ACCESS_KEY'];
AWS.config.region = region;
AWS.config.credentials = new AWS.Credentials(accessKeyId, secretAccessKey);
// attachPrincipalPolicy command from the AWS SDK here
当我在本地(使用sam local start-api)测试该函数时,它运行成功,因为在我的 AWS CLI 中我已经设置了我的管理员帐户的 ACCESS_KEY_ID 和密码。
但是,当我部署该函数并调用它时,lambda 在该命令上失败并出现客户端错误(凭据无效),即使我还授予 lambda 执行角色的完全管理员访问权限。
在这里,我在内联策略中提供了完全权限,并且还明确添加了预定义的管理员访问策略。
我希望您从环境变量中获得的 AWS_ACCESS_KEY_ID 授予我在 lambda 函数的执行角色中设置的所有权限,但看起来我授予执行角色的权限并未反映在这些凭据中。
我的假设是错误的吗?这些凭据来自哪里?我如何才能知道它们允许我做什么?
【问题讨论】:
-
您是否尝试过删除所有代码并让 AWS 开发工具包执行其默认操作以获取分配给运行时环境的凭证?您可能在凭据中缺少 STS 令牌或其他内容。让 SDK 为您完成所有这些工作要容易得多,默认情况下它会这样做,而不是尝试在您自己的代码中重新发明凭据查找。
标签: node.js amazon-web-services aws-lambda amazon-iam aws-sam