Zer*_*Max 2 amazon-web-services node.js amazon-iam aws-lambda aws-sam
我正在部署一个 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
Run Code Online (Sandbox Code Playgroud)
当我在本地(使用sam local start-api)测试该函数时,它会成功运行,因为在我的 AWS CLI 中,我已经设置了ACCESS_KEY_ID管理员帐户的和 密码。
但是,当我部署该函数并调用它时,即使我对 lambda 的执行角色授予完全管理员访问权限,该命令也会导致 lambda 失败并出现客户端错误(凭据无效)。
在这里,我在内联策略中授予了完全权限,并且还明确添加了预定义的管理员访问策略。
我希望您从环境变量中获得的 AWS_ACCESS_KEY_ID 授予我我在 lambda 函数的执行角色中设置的所有权限,但看起来我授予执行角色的特权并未反映在这些凭证中。
我的假设错了吗?这些凭据来自哪里,我如何才能知道它们允许我做什么?
Lambda 执行运行时将为您的函数调用提供临时会话令牌(不是持久/永久访问密钥/秘密访问密钥)。
在幕后,Lambda 服务将使用 AWS 安全令牌服务 (AWS STS) 来承担您的 Lambda 函数的 Lambda 执行角色。这就是为什么您还必须在您的执行角色的信任策略中添加 Lambda 服务委托人作为受信任的服务委托人。其结果是一个临时会话。
这个临时会议全权证书存储在环境变量的组合AWS_SECRET_ACCESS_KEY,AWS_ACCESS_KEY_ID和AWS_SESSION_TOKEN。
但是,您不需要手动配置/指定任何凭证,因为 AWS 开发工具包中的默认凭证加载器链会自动处理此问题。
| 归档时间: |
|
| 查看次数: |
628 次 |
| 最近记录: |