使用 Amazon Data Firehose 控制访问权限 - Amazon Data Firehose

将 Amazon Data Firehose 流传输到亚马逊 S3 中的 Apache Iceberg Tables 处于预览阶段,可能会发生变化。

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用 Amazon Data Firehose 控制访问权限

以下各节介绍如何控制对您的 Amazon Data Firehose 资源的访问和访问权限。它们涵盖的信息包括如何向您的应用授予访问权限,以便它可以将数据发送到您的 Firehose 直播中。它们还描述了如何授予亚马逊数据Firehose访问您的亚马逊简单存储服务(Amazon S3)存储桶、Amazon Redshift集群或亚马逊 OpenSearch 服务集群的权限,以及使用Datadog、Dynatrace、 LogicMonitor MongoDB、New Relic、Splunk或Sumo Logic作为目的地时所需的访问权限。最后,您将在本主题中找到有关如何配置 Amazon Data Firehose 的指南,使其能够将数据传输到属于其他目标的目的地 AWS account。管理所有这些形式的访问的技术是 AWS Identity and Access Management (IAM)。有关的更多信息IAM,请参阅什么是IAM?

授予访问您的 Firehose 资源的权限

要让您的应用访问您的 Firehose 视频流,请使用与本示例类似的策略。您可以通过修改Action部分来调整您授予访问权限的各个API操作,也可以使用授予对所有操作的访问权限"firehose:*"

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "firehose:DeleteDeliveryStream", "firehose:PutRecord", "firehose:PutRecordBatch", "firehose:UpdateDestination" ], "Resource": [ "arn:aws:firehose:region:account-id:deliverystream/delivery-stream-name" ] } ] }

授予 Firehose 访问您的私有亚马逊集群的权限 MSK

如果您的 Firehose 直播源是私有 Amazon MSK 集群,请使用与本示例类似的策略。

{ "Version": "2012-10-17", "Statement": [ { "Principal": { "Service": [ "firehose.amazonaws.com" ] }, "Effect": "Allow", "Action": [ "kafka:CreateVpcConnection" ], "Resource": "cluster-arn" } ] }

您必须在集群的基于资源的策略中添加这样的策略,才能授予 Firehose 服务主体调用 Amazon MSK CreateVpcConnection API 操作的权限。

允许 Firehose 扮演角色 IAM

本节介绍授予 Amazon Data Firehose 从源头提取、处理和向目标传输数据的权限和政策。

注意

如果您使用控制台创建 Firehose 直播并选择创建新角色的选项, AWS 将所需的信任策略附加到该角色。如果您希望 Amazon Data Firehose 使用现有IAM角色或自己创建角色,请将以下信任策略附加到该角色,以便亚马逊数据 Firehose 可以代替该角色。编辑要替换的策略 account-id 和你的 AWS 账户编号。有关如何修改角色的信任关系的更多信息,请参阅修改角色

Amazon Data Firehose 使用IAM角色获得 Firehose 流处理和传输数据所需的所有权限。请确保将以下信任策略附加到该角色,以便 Amazon Data Firehose 可以担任该角色。

