Amazon web services events.amazonaws.com无法担任此角色

Amazon web services events.amazonaws.com无法担任此角色,amazon-web-services,amazon-iam,amazon-cloudwatch,Amazon Web Services,Amazon Iam,Amazon Cloudwatch,我正在尝试使用以下代码放置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: `a

我正在尝试使用以下代码放置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)未经处理的PromisejectionWarning:ValidationException:提供的角色“arn:aws:iam::00000000000:role/xxx cloudwatch eventbus”不能由主体“events.amazonaws.com”承担

该角色已具有允许
事件的假定策略文档。amazonaws.com
。为什么它仍然失败


您现在可能已经找到了答案,但您可以通过在CloudTrail中查找有错误的假定角色事件来找出问题所在

在本例中,我正确设置了“假定角色”策略,但收到的消息与您指定的消息相同。CloudTrail AssumeRole事件提供了更有意义的详细信息:

错误代码:RegionDisabledException errorMessage:帐户xyz在此区域中未激活STS。您的帐户管理员可以使用IAM控制台激活此区域中的STS


在此区域中启用STS解决了本例中的问题。

出现此错误的原因是“events.amazonaws.com”未列为角色theRole的受信任实体。(在您的情况下,skynet cloudwatch eventbus)

解决此问题的一种方法是转到服务下的“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"
    }
  ]