我正在尝试使用以下代码放置cloudwatch事件规则:
await cloudwatchevents.putRule({
Name: 'xxx-ec2-start',
EventPattern: '{"source":["aws.ec2"],"detail-type":["EC2 Instance State-change Notification"],"detail":{"state":["running"]}}',
State: 'ENABLED',
RoleArn: `arn:aws:iam::${account.Id}:role/skynet-cloudwatch-eventbus`,
}).promise()
但是,我得到了:
(节点:29939)UnhandledPromiseRejectionWarning:ValidationException:主体'events.amazonaws.com'不能假定提供的角色'arn:aws:iam :: 00000000000:role / xxx-cloudwatch-eventbus'。
该角色已经具有允许events.amazonaws.com
的假定策略文档。为什么仍然失败?
答案 0 :(得分:0)
您现在可能已经找到答案了,但是通过在CloudTrail中查找有错误的AssumeRole事件,您也许可以找出问题所在。
就我而言,我正确设置了承担角色策略,但收到的消息与您指定的相同。 CloudTrail AssumeRole事件提供了更有意义的细节:
errorCode:RegionDisabledException 错误消息:此区域中的account:xyz没有激活STS。您的帐户管理员可以使用IAM控制台在此区域激活STS。
在该地区启用STS可以解决此问题。
答案 1 :(得分:0)
您收到此错误的原因是“ events.amazonaws.com”未列为角色theRole的受信任实体。(在您的情况下是skynet-cloudwatch-eventbus)
解决此问题的一种方法是转到https://console.aws.amazon.com/iam/home?region=us-east-1#roles/theRole(使此链接适应您的所在地区+真实角色名称)>信任关系选项卡>编辑信任关系按钮>粘贴到服务下的“ events.amazonaws.com”如下例所示。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "",
"Effect": "Allow",
"Principal": {
"Service": [
"lambda.amazonaws.com",
"apigateway.amazonaws.com",
"events.amazonaws.com"
]
},
"Action": "sts:AssumeRole"
}
]