{ "Version": "2012-10-17", "Statement": [{ "Sid": "", "Effect": "Allow", "Principal": { "Service": "firehose.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "sts:ExternalId": "account-id" } } }] }

本政策使用sts:ExternalId条件上下文密钥来确保只有来自您的 Amazon Data Firehose 活动 AWS 账户可以担任此IAM角色。有关防止未经授权使用IAM角色的更多信息,请参阅IAM用户指南》中的 “混淆副手问题”。

如果您选择亚马逊MSK作为 Firehose 直播的来源,则必须指定另一个IAM角色来授予 Amazon Data Firehose 从指定亚马逊集群提取源数据的权限。MSK请确保将以下信任策略附加到该角色,以便 Amazon Data Firehose 可以担任该角色。

{ "Version": "2012-10-17", "Statement": [ { "Principal": { "Service": [ "firehose.amazonaws.com" ] }, "Effect": "Allow", "Action": "sts:AssumeRole" } ] }

请确保该角色授予 Amazon Data Firehose 从指定亚马逊MSK集群提取源数据的权限,该角色授予以下权限:

{ "Version": "2012-10-17", "Statement": [{ "Effect":"Allow", "Action": [ "kafka:GetBootstrapBrokers", "kafka:DescribeCluster", "kafka:DescribeClusterV2", "kafka-cluster:Connect" ], "Resource": "CLUSTER-ARN" }, { "Effect":"Allow", "Action": [ "kafka-cluster:DescribeTopic", "kafka-cluster:DescribeTopicDynamicConfiguration", "kafka-cluster:ReadData" ], "Resource": "TOPIC-ARN" }] }

授予 Firehose 访问权限 AWS Glue 用于数据格式转换

如果您的 Firehose 流执行数据格式转换,亚马逊数据 Firehose 会引用存储在中的表定义 AWS Glue。 向 Amazon Data Firehose 提供必要的访问权限 AWS Glue,在您的策略中添加以下声明。有关如何查找表ARN的信息,请参阅指定 AWS Glue 资源ARNs

[{ "Effect": "Allow", "Action": [ "glue:GetTable", "glue:GetTableVersion", "glue:GetTableVersions" ], "Resource": "table-arn" }, { "Sid": "GetSchemaVersion", "Effect": "Allow", "Action": [ "glue:GetSchemaVersion" ], "Resource": ["*"] }]

从架构注册表获取架构的推荐策略没有资源限制。有关更多信息,请参阅中的反序列化器IAM示例 AWS Glue 开发人员指南。

授予 Firehose 访问亚马逊 S3 目的地的权限

当您使用亚马逊 S3 目标时,Amazon Data Firehose 会将数据传输到您的 S3 存储桶,并且可以选择使用 AWS KMS 您拥有的用于数据加密的密钥。如果启用了错误记录,Amazon Data Firehose 还会将数据传输错误发送到您的 CloudWatch 日志组和流。创建 Firehose IAM 直播时,你需要有一个角色。Amazon Data Firehose IAM 担任该角色并获得对指定存储桶、密钥、 CloudWatch 日志组和流的访问权限。

使用以下访问策略允许 Amazon Data Firehose 访问您的 S3 存储桶和 AWS KMS 钥匙。如果您没有 S3 存储桶,请将 s3:PutObjectAcl 添加到 Amazon S3 操作列表中。这允许存储桶拥有者完全访问由 Amazon Data Firehose 交付的对象。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:AbortMultipartUpload", "s3:GetBucketLocation", "s3:GetObject", "s3:ListBucket", "s3:ListBucketMultipartUploads", "s3:PutObject" ], "Resource": [ "arn:aws:s3:::bucket-name", "arn:aws:s3:::bucket-name/*" ] }, { "Effect": "Allow", "Action": [ "kinesis:DescribeStream", "kinesis:GetShardIterator", "kinesis:GetRecords", "kinesis:ListShards" ], "Resource": "arn:aws:kinesis:region:account-id:stream/stream-name" }, { "Effect": "Allow", "Action": [ "kms:Decrypt", "kms:GenerateDataKey" ], "Resource": [ "arn:aws:kms:region:account-id:key/key-id" ], "Condition": { "StringEquals": { "kms:ViaService": "s3.region.amazonaws.com" }, "StringLike": { "kms:EncryptionContext:aws:s3:arn": "arn:aws:s3:::bucket-name/prefix*" } } }, { "Effect": "Allow", "Action": [ "logs:PutLogEvents" ], "Resource": [ "arn:aws:logs:region:account-id:log-group:log-group-name:log-stream:log-stream-name" ] }, { "Effect": "Allow", "Action": [ "lambda:InvokeFunction", "lambda:GetFunctionConfiguration" ], "Resource": [ "arn:aws:lambda:region:account-id:function:function-name:function-version" ] } ] }

上面的策略还有一个允许访问 Amazon Kinesis Data Streams 的语句。如果您不使用 Kinesis Data Streams 作为数据来源,可以删除该语句。如果您使用亚马逊MSK作为来源,则可以将该声明替换为以下内容:

{ "Sid":"", "Effect":"Allow", "Action":[ "kafka:GetBootstrapBrokers", "kafka:DescribeCluster", "kafka:DescribeClusterV2", "kafka-cluster:Connect" ], "Resource":"arn:aws:kafka:{{mskClusterRegion}}:{{mskClusterAccount}}:cluster/{{mskClusterName}}/{{clusterUUID}}" }, { "Sid":"", "Effect":"Allow", "Action":[ "kafka-cluster:DescribeTopic", "kafka-cluster:DescribeTopicDynamicConfiguration", "kafka-cluster:ReadData" ], "Resource":"arn:aws:kafka:{{mskClusterRegion}}:{{mskClusterAccount}}:topic/{{mskClusterName}}/{{clusterUUID}}/{{mskTopicName}}" }, { "Sid":"", "Effect":"Allow", "Action":[ "kafka-cluster:DescribeGroup" ], "Resource":"arn:aws:kafka:{{mskClusterRegion}}:{{mskClusterAccount}}:group/{{mskClusterName}}/{{clusterUUID}}/*" }

有关允许其他人的更多信息 AWS 用于访问您的服务的服务 AWS 资源,请参阅创建角色以将权限委托给 AWSIAM用户指南中的服务。

要了解如何使用其他账户向 Amazon Data Firehose 授予访问亚马逊 S3 目标的权限,请参阅。跨账户配送到亚马逊 S3 目的地

向 Firehose 授予 Apache 冰山桌目标的访问权限

在使用创建 Firehose 直播和 Apache Iceberg Tables 之前,你必须有一个IAM角色 AWS Glue。 使用以下步骤创建策略和IAM角色。Firehose 担任此IAM角色并执行所需的操作。

  1. 登录 AWS Management Console 然后打开IAM控制台,网址为https://console.aws.amazon.com/iam/

  2. 创建策略并在策略编辑器JSON中选择。

  3. 添加以下内联策略,授予 Amazon S3 权限,例如读/写权限、更新数据目录中表的权限等。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "glue:GetTable", "glue:GetDatabase", "glue:UpdateTable" ], "Resource": [ "arn:aws:glue:<region>:<aws-account-id>:catalog", "arn:aws:glue:<region>:<aws-account-id>:database/*", "arn:aws:glue:<region>:<aws-account-id>:table/*/*" ] }, { "Effect": "Allow", "Action": [ "s3:AbortMultipartUpload", "s3:GetBucketLocation", "s3:GetObject", "s3:ListBucket", "s3:ListBucketMultipartUploads", "s3:PutObject", "s3:DeleteObject" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket", "arn:aws:s3:::amzn-s3-demo-bucket/*" ] }, { "Effect": "Allow", "Action": [ "kinesis:DescribeStream", "kinesis:GetShardIterator", "kinesis:GetRecords", "kinesis:ListShards" ], "Resource": "arn:aws:kinesis:<region>:<aws-account-id>:stream/<stream-name>" }, { "Effect": "Allow", "Action": [ "kms:Decrypt", "kms:GenerateDataKey" ], "Resource": [ "arn:aws:kms:<region>:<aws-account-id>:key/<key-id>" ], "Condition": { "StringEquals": { "kms:ViaService": "s3.region.amazonaws.com" }, "StringLike": { "kms:EncryptionContext:aws:s3:arn": "arn:aws:s3:::amzn-s3-demo-bucket/prefix*" } } }, { "Effect": "Allow", "Action": [ "logs:PutLogEvents" ], "Resource": [ "arn:aws:logs:<region>:<aws-account-id>:log-group:<log-group-name>:log-stream:<log-stream-name>" ] }, { "Effect": "Allow", "Action": [ "lambda:InvokeFunction", "lambda:GetFunctionConfiguration" ], "Resource": [ "arn:aws:lambda:<region>:<aws-account-id>:function:<function-name>:<function-version>" ] } ] }

    该策略包含一项声明,允许访问 Amazon Kinesis Data Streams、调用 Lambda 函数和访问密钥。KMS如果您不使用这些资源中的任何一个,则可以删除相应的语句。

    如果启用了错误记录,Firehose 还会将数据传输错误发送到您的 CloudWatch 日志组和直播。为此,您必须配置日志组和日志流名称。有关日志组和日志流的名称,请参阅使用日志监控亚马逊数据 Firehose CloudWatch

  4. 在内联策略中,替换 DOC-EXAMPLE-BUCKET 使用您的 Amazon S3 存储桶名称 aws-account-id ,使用有效的区域 AWS 账户 资源的数量和区域。

    注意

    此角色授予对数据目录中所有数据库和表的权限。如果需要,您只能向特定的表和数据库授予权限。

  5. 创建策略后,打开IAM控制台并使用创建IAM角色 AWS 服务作为 “可信实体” 类型

  6. 对于服务或用例,请选择 Kinesis。对于用例,请选择 Kinesis Firehose

  7. 在下一页上,选择在上一步中创建的要附加到此角色的策略。在评论页面上,您会发现该角色已附加了信任策略,该策略授予了Firehose服务担任此角色的权限。当你创建角色时,Amazon Data Firehose 可以假设它在上执行所需的操作 AWS Glue 和 S3 存储桶。

授予 Firehose 访问亚马逊 Redshift 目的地的权限

在使用亚马逊 Redshift 目标时授予对亚马逊 Data Firehose 的访问权限时,请参阅以下内容。

IAM角色和访问策略

当你使用亚马逊 Redshift 目标时,Amazon Data Firehose 会将数据作为中间位置传输到你的 S3 存储桶。它可以选择使用 AWS KMS 您拥有的数据加密密钥。然后,Amazon Data Firehose 将 S3 存储桶中的数据加载到你的 Amazon Redshift 预配置集群或亚马逊 Redshift 无服务器工作组。如果启用了错误记录,Amazon Data Firehose 还会将数据传输错误发送到您的 CloudWatch 日志组和流。Amazon Data Firehose 使用指定的 Amazon Redshift 用户名和密码访问您的预配置集群或 Amazon Redshift 无服务器工作组,并使用IAM角色访问指定的存储桶、密钥、日志组和流。 CloudWatch 创建 Firehose IAM 直播时,你需要有一个角色。

