events.amazonaws.com 无法承担角色

Jie*_*eng 5 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: `arn:aws:iam::${account.Id}:role/skynet-cloudwatch-eventbus`,
}).promise()
Run Code Online (Sandbox Code Playgroud)

但是,我得到:

(节点:29939)UnhandledPromiseRejectionWarning:ValidationException:提供的角色“arn:aws:iam :: 00000000000:role/xxx-cloudwatch-eventbus”不能由主体“events.amazonaws.com”承担。

该角色已经具有允许的假设策略文档events.amazonaws.com。为什么还是失败呢?

在此输入图像描述

小智 8

您收到此错误的原因是“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"
    }
  ]
Run Code Online (Sandbox Code Playgroud)


小智 3

您现在可能已经找到了答案,但您也许可以通过在 CloudTrail 中查找有错误的 AssumeRole 事件来找出问题所在。

就我而言,我正确设置了假设角色策略,但收到了您指定的相同消息。CloudTrail AssumeRole 事件提供了更有意义的详细信息:

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

在该区域启用 STS 解决了这种情况下的问题。