events.amazonaws.com无法担任角色

时间:2019-12-25 15:29:00

标签: 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()

但是,我得到了:

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

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

enter image description here

2 个答案:

答案 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"
    }
  ]