使用以下访问策略允许 Amazon Data Firehose 访问您的 S3 存储桶和 AWS KMS 钥匙。如果您不是 S3 存储桶的所有者,请将其添加s3:PutObjectAcl到 Amazon S3 操作列表中,这将授予存储桶拥有者对由 Amazon Data Firehose 交付的对象的完全访问权限。此策略还有一个允许访问 Amazon Kinesis Data Streams 的语句。如果您不使用 Kinesis Data Streams 作为数据来源,可以删除该语句。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:AbortMultipartUpload", "s3:GetBucketLocation", "s3:GetObject", "s3:ListBucket", "s3:ListBucketMultipartUploads", "s3:PutObject" ], "Resource": [ "arn:aws:s3:::bucket-name", "arn:aws:s3:::bucket-name/*" ] }, { "Effect": "Allow", "Action": [ "kms:Decrypt", "kms:GenerateDataKey" ], "Resource": [ "arn:aws:kms:region:account-id:key/key-id" ], "Condition": { "StringEquals": { "kms:ViaService": "s3.region.amazonaws.com" }, "StringLike": { "kms:EncryptionContext:aws:s3:arn": "arn:aws:s3:::bucket-name/prefix*" } } }, { "Effect": "Allow", "Action": [ "kinesis:DescribeStream", "kinesis:GetShardIterator", "kinesis:GetRecords", "kinesis:ListShards" ], "Resource": "arn:aws:kinesis:region:account-id:stream/stream-name" }, { "Effect": "Allow", "Action": [ "logs:PutLogEvents" ], "Resource": [ "arn:aws:logs:region:account-id:log-group:log-group-name:log-stream:log-stream-name" ] }, { "Effect": "Allow", "Action": [ "lambda:InvokeFunction", "lambda:GetFunctionConfiguration" ], "Resource": [ "arn:aws:lambda:region:account-id:function:function-name:function-version" ] } ] }

有关允许其他人的更多信息 AWS 用于访问您的服务的服务 AWS 资源,请参阅创建角色以将权限委托给 AWSIAM用户指南中的服务。

VPC访问亚马逊 Redshift 预配置集群或亚马逊 Redshift 无服务器工作组

如果您的 Amazon Redshift 预配置集群或 Amazon Redshift Serverless 工作组位于虚拟私有云中 (VPC),则必须使用公有 IP 地址对其进行公开访问。此外,通过解锁亚马逊数据 Firehose IP 地址,授予亚马逊 Data Firehose 访问您的亚马逊 Redshift 预配置集群或亚马逊 Redshift 无服务器工作组的权限。Amazon Data Firehose 目前对每个可用区域使用一个CIDR区块。

区域 CIDR方块
美国东部(俄亥俄)

13.58.135.96/27

美国东部(弗吉尼亚州北部) 52.70.63.192/27
美国西部(加利福尼亚北部) 13.57.135.192/27
美国西部(俄勒冈) 52.89.255.224/27
AWS GovCloud (美国东部) 18.253.138.96/27
AWS GovCloud (美国西部) 52.61.204.160/27
加拿大(中部) 35.183.92.128/27
加拿大西部(卡尔加里) 40.176.98.192/27
亚太地区(香港) 18.162.221.32/27
亚太地区(孟买) 13.232.67.32/27
亚太地区(海得拉巴) 18.60.192.128/27
亚太地区(首尔) 13.209.1.64/27
亚太地区(新加坡) 13.228.64.192/27
亚太地区(悉尼) 13.210.67.224/27
亚太地区(雅加达) 108.136.221.64/27
Asia Pacific (Tokyo) 13.113.196.224/27
亚太地区(大阪) 13.208.177.192/27
中国(北京) 52.81.151.32/27
中国(宁夏) 161.189.23.64/27
欧洲(苏黎世) 16.62.183.32/27
欧洲地区(法兰克福) 35.158.127.160/27
欧洲地区(爱尔兰) 52.19.239.192/27
欧洲地区(伦敦) 18.130.1.96/27
欧洲地区(巴黎) 35.180.1.96/27
欧洲地区(斯德哥尔摩) 13.53.63.224/27
中东(巴林) 15.185.91.0/27
南美洲(圣保罗) 18.228.1.128/27
欧洲地区(米兰) 15.161.135.128/27
非洲(开普敦) 13.244.121.224/27
中东 (UAE) 3.28.159.32/27
以色列(特拉维夫) 51.16.102.0/27
亚太地区(墨尔本) 16.50.161.128/27
亚太地区(马来西亚) 43.216.58.0/27

有关如何取消阻止 IP 地址的更多信息,请参阅《Amazon Redshift 入门指南》授予访问集群的权限的步骤。

授予 Firehose 访问公共 OpenSearch 服务目标的权限

当您使用 OpenSearch 服务目标时,Amazon Data Firehose 会将数据传输到您的 OpenSearch 服务集群,并同时将失败的文档或所有文档备份到您的 S3 存储桶。如果启用了错误记录,Amazon Data Firehose 还会将数据传输错误发送到您的 CloudWatch日志组和流。Amazon Data Firehose 使用IAM角色访问指定的 OpenSearch服务域,即 S3 存储桶, AWS KMS 密钥、 CloudWatch 日志组和直播。创建 Firehose IAM 直播时,你需要有一个角色。

使用以下访问策略允许 Amazon Data Firehose 访问您的 S3 存储桶、 OpenSearch服务域和 AWS KMS 钥匙。如果您不是 S3 存储桶的所有者,请将其添加s3:PutObjectAcl到 Amazon S3 操作列表中,这将授予存储桶拥有者对由 Amazon Data Firehose 交付的对象的完全访问权限。此策略还有一个允许访问 Amazon Kinesis Data Streams 的语句。如果您不使用 Kinesis Data Streams 作为数据来源,可以删除该语句。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:AbortMultipartUpload", "s3:GetBucketLocation", "s3:GetObject", "s3:ListBucket", "s3:ListBucketMultipartUploads", "s3:PutObject" ], "Resource": [ "arn:aws:s3:::bucket-name", "arn:aws:s3:::bucket-name/*" ] }, { "Effect": "Allow", "Action": [ "kms:Decrypt", "kms:GenerateDataKey" ], "Resource": [ "arn:aws:kms:region:account-id:key/key-id" ], "Condition": { "StringEquals": { "kms:ViaService": "s3.region.amazonaws.com" }, "StringLike": { "kms:EncryptionContext:aws:s3:arn": "arn:aws:s3:::bucket-name/prefix*" } } }, { "Effect": "Allow", "Action": [ "es:DescribeDomain", "es:DescribeDomains", "es:DescribeDomainConfig", "es:ESHttpPost", "es:ESHttpPut" ], "Resource": [ "arn:aws:es:region:account-id:domain/domain-name", "arn:aws:es:region:account-id:domain/domain-name/*" ] }, { "Effect": "Allow", "Action": [ "es:ESHttpGet" ], "Resource": [ "arn:aws:es:region:account-id:domain/domain-name/_all/_settings", "arn:aws:es:region:account-id:domain/domain-name/_cluster/stats", "arn:aws:es:region:account-id:domain/domain-name/index-name*/_mapping/type-name", "arn:aws:es:region:account-id:domain/domain-name/_nodes", "arn:aws:es:region:account-id:domain/domain-name/_nodes/stats", "arn:aws:es:region:account-id:domain/domain-name/_nodes/*/stats", "arn:aws:es:region:account-id:domain/domain-name/_stats", "arn:aws:es:region:account-id:domain/domain-name/index-name*/_stats", "arn:aws:es:region:account-id:domain/domain-name/" ] }, { "Effect": "Allow", "Action": [ "kinesis:DescribeStream", "kinesis:GetShardIterator", "kinesis:GetRecords", "kinesis:ListShards" ], "Resource": "arn:aws:kinesis:region:account-id:stream/stream-name" }, { "Effect": "Allow", "Action": [ "logs:PutLogEvents" ], "Resource": [ "arn:aws:logs:region:account-id:log-group:log-group-name:log-stream:log-stream-name" ] }, { "Effect": "Allow", "Action": [ "lambda:InvokeFunction", "lambda:GetFunctionConfiguration" ], "Resource": [ "arn:aws:lambda:region:account-id:function:function-name:function-version" ] } ] }

