来自执行环境的 AWS Lambda 凭证没有执行角色的权限
AWS Lambda credentials from the execution environment do not have the execution role's permissions
我正在部署一个 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 函数的执行角色中设置的所有权限,但看起来我授予执行角色的权限是未反映在这些凭据中。
我的假设错了吗?这些凭据从何而来?我如何才能知道它们允许我做什么?
Lambda 执行运行时将为您的函数调用提供临时会话令牌(不是 persistent/permanent 访问密钥/秘密访问密钥)。
在幕后,Lambda 服务将使用 AWS Security Token Service (AWS STS) 承担您的 Lambda 函数的 Lambda 执行角色。这就是为什么您还必须在执行角色的信任策略中将 Lambda 服务委托人添加为受信任的服务委托人。结果是临时会话。
此临时会话的凭据存储在环境变量 AWS_SECRET_ACCESS_KEY
、AWS_ACCESS_KEY_ID
和 AWS_SESSION_TOKEN
的组合中。
但是,您不需要手动 configure/specify 任何凭证,因为 AWS SDK 中的默认凭证加载程序链会自动处理这件事。
我正在部署一个 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 函数的执行角色中设置的所有权限,但看起来我授予执行角色的权限是未反映在这些凭据中。
我的假设错了吗?这些凭据从何而来?我如何才能知道它们允许我做什么?
Lambda 执行运行时将为您的函数调用提供临时会话令牌(不是 persistent/permanent 访问密钥/秘密访问密钥)。
在幕后,Lambda 服务将使用 AWS Security Token Service (AWS STS) 承担您的 Lambda 函数的 Lambda 执行角色。这就是为什么您还必须在执行角色的信任策略中将 Lambda 服务委托人添加为受信任的服务委托人。结果是临时会话。
此临时会话的凭据存储在环境变量 AWS_SECRET_ACCESS_KEY
、AWS_ACCESS_KEY_ID
和 AWS_SESSION_TOKEN
的组合中。
但是,您不需要手动 configure/specify 任何凭证,因为 AWS SDK 中的默认凭证加载程序链会自动处理这件事。