出现这个问题的原因是API Gateway所使用的IAM角色没有正确的权限去扮演指定的STS角色。下面是一种解决方法,其中包含了代码示例:
首先,确保API Gateway的IAM角色已经附加了STS扮演角色的权限。可以使用AWS管理控制台、AWS CLI或者AWS SDK进行操作。
接下来,检查API Gateway的角色是否具有sts:AssumeRole
权限。可以通过以下代码片段来为API Gateway角色添加此权限:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "sts:AssumeRole",
"Resource": "arn:aws:iam::[YOUR_ACCOUNT_ID]:role/[YOUR_STS_ROLE]"
}
]
}
确保替换[YOUR_ACCOUNT_ID]
和[YOUR_STS_ROLE]
为正确的值。
const AWS = require('aws-sdk');
exports.handler = async (event) => {
const sts = new AWS.STS();
try {
const assumedRole = await sts.assumeRole({
RoleArn: '[YOUR_STS_ROLE_ARN]',
RoleSessionName: '[YOUR_SESSION_NAME]'
}).promise();
// 在这里可以使用扮演的角色执行其他操作
return {
statusCode: 200,
// 其他返回值
};
} catch (error) {
console.error(error);
return {
statusCode: 500,
// 错误消息
};
}
};
确保替换[YOUR_STS_ROLE_ARN]
和[YOUR_SESSION_NAME]
为正确的值。
通过以上步骤,您应该能够解决API Gateway没有权限去扮演提供的角色的问题。请注意,这只是一个解决方法的示例,具体的实现方式可能因您的环境和需求而有所不同。