有关允许其他人的更多信息 AWS 用于访问您的服务的服务 AWS 资源,请参阅创建角色以将权限委托给 AWS 《IAM用户指南中的服务。

要了解如何授予 Amazon Data Firehose 访问其他账户中 OpenSearch 服务集群的权限,请参阅。跨账户配送到 OpenSearch 服务目的地

向 Firehose 授予访问中 OpenSearch 服务目标的访问权限 VPC

如果您的 OpenSearch 服务域位于VPC,请务必向 Amazon Data Firehose 授予上一节中描述的权限。此外,您需要向 Amazon Data Firehose 授予以下权限,使其能够访问您的 OpenSearch 服务域名。VPC

  • ec2:DescribeVpcs

  • ec2:DescribeVpcAttribute

  • ec2:DescribeSubnets

  • ec2:DescribeSecurityGroups

  • ec2:DescribeNetworkInterfaces

  • ec2:CreateNetworkInterface

  • ec2:CreateNetworkInterfacePermission

  • ec2:DeleteNetworkInterface

重要

创建 Firehose 直播后,请勿撤消这些权限。如果您撤消这些权限,则每当服务尝试查询或更新时,您的 Firehose 流就会降级或停止向 OpenSearch 您的服务域传送数据。ENIs

重要

当您指定子网以私有方式将数据传送到目的地时VPC,请确保所选子网中有足够数量的空闲 IP 地址。如果指定子网中没有可用的空闲IP地址,Firehose将无法创建或添加ENIs私有数据传输VPC,并且传输将降级或失败。

创建或更新您的 Firehose 直播时,您可以指定一个安全组,让 Firehose 在向您的服务域发送数据时使用。 OpenSearch 您可以使用 OpenSearch 服务域使用的相同安全组或不同的安全组。如果您指定其他安全组,请确保该安全组允许出站HTTPS流量 OpenSearch进入服务域的安全组。此外,请确保 OpenSearch 服务域的安全组允许来自您在配置 Firehose 直播时指定的安全组的HTTPS流量。如果您对 Firehose 直播和 OpenSearch 服务域使用相同的安全组,请确保安全组入站规则允许HTTPS流量。有关安全组规则的更多信息,请参阅 Amazon VPC 文档中的安全组规则

授予 Firehose 访问公共 OpenSearch无服务器目标的权限

当您使用 OpenSearch 无服务器目标时,Amazon Data Firehose 会将数据传输到 OpenSearch 您的无服务器集合,并同时将失败的文档或所有文档备份到您的 S3 存储桶。如果启用了错误记录,Amazon Data Firehose 还会将数据传输错误发送到您的 CloudWatch 日志组和流。Amazon Data Firehose 使用IAM角色访问指定的 OpenSearch 无服务器集合,即 S3 存储桶, AWS KMS 密钥、 CloudWatch 日志组和直播。创建 Firehose IAM 直播时,你需要有一个角色。

