首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >FirehoseDestination -无法承担IAM的角色

FirehoseDestination -无法承担IAM的角色
EN

Stack Overflow用户
提问于 2022-01-20 04:05:35
回答 2查看 626关注 0票数 0

当设置一个使用terraform的Amazon事件发布的动态数据消防水管事件目的地时,我会得到以下错误。看起来terraform创建了IAM角色,但是在创建带有IAM角色的消防水管事件目的地时抛出了错误。然而,能够从AWS控制台附加相同的IAM角色与消防软管事件目的地,这是由terraform创建的。如果我使用AWS控制台手动创建相同的IAM角色,然后将角色的ARN传递给terraform,它就能工作了。但是,如果我尝试使用terraform创建角色,然后创建事件目标,它就不起作用了。有人能帮我吗?

代码语言:javascript
运行
复制
Error creating SES configuration set event destination: InvalidFirehoseDestination: Could not assume IAM role <arn:aws:iam::<AWS account name >:role/<AWS IAM ROLE NAME>>.
代码语言:javascript
运行
复制
data "aws_iam_policy_document" "ses_configuration_set_assume_role" {
  statement {
    effect  = "Allow"
    actions = ["sts:AssumeRole"]
    principals {
      type        = "Service"
      identifiers = ["ses.amazonaws.com"]
    }
  }
}

data "aws_iam_policy_document" "ses_firehose_destination_policy" {
  statement {
    effect = "Allow"
    actions = [
      "firehose:PutRecord",
      "firehose:PutRecordBatch"
    ]

    resources = [
     "<ARN OF AWS FIREHOSE DELIVERY STREAM >"
    ]
  }
}

resource "aws_iam_policy" "ses_firehose_destination_iam_policy" {
  name   = "SesfirehosedestinationPolicy"
  policy = data.aws_iam_policy_document.ses_firehose_destination_policy.json
}

resource "aws_iam_role" "ses_firehose_destination_role" {
  name                 = "SesfirehosedestinationRole"
  assume_role_policy   = data.aws_iam_policy_document.ses_configuration_set_assume_role.json
}

resource "aws_iam_role_policy_attachment" "ses_firehose_destination_role_att" {
  role       = aws_iam_role.ses_firehose_destination_role.name
  policy_arn = aws_iam_policy.ses_firehose_destination_iam_policy.arn
}


resource "aws_ses_configuration_set" "create_ses_configuration_set" {
  name = var.ses_config_set_name
}

resource "aws_ses_event_destination" "ses_firehose_destination" {
  name                   = "event-destination-kinesis"
  configuration_set_name = aws_ses_configuration_set.create_ses_configuration_set.name
  enabled                = true
  matching_types         = ["send", "reject", "bounce", "complaint", "delivery", "renderingFailure"]
  depends_on             = [aws_iam_role.ses_firehose_destination_role] 
  kinesis_destination {
    stream_arn = "<ARN OF AWS FIREHOSE DELIVERY STREAM>"
    role_arn  = aws_iam_role.ses_firehose_destination_role.arn
  }
}
EN

回答 2

Stack Overflow用户

发布于 2022-01-25 19:45:39

你可能需要看看你的火龙带数据源。如果它是一个动态数据,它将无法工作。它只会工作时,使用直接放置和其他数据源的动态消防软管。我遇到了这个问题,同时也为我的设置了Datadog。我希望这能帮上忙。

票数 1
EN

Stack Overflow用户

发布于 2022-08-03 20:27:36

我发现了同样的问题,并能用一个小小的解决办法来解决它。

该问题可能是由于AWS将IAM角色传播到所有区域所花费的时间。由于IAM角色是全局的,它将首先在“随机”区域创建,然后传播到所有区域。因此,如果它不是首先在您的区域中创建的,那么传播可能需要一段时间,如果在IAM角色传播之前创建了SES事件目的地,您将得到这个错误。

将depends_on子句添加为terraform (正确吗?)没有帮助。认为IAM角色已经创建,只是还没有传播到您的区域。

对我起作用的解决方案是创建一个IAM角色,为SES服务授予访问"sts:AssumeRole“操作的权限,并为火软管创建”消防喉:PutRecordBatch“操作。当我应用Terraform时,我首先为这个角色做了一个有针对性的应用,等待了一分钟(允许IAM角色传播),然后执行一个正常的terraform应用来完成。

在您的示例中,命令如下所示:

代码语言:javascript
运行
复制
terraform apply --target aws_iam_role_policy_attachment.ses_firehose_destination_role_att
terraform apply
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70780683

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档