使用以下访问策略允许 Amazon Data Firehose 访问您的 S3 存储桶、 OpenSearch无服务器域和 AWS KMS 钥匙。如果您不是 S3 存储桶的所有者,请将其添加s3:PutObjectAcl到 Amazon S3 操作列表中,这将授予存储桶拥有者对由 Amazon Data Firehose 交付的对象的完全访问权限。此策略还有一个允许访问 Amazon Kinesis Data Streams 的语句。如果您不使用 Kinesis Data Streams 作为数据来源,可以删除该语句。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:AbortMultipartUpload", "s3:GetBucketLocation", "s3:GetObject", "s3:ListBucket", "s3:ListBucketMultipartUploads", "s3:PutObject" ], "Resource": [ "arn:aws:s3:::bucket-name", "arn:aws:s3:::bucket-name/*" ] }, { "Effect": "Allow", "Action": [ "kms:Decrypt", "kms:GenerateDataKey" ], "Resource": [ "arn:aws:kms:region:account-id:key/key-id" ], "Condition": { "StringEquals": { "kms:ViaService": "s3.region.amazonaws.com" }, "StringLike": { "kms:EncryptionContext:aws:s3:arn": "arn:aws:s3:::bucket-name/prefix*" } } }, { "Effect": "Allow", "Action": [ "kinesis:DescribeStream", "kinesis:GetShardIterator", "kinesis:GetRecords", "kinesis:ListShards" ], "Resource": "arn:aws:kinesis:region:account-id:stream/stream-name" }, { "Effect": "Allow", "Action": [ "logs:PutLogEvents" ], "Resource": [ "arn:aws:logs:region:account-id:log-group:log-group-name:log-stream:log-stream-name" ] }, { "Effect": "Allow", "Action": [ "lambda:InvokeFunction", "lambda:GetFunctionConfiguration" ], "Resource": [ "arn:aws:lambda:region:account-id:function:function-name:function-version" ] }, { "Effect": "Allow", "Action": "aoss:APIAccessAll", "Resource": "arn:aws:aoss:region:account-id:collection/collection-id" } ] }

除了上述策略外,您还必须将 Amazon Data Firehose 配置为在数据访问策略中分配以下最低权限:

[ { "Rules":[ { "ResourceType":"index", "Resource":[ "index/target-collection/target-index" ], "Permission":[ "aoss:WriteDocument", "aoss:UpdateIndex", "aoss:CreateIndex" ] } ], "Principal":[ "arn:aws:sts::account-id:assumed-role/firehose-delivery-role-name/*" ] } ]

有关允许其他人的更多信息 AWS 用于访问您的服务的服务 AWS 资源,请参阅创建角色以将权限委托给 AWS 《IAM用户指南中的服务。

授予 Firehose 访问中 OpenSearch无服务器目标的权限 VPC

如果您的 OpenSearch 无服务器集合位于VPC,请务必向亚马逊数据 Firehose 授予上一节中描述的权限。此外,您需要向 Amazon Data Firehose 授予以下权限,使其能够访问您的 OpenSearch 无服务器集合。VPC

  • ec2:DescribeVpcs

  • ec2:DescribeVpcAttribute

  • ec2:DescribeSubnets

  • ec2:DescribeSecurityGroups

  • ec2:DescribeNetworkInterfaces

  • ec2:CreateNetworkInterface

  • ec2:CreateNetworkInterfacePermission

  • ec2:DeleteNetworkInterface

重要

创建 Firehose 直播后,请勿撤消这些权限。如果您撤消这些权限,则每当服务尝试查询或更新时,您的 Firehose 流就会降级或停止向 OpenSearch 您的服务域传送数据。ENIs

重要

当您指定子网以私有方式将数据传送到目的地时VPC,请确保所选子网中有足够数量的空闲 IP 地址。如果指定子网中没有可用的空闲IP地址,Firehose将无法创建或添加ENIs私有数据传输VPC,并且传输将降级或失败。

创建或更新您的 Firehose 直播时,您可以指定一个安全组,让 Firehose 在向您的无服务器集合发送数据时使用。 OpenSearch 您可以使用与 OpenSearch Serverless 集合相同的安全组,也可以使用不同的安全组。如果您指定了其他安全组,请确保该安全组允许流向 OpenSearch Serverless 集合的安全组的出站HTTPS流量。此外,请确保 OpenSearch无服务器集合的安全组允许来自您在配置 Firehose 直播时指定的安全组的HTTPS流量。如果您对 Firehose 直播和 OpenSearch Serverless 集合使用同一个安全组,请确保安全组入站规则允许流量。HTTPS有关安全组规则的更多信息,请参阅 Amazon VPC 文档中的安全组规则

授予 Firehose 进入 Splunk 目的地的权限

当你使用 Splunk 目标时,Amazon Data Firehose 会将数据传输到你的 HTTP Splunk 事件收集器 HEC () 端点。它还会将该数据备份到您指定的 Amazon S3 存储桶,您也可以选择使用 AWS KMS 您拥有的用于 Amazon S3 服务器端加密的密钥。如果启用了错误记录,Firehose 会将数据传输错误发送到您的 CloudWatch日志流。你也可以使用 AWS Lambda 用于数据转换。

如果你使用 AWS 负载均衡器,请确保它是 Classic 负载均衡器或应用程序负载均衡器。此外,在 Classic Load Balancer 中启用基于持续时间的粘性会话,禁用 Cookie 过期时间,Application Load Balancer 的过期时间设置为最长(7 天)。有关如何执行此操作的信息,请参阅 C lassic Load Balancer 或 Application Load Balancer 基于持续时间的会话粘性。

创建 Firehose 直播时,你必须有一个IAM角色。Firehose 担任该IAM角色并获得对指定存储桶、密钥、 CloudWatch 日志组和流的访问权限。

使用以下访问策略允许 Amazon Data Firehose 访问您的 S3 存储桶。如果您不是 S3 存储桶的所有者,请将其添加s3:PutObjectAcl到 Amazon S3 操作列表中,这将授予存储桶拥有者对由 Amazon Data Firehose 交付的对象的完全访问权限。该政策还授予 Amazon Data Firehose 访问 CloudWatch 错误记录和 AWS Lambda 用于数据转换。此策略还有一个允许访问 Amazon Kinesis Data Streams 的语句。如果您不使用 Kinesis Data Streams 作为数据来源,可以删除该语句。Amazon Data Firehose 不IAM用来访问 Splunk。要访问 Splunk,它会使用您的HEC令牌。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:AbortMultipartUpload", "s3:GetBucketLocation", "s3:GetObject", "s3:ListBucket", "s3:ListBucketMultipartUploads", "s3:PutObject" ], "Resource": [ "arn:aws:s3:::bucket-name", "arn:aws:s3:::bucket-name/*" ] }, { "Effect": "Allow", "Action": [ "kms:Decrypt", "kms:GenerateDataKey" ], "Resource": [ "arn:aws:kms:region:account-id:key/key-id" ], "Condition": { "StringEquals": { "kms:ViaService": "s3.region.amazonaws.com" }, "StringLike": { "kms:EncryptionContext:aws:s3:arn": "arn:aws:s3:::bucket-name/prefix*" } } }, { "Effect": "Allow", "Action": [ "kinesis:DescribeStream", "kinesis:GetShardIterator", "kinesis:GetRecords", "kinesis:ListShards" ], "Resource": "arn:aws:kinesis:region:account-id:stream/stream-name" }, { "Effect": "Allow", "Action": [ "logs:PutLogEvents" ], "Resource": [ "arn:aws:logs:region:account-id:log-group:log-group-name:log-stream:*" ] }, { "Effect": "Allow", "Action": [ "lambda:InvokeFunction", "lambda:GetFunctionConfiguration" ], "Resource": [ "arn:aws:lambda:region:account-id:function:function-name:function-version" ] } ] }

有关允许其他人的更多信息 AWS 用于访问您的服务的服务 AWS 资源,请参阅创建角色以将权限委托给 AWS 《IAM用户指南中的服务。

在中访问 Splunk VPC

如果您的 Splunk 平台位于VPC,则必须使用公有 IP 地址对其进行公开访问。此外,通过解锁亚马逊数据 Firehose IP 地址,授予亚马逊 Data Firehose 访问您的 Splunk 平台的权限。Amazon Data Firehose 目前使用以下区块CIDR。

区域 CIDR方块
美国东部(俄亥俄)

18.216.68.160/27, 18.216.170.64/27, 18.216.170.96/27\

美国东部(弗吉尼亚州北部) 34.238.188.128/26, 34.238.188.192/26, 34.238.195.0/26
美国西部(加利福尼亚北部) 13.57.180.0/26
美国西部(俄勒冈) 34.216.24.32/27, 34.216.24.192/27, 34.216.24.224/27
AWS GovCloud (美国东部) 18.253.138.192/26
AWS GovCloud (美国西部) 52.61.204.192/26
亚太地区(香港) 18.162.221.64/26
亚太地区(孟买) 13.232.67.64/26
亚太地区(首尔) 13.209.71.0/26
亚太地区(新加坡) 13.229.187.128/26
亚太地区(悉尼) 13.211.12.0/26
亚太地区(东京) 13.230.21.0/27, 13.230.21.32/27
加拿大(中部) 35.183.92.64/26
加拿大西部(卡尔加里) 40.176.98.128/26
欧洲地区(法兰克福) 18.194.95.192/27, 18.194.95.224/27, 18.195.48.0/27
欧洲地区(爱尔兰) 34.241.197.32/27, 34.241.197.64/27, 34.241.197.96/27
欧洲地区(伦敦) 18.130.91.0/26
欧洲地区(巴黎) 35.180.112.0/26
欧洲地区(斯德哥尔摩) 13.53.191.0/26
中东(巴林) 15.185.91.64/26
南美洲(圣保罗) 18.228.1.192/26
欧洲地区(米兰) 15.161.135.192/26
非洲(开普敦) 13.244.165.128/26
亚太地区(大阪) 13.208.217.0/26
中国(北京) 52.81.151.64/26
中国(宁夏) 161.189.23.128/26
亚太地区(雅加达) 108.136.221.128/26
中东 (UAE) 3.28.159.64/26
以色列(特拉维夫) 51.16.102.64/26
欧洲(苏黎世) 16.62.183.64/26
亚太地区(海得拉巴) 18.60.192.192/26
亚太地区(墨尔本) 16.50.161.192/26
亚太地区(马来西亚) 43.216.44.192/26

使用 Amazon Data Firehose 将VPC流日志提取到 Splunk

要详细了解如何创建VPC流日志订阅、发布到 Firehose 以及将流日志发送到支持的目的地,请参阅使用 Amazon Data Firehose 将VPC流日志提取到 Splunk。VPC

访问 Snowflake 或终点 HTTP

没有子集 AWS 当目标为HTTP端点或 Snowflake 公共集群时,Amazon Data Firehose 特定的 IP 地址范围。

要将 Firehose 添加到公共 Snowflake 集群的允许列表或您的公共集群HTTP或HTTPS终端节点中,请添加所有当前的 AWS IP 地址范围与您的入口规则一致。

注意

通知并不总是来自相同的 IP 地址 AWS 区域作为他们的关联主题。您必须包含 AWS 所有区域的 IP 地址范围。

授予 Firehose 访问雪花目的地的权限

当你使用 Snowflake 作为目的地时,Firehose 会使用你的 Snowflake 账户将数据传输到 Snowflake 账户。URL它还会将错误数据备份到您指定的亚马逊简单存储服务存储桶中,您可以选择使用 AWS Key Management Service 您拥有的用于 Amazon S3 服务器端加密的密钥。如果启用了错误记录,Firehose 会将数据传输错误发送到您的 CloudWatch 日志流。

在创建 Firehose 直播之前,你必须拥有一个IAM角色。Firehose 担任该IAM角色并获得对指定存储桶、密钥、 CloudWatch 日志组和流的访问权限。使用以下访问策略让 Firehose 能够访问您的 S3 存储桶。如果您不是 S3 存储桶的所有者,请将其s3:PutObjectAcl添加到亚马逊简单存储服务操作列表中,这将授予存储桶拥有者对 Firehose 交付的对象的完全访问权限。此政策还授予 Firehose 访问错误记录 CloudWatch 的权限。此策略还有一个允许访问 Amazon Kinesis Data Streams 的语句。如果您不使用 Kinesis Data Streams 作为数据来源,可以删除该语句。Firehose 不用来访问 Snowfla IAM ke。要访问 Snowflake,它会使用你的 Snowflake 账户 Url 和 PrivateLink Vpce ID(如果是私有集群)。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:AbortMultipartUpload", "s3:GetBucketLocation", "s3:GetObject", "s3:ListBucket", "s3:ListBucketMultipartUploads", "s3:PutObject" ], "Resource": [ "arn:aws:s3:::bucket-name", "arn:aws:s3:::bucket-name/*" ] }, { "Effect": "Allow", "Action": [ "kms:Decrypt", "kms:GenerateDataKey" ], "Resource": [ "arn:aws:kms:region:account-id:key/key-id" ], "Condition": { "StringEquals": { "kms:ViaService": "s3.region.amazonaws.com" }, "StringLike": { "kms:EncryptionContext:aws:s3:arn": "arn:aws:s3:::bucket-name/prefix*" } } }, { "Effect": "Allow", "Action": [ "kinesis:DescribeStream", "kinesis:GetShardIterator", "kinesis:GetRecords", "kinesis:ListShards" ], "Resource": "arn:aws:kinesis:region:account-id:stream/stream-name" }, { "Effect": "Allow", "Action": [ "logs:PutLogEvents" ], "Resource": [ "arn:aws:logs:region:account-id:log-group:log-group-name:log-stream:*" ] } ] }

有关允许其他人的更多信息 AWS 用于访问您的服务的服务 AWS 资源,请参阅创建角色以将权限委托给 AWS 《IAM用户指南中的服务。

访问 Snowflake VPC

如果您的 Snowflake 集群启用了私有链接,Firehose 会使用VPC终端节点将数据传输到您的私有集群,而无需通过公共互联网。为此,请创建 Snowflake 网络规则以允许来自以下内容的入口 AwsVpceIds AWS 区域 您的集群已进入。有关更多信息,请参阅 S nowflake 用户指南中的创建网络规则

VPC根据您的集群所在区域使用的终端节点 ID
AWS 区域 VPCE IDs
美国东部(俄亥俄州)

vpce-0d96cafcd96a50aeb

vpce-0cec34343d48f537b

美国东部(弗吉尼亚州北部)

vpce-0b4d7e8478e141ba8

vpce-0b75cd681fb507352

vpce-01c03e63820ec00d8

vpce-0c2cfc51dc2882422

vpce-06ca862f019e4e056

vpce-020cda0cfa63f8d1c

vpce-0b80504a1a783cd70

vpce-0289b9ff0b5259a96

vpce-0d7add8628bd69a12

vpce-02bfb59666cc59b2af

vpce-09e707674af878bf2

vpce-049b52e96cc1a2165

vpce-0bb6c7b7a8a86cdbb

vpce-03b22d599f51e80f3

vpce-01d60dc60fc60fc106fe1

vpce-0186d20a4b24ecbef

vpce-0533906401a36e416

vpce-05111fb13d396710e

vpce-0694613f4f4fbd6f514

vpce-09b21cb25fe4cc4f4

vpce-06029c3550e4d2399

vpce-00961862a21b033da

vpce-01620b9ae33273587

vpce-078cf4ec226880ac9

vpce-0d711bf076ce56381

vpce-066b7e13cbfca6f6e

vpce-0674541252d9ccc26

vpce-03540b88dedb4b000

vpce-0b1828e79ad394b95

vpce-0dc0e6f001fb1a60d

vpce-0d8f82e71a244098a

vpce-00e374d9e3f1af5ce

vpce-0c1e3d6631ddb442f

美国西部(俄勒冈州)

vpce-0f60f72da4cd1e4e7

vpce-0c60d21eb8b1669fd

vpce-01c4e3e29afdafbef

vpce-0cc6bf2a88da139de

vpce-0797e08e169e50662

vpce-033cbe480381b5c0e

vpce-00debbdd8f9eb10a5

vpce-08ec2f386c809e889

vpce-0856d14310857b57b545

欧洲地区(法兰克福)

vpce-068dbb7d71c9460fb

vpce-0a7a7f095942d4ec9

欧洲地区(爱尔兰)

vpce-06857e59c005a6276

vpce-04390f4f8778b75f2

vpce-011fd2b1f0aa172fd

Asia Pacific (Tokyo)

vpce-06369e5258144e68a

vpce-0f2363cdb8926fbe8

亚太地区(新加坡)

vpce-049cd46cce7a12d52

vpce-0e8965a1a4bdb8941

亚太地区(首尔)

vpce-0aa444d9001e1faa1

vpce-04a49d4d4dcfd02b884

亚太地区(悉尼)

vpce-048a60a182c52be63

vpce-03c1994978787fd1859

亚太地区(孟买)

vpce-0d68cb822f6f0db68

vpce-0517d32692ffcbde2

欧洲地区(伦敦)

vpce-0fd1874a0ba3b9374

vpce-08091b1b1a85e206029

南美洲(圣保罗)

vpce-065169b8144e4e4f12e

vpce-0493699f0e5762d63

加拿大(中部)

vpce-07e6ed81689d5271f

vpce-0f532397305430541394c

欧洲地区(巴黎)

vpce-09419680077e6488a

vpce-0ea81ba2c08140c14

亚太地区(大阪)

vpce-0a9f003e6a7e38c05

vpce-02886510b897b1c5a

欧洲地区(斯德哥尔摩)

vpce-0d96410833219025a

vpce-060a32f9a75ba969f

亚太地区(雅加达)

vpce-00add4b9a25e5c649

vpce-004ae2de34338a856

授予 Firehose 访问终端节点目标的HTTP权限

您可以使用 Amazon Data Firehose 将数据传输到任何HTTP终端节点目标。Amazon Data Firehose 还会将该数据备份到您指定的亚马逊 S3 存储桶中,您可以选择使用 AWS KMS 您拥有的用于 Amazon S3 服务器端加密的密钥。如果启用了错误记录,Amazon Data Firehose 会将数据传输错误发送到您的 CloudWatch 日志流。你也可以使用 AWS Lambda 用于数据转换。

创建 Firehose IAM 直播时,你需要有一个角色。Amazon Data Firehose IAM 担任该角色并获得对指定存储桶、密钥、 CloudWatch 日志组和流的访问权限。

使用以下访问策略允许 Amazon Data Firehose 访问您为数据备份指定的 S3 存储桶。如果您不是 S3 存储桶的所有者,请将其添加s3:PutObjectAcl到 Amazon S3 操作列表中,这将授予存储桶拥有者对由 Amazon Data Firehose 交付的对象的完全访问权限。该政策还授予 Amazon Data Firehose 访问 CloudWatch 错误记录和 AWS Lambda 用于数据转换。此策略还有一个允许访问 Amazon Kinesis Data Streams 的语句。如果您不使用 Kinesis Data Streams 作为数据来源,可以删除该语句。

重要

Amazon Data Firehose 不用于IAM访问受支持的第三方服务提供商拥有的HTTP终端节点目的地,包括 Datadog、Dynatrace、MongoDB、New Relic LogicMonitor、Splunk 或 Sumo Logic。要访问受支持的第三方服务提供商拥有的指定HTTP终端节点目标,请联系该服务提供商,获取允许从 Amazon Data Firehose 向该服务传输数据所需的密API钥或访问密钥。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:AbortMultipartUpload", "s3:GetBucketLocation", "s3:GetObject", "s3:ListBucket", "s3:ListBucketMultipartUploads", "s3:PutObject" ], "Resource": [ "arn:aws:s3:::bucket-name", "arn:aws:s3:::bucket-name/*" ] }, { "Effect": "Allow", "Action": [ "kms:Decrypt", "kms:GenerateDataKey" ], "Resource": [ "arn:aws:kms:region:account-id:key/key-id" ], "Condition": { "StringEquals": { "kms:ViaService": "s3.region.amazonaws.com" }, "StringLike": { "kms:EncryptionContext:aws:s3:arn": "arn:aws:s3:::bucket-name/prefix*" } } }, { "Effect": "Allow", "Action": [ "kinesis:DescribeStream", "kinesis:GetShardIterator", "kinesis:GetRecords", "kinesis:ListShards" ], "Resource": "arn:aws:kinesis:region:account-id:stream/stream-name" }, { "Effect": "Allow", "Action": [ "logs:PutLogEvents" ], "Resource": [ "arn:aws:logs:region:account-id:log-group:log-group-name:log-stream:*" ] }, { "Effect": "Allow", "Action": [ "lambda:InvokeFunction", "lambda:GetFunctionConfiguration" ], "Resource": [ "arn:aws:lambda:region:account-id:function:function-name:function-version" ] } ] }

有关允许其他人的更多信息 AWS 用于访问您的服务的服务 AWS 资源,请参阅创建角色以将权限委托给 AWS 《IAM用户指南中的服务。

重要

目前,Amazon Data Firehose 确实NOT支持向中的HTTP终端节点传输数据。VPC

来自亚马逊的跨账户配送 MSK

当你从你的 Firehose 账户(例如账户 B)创建 Firehose 直播并且你的来源是另一个账号中的集群时 MSK AWS 账户(账户 A),则必须进行以下配置。

账户 A:

  1. 在 Amazon MSK 控制台中,选择已配置的集群,然后选择属性

  2. “网络设置” 下,选择 “编辑”,然后打开 “多VPC连接”。

  3. 安全设置下,选择编辑集群策略

    1. 如果集群尚未配置策略,请选中包含 Firehose 服务主体启用 Firehose 跨账户 S3 传输。这些区域有: AWS Management Console 将自动生成具有相应权限的策略。

    2. 如果集群已配置了策略,请向现有策略添加以下权限:

      { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::arn:role/mskaasTestDeliveryRole" }, "Action": [ "kafka:GetBootstrapBrokers", "kafka:DescribeCluster", "kafka:DescribeClusterV2", "kafka-cluster:Connect" ], "Resource": "arn:aws:kafka:us-east-1:arn:cluster/DO-NOT-TOUCH-mskaas-provisioned-privateLink/xxxxxxxxx-2f3a-462a-ba09-xxxxxxxxxx-20" // ARN of the cluster }, { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::arn:role/mskaasTestDeliveryRole" }, "Action": [ "kafka-cluster:DescribeTopic", "kafka-cluster:DescribeTopicDynamicConfiguration", "kafka-cluster:ReadData" ], "Resource": "arn:aws:kafka:us-east-1:arn:topic/DO-NOT-TOUCH-mskaas-provisioned-privateLink/xxxxxxxxx-2f3a-462a-ba09-xxxxxxxxxx-20/*"//topic of the cluster }, { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::233450236687:role/mskaasTestDeliveryRole" }, "Action": "kafka-cluster:DescribeGroup", "Resource": "arn:aws:kafka:us-east-1:arn:group/DO-NOT-TOUCH-mskaas-provisioned-privateLink/xxxxxxxxx-2f3a-462a-ba09-xxxxxxxxxx-20/*" //topic of the cluster }, }
  4. 下AWS 委托人,输入账户 B 中的委托人 ID。

  5. 在 “主题” 下,指定您希望 Firehose 直播从中提取数据的 Apache Kafka 主题。创建 Firehose 直播后,您将无法更新此主题。

  6. 选择 Save changes(保存更改)

账户 B:

  1. 在 Firehose 控制台中,选择使用账户 B 创建 Firehose 直播

  2. 下,选择 Amazon Managed Streaming for Apache Kafka

  3. 源设置下,对于适用于 A pache Kafka 的亚马逊托管流媒体 Kafka 集群,在账户 A 中输入ARNMSK亚马逊集群的。

  4. 在 “主题” 下,指定您希望 Firehose 直播从中提取数据的 Apache Kafka 主题。创建 Firehose 直播后,您将无法更新此主题。

  5. 传输流名称中,指定您的 Firehose 直播的名称。

在账户 B 中创建 Firehose 直播时,你必须有一个IAM角色(使用 Firehose 直播时默认创建) AWS Management Console),它授予 Firehose 流对已配置主题的跨账户 A MSK mazon 集群的 “读取” 权限。

以下是由配置的内容 AWS Management Console:

{ "Sid": "", "Effect": "Allow", "Action": [ "kafka:GetBootstrapBrokers", "kafka:DescribeCluster", "kafka:DescribeClusterV2", "kafka-cluster:Connect" ], "Resource": "arn:aws:kafka:us-east-1:arn:cluster/DO-NOT-TOUCH-mskaas-provisioned-privateLink/xxxxxxxxx-2f3a-462a-ba09-xxxxxxxxxx-20/*" //topic of the cluster }, { "Sid": "", "Effect": "Allow", "Action": [ "kafka-cluster:DescribeTopic", "kafka-cluster:DescribeTopicDynamicConfiguration", "kafka-cluster:ReadData" ], "Resource": "arn:aws:kafka:us-east-1:arn:topic/DO-NOT-TOUCH-mskaas-provisioned-privateLink/xxxxxxxxx-2f3a-462a-ba09-xxxxxxxxxx-20/mskaas_test_topic" //topic of the cluster }, { "Sid": "", "Effect": "Allow", "Action": [ "kafka-cluster:DescribeGroup" ], "Resource": "arn:aws:kafka:us-east-1:arn:group/DO-NOT-TOUCH-mskaas-provisioned-privateLink/xxxxxxxxx-2f3a-462a-ba09-xxxxxxxxxx-20/*" //topic of the cluster }, }

接下来,您可以完成配置记录转换和记录格式转换的可选步骤。有关更多信息,请参阅 (可选)配置记录转换和格式转换

跨账户配送到亚马逊 S3 目的地

您可以使用 AWS CLI 或者使用 Amazon Data Firehose APIs 将一个 Firehose 直播合而为一 AWS 另一个账户中有 Amazon S3 目标的账户。以下过程显示了配置账户 A 拥有的 Firehose 流以将数据传输到账户 B 拥有的 Amazon S3 存储桶的示例。

  1. 使用授予 Firehose 对 Amazon S3 目标的访问权限中描述的步骤,在账户 A 下创建IAM角色。

    注意

    在本例中,访问策略中指定的 Amazon S3 存储桶由账户 B 拥有。请务必将访问策略中的 Amazon S3 操作s3:PutObjectAcl添加到列表中,该策略授予账户 B 对由 Amazon Data Firehose 交付的对象的完全访问权限。跨账户传输需要此权限。Amazon Data Firehose 将请求上的 x-amz-acl “” 标头设置为 “” bucket-owner-full-control。

  2. 要允许先前创建的IAM角色进行访问,请在账户 B 下创建 S3 存储桶策略。以下代码是存储桶策略的示例。有关更多信息,请参阅使用存储桶策略和用户策略

    { "Version": "2012-10-17", "Id": "PolicyID", "Statement": [ { "Sid": "StmtID", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::accountA-id:role/iam-role-name" }, "Action": [ "s3:AbortMultipartUpload", "s3:GetBucketLocation", "s3:GetObject", "s3:ListBucket", "s3:ListBucketMultipartUploads", "s3:PutObject", "s3:PutObjectAcl" ], "Resource": [ "arn:aws:s3:::bucket-name", "arn:aws:s3:::bucket-name/*" ] } ] }
  3. 使用您在步骤 1 中创建的IAM角色在账户 A 下创建 Firehose 直播。

跨账户配送到 OpenSearch 服务目的地

您可以使用 AWS CLI 或者使用 Amazon Data Firehose APIs 将一个 Firehose 直播合而为一 AWS OpenSearch 服务目的地为不同账户的账户。以下过程显示了一个示例,说明如何在账户 A 下创建 Firehose 流并将其配置为向账户 B 拥有的 OpenSearch 服务目标传送数据。

  1. 使用中所述的步骤在账户 A 下创建IAM角色授予 Firehose 访问公共 OpenSearch 服务目标的权限

  2. 要允许您在上一步中创建的IAM角色进行访问,请在账户 B 下创建 OpenSearch 服务策略。以下JSON是一个示例。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::Account-A-ID:role/firehose_delivery_role " }, "Action": "es:ESHttpGet", "Resource": [ "arn:aws:es:us-east-1:Account-B-ID:domain/cross-account-cluster/_all/_settings", "arn:aws:es:us-east-1:Account-B-ID:domain/cross-account-cluster/_cluster/stats", "arn:aws:es:us-east-1:Account-B-ID:domain/cross-account-cluster/roletest*/_mapping/roletest", "arn:aws:es:us-east-1:Account-B-ID:domain/cross-account-cluster/_nodes", "arn:aws:es:us-east-1:Account-B-ID:domain/cross-account-cluster/_nodes/stats", "arn:aws:es:us-east-1:Account-B-ID:domain/cross-account-cluster/_nodes/*/stats", "arn:aws:es:us-east-1:Account-B-ID:domain/cross-account-cluster/_stats", "arn:aws:es:us-east-1:Account-B-ID:domain/cross-account-cluster/roletest*/_stats", "arn:aws:es:us-east-1:Account-B-ID:domain/cross-account-cluster/" ] } ] }
  3. 使用您在步骤 1 中创建的IAM角色在账户 A 下创建 Firehose 直播。创建 Firehose 直播时,请使用 AWS CLI 或者 Amazon Data FirehoseAPIs,然后指定该ClusterEndpoint字段而不是 “服务” 字段DomainARN。 OpenSearch

注意

合而为一地创建 Firehose 直播 AWS 在其他账户中具有 OpenSearch 服务目的地的账户,您必须使用 AWS CLI 或者亚马逊 Data Firehose APIs。你不能使用 AWS Management Console 来创建这种跨账户配置。

使用标签控制访问

您可以使用IAM策略中的可选Condition元素(或Condition区块),根据标签键和值来微调对 Amazon Data Firehose 操作的访问权限。以下小节描述了如何针对不同的 Amazon Data Firehose 操作执行此操作。有关Condition元素的使用以及可以在其中使用的运算符的更多信息,请参阅IAMJSON策略元素:条件

CreateDeliveryStream

对于 CreateDeliveryStream 操作,请使用 aws:RequestTag 条件键。在以下示例中,MyKeyMyValue 表示标签的键和对应的值。有关更多信息,请参阅 了解标签基础知识

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "firehose:CreateDeliveryStream", "firehose:TagDeliveryStream" ], "Resource": "*", "Condition": { "StringEquals": { "aws:RequestTag/MyKey": "MyValue" } } }] }

TagDeliveryStream

对于 TagDeliveryStream 操作,请使用 aws:TagKeys 条件键。在以下示例中,MyKey 为示例标签键。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "firehose:TagDeliveryStream", "Resource": "*", "Condition": { "ForAnyValue:StringEquals": { "aws:TagKeys": "MyKey" } } } ] }

UntagDeliveryStream

对于 UntagDeliveryStream 操作,请使用 aws:TagKeys 条件键。在以下示例中,MyKey 为示例标签键。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "firehose:UntagDeliveryStream", "Resource": "*", "Condition": { "ForAnyValue:StringEquals": { "aws:TagKeys": "MyKey" } } } ] }

ListDeliveryStreams

您不能将基于标签的访问控制用于 ListDeliveryStreams

其他操作

对于除、、和之外的所有 Firehose 操作 CreateDeliveryStream TagDeliveryStream UntagDeliveryStreamListDeliveryStreams,请使用aws:RequestTag条件键。在以下示例中,MyKeyMyValue 表示标签的键和对应的值。

ListDeliveryStreams,使用firehose:ResourceTag条件键根据该 Firehose 直播上的标签控制访问权限。

在以下示例中,MyKeyMyValue 表示标签的键和对应的值。该政策仅适用于标签名为、值为的 Data Firehos MyKey e 流。MyValue有关根据资源标签控制访问权限的更多信息,请参阅控制对资源的访问权限 AWS 使用IAM用户指南中的标签的资源。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": "firehose:DescribeDeliveryStream", "Resource": "*", "Condition": { "StringEquals": { "firehose:ResourceTag/MyKey": "MyValue" } } } ] }