使用 Amazon Data Firehose 控制访问权限 - Amazon Data Firehose
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

亚马逊 Data Firehose 以前被称为亚马逊 Kinesis Data Firehose

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

使用 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 的指南,使其能够将数据传输到属于其他 Amazon 账户的目的地。管理所有这些形式的访问的技术是 Amazon 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" ] } ] }

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

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

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

允许 Amazon Data Firehose 担任 IAM 角色

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

注意

如果您使用控制台创建 Firehose 直播并选择创建新角色的选项,则会将所需的信任策略 Amazon 附加到该角色。如果您希望 Amazon Data Firehose 使用现有的 IAM 角色或自己创建角色,请将以下信任策略附加到该角色,以便 Amazon Data Firehose 可以担任该角色。编辑政策,将账户 ID 替换为您的 Amazon 账户 ID。有关如何修改角色的信任关系的更多信息,请参阅修改角色

Amazon Data Firehose 使用 IAM 角色来获得传输流处理和交付数据所需的所有权限。请确保将以下信任策略附加到该角色,以便 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 账户的 Amazon Data Firehose 活动才能担任此 IAM 角色。有关防止未经授权使用 IAM 角色的更多信息,请参阅《IAM 用户指南》中的混淆代理问题

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

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

请确保该角色授予 Amazon Data Firehose 从指定的 Amazon 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" }] }

授予亚马逊 Data Firehose 访问权限以 Amazon Glue 进行数据格式转换

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

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

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

注意

目前 Amazon Glue ,以色列(特拉维夫)、亚太地区(雅加达)或中东(阿联酋)地区不支持。如果您在亚太地区(雅加达)地区或中东(阿联酋)地区使用亚马逊数据 Firehose,请务必 Amazon Glue 在当前支持的区域之一授予您的亚马逊数据 Firehose 访问权限。 Amazon Glue 支持 Data Firehose Amazon Glue 和之间的跨区域互操作性。有关支持地区的 Amazon Glue 更多信息,请参阅 https://docs.aws.amazon.com/general/latest/gr/glue.html

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

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

使用以下访问策略允许 Amazon Data Firehose 访问您的 S3 存储桶和密钥。 Amazon 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 作为数据来源,可以删除该语句。如果您使用 Amazon 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}}/*" }

有关允许其他 Amazon 服务访问您的 Amazon 资源的更多信息,请参阅 IAM 用户指南中的创建角色以向 Amazon 服务委派权限

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

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

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

IAM 角色和访问策略

当你使用亚马逊 Redshift 目标时,Amazon Data Firehose 会将数据作为中间位置传输到你的 S3 存储桶。它可以选择使用您拥有的 Amazon 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 存储桶和密钥。 Amazon 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" ] } ] }

有关允许其他 Amazon 服务访问您的 Amazon 资源的更多信息,请参阅 IAM 用户指南中的创建角色以向 Amazon 服务委派权限

对 Amazon Redshift 预置集群或 Amazon Redshift Serverless 工作组的 VPC 访问

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

  • 13.58.135.96/27 代表美国东部(俄亥俄州)

  • 52.70.63.192/27 代表美国东部(弗吉尼亚州北部)

  • 13.57.135.192/27 代表美国西部(北加利福尼亚)

  • 52.89.255.224/27 代表美国西部(俄勒冈州)

  • 18.253.138.96/27对于 Amazon GovCloud (美国东部)

  • 52.61.204.160/27对于 Amazon GovCloud (美国西部)

  • 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 代表亚太地区(雅加达)

  • 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 代表非洲(开普敦)

  • 3.28.159.32/27 代表中东(阿联酋)

  • 51.16.102.0/27 代表以色列(特拉维夫)

  • 16.50.161.128/27 代表亚太地区(墨尔本)

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

授予亚马逊 Data Firehose 访问公共 OpenSearch 服务目标的权限

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

使用以下访问策略允许 Amazon Data Firehose 访问您的 S3 存储桶、 OpenSearch服务域和 Amazon 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" ] } ] }

有关允许其他 Amazon 服务访问您的 Amazon 资源的更多信息,请参阅 IAM 用户指南中的创建角色以向 Amazon 服务委派权限

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

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

如果您的 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

重要

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

重要

在私有 VPC 中指定向目标传输数据的子网时,请确保所选子网中有足够数量的免费 IP 地址。如果指定子网中没有可用的免费 IP 地址,Firehose 将无法为私有 VPC 中的数据传输创建或添加 ENI,并且传输将降级或失败。

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

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

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

使用以下访问策略允许 Amazon Data Firehose 访问您的 S3 存储桶、 OpenSearch无服务器域和密钥。 Amazon 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/*" ] } ]

有关允许其他 Amazon 服务访问您的 Amazon 资源的更多信息,请参阅 IAM 用户指南中的创建角色以向 Amazon 服务委派权限

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

如果您的 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

重要

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

重要

在私有 VPC 中指定向目标传输数据的子网时,请确保所选子网中有足够数量的免费 IP 地址。如果指定子网中没有可用的免费 IP 地址,Firehose 将无法为私有 VPC 中的数据传输创建或添加 ENI,并且传输将降级或失败。

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

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

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

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

创建传输流时,您需要拥有 IAM 角色。Firehose 担任该 IAM 角色并获得对指定存储桶、密钥、 CloudWatch 日志组和流的访问权限。

使用以下访问策略允许 Amazon Data Firehose 访问您的 S3 存储桶。如果您不是 S3 存储桶的所有者,请将其添加s3:PutObjectAcl到 Amazon S3 操作列表中,这将授予存储桶拥有者对由 Amazon Data Firehose 交付的对象的完全访问权限。该政策还授予 Amazon Data Firehose 访问权限以 CloudWatch 进行错误记录和数据转 Amazon 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" ] } ] }

有关允许其他 Amazon 服务访问您的 Amazon 资源的更多信息,请参阅 IAM 用户指南中的创建角色以向 Amazon 服务委派权限

在 VPC 中访问 Splunk

如果 Splunk 平台位于 VPC 中,它必须具有公有 IP 地址以公开进行访问。此外,通过解锁亚马逊数据 Firehose IP 地址,授予亚马逊 Data Firehose 访问您的 Splunk 平台的权限。Amazon Data Firehose 目前使用以下 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 代表美国西部(俄勒冈州)

  • 18.253.138.192/26对于 Amazon GovCloud (美国东部)

  • 52.61.204.192/26对于 Amazon GovCloud (美国西部)

  • 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 代表亚太地区(东京)

  • 51.16.102.64/26 代表以色列(特拉维夫)

  • 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 代表亚太地区(雅加达)

  • 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 代表亚太地区(墨尔本)

访问 Snowflake 或 HTTP 端点

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

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

注意

通知并不总是来自与其关联主题相同 Amazon 区域的 IP 地址。您必须包括所有区域 Amazon 的 IP 地址范围。

授予亚马逊 Data Firehose 访问雪花目的地的权限

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

创建传输流时,您需要拥有 IAM 角色。Firehose 担任该 IAM 角色并获得对指定存储桶、密钥、 CloudWatch 日志组和流的访问权限。使用以下访问策略让 Firehose 能够访问您的 S3 存储桶。如果您不是 S3 存储桶的所有者,请将其s3:PutObjectAcl添加到亚马逊简单存储服务操作列表中,这将授予存储桶拥有者对 Firehose 交付的对象的完全访问权限。此政策还授予 Firehose 访问错误记录 CloudWatch的权限。此策略还有一个允许访问 Amazon Kinesis Data Streams 的语句。如果您不使用 Kinesis Data Streams 作为数据来源,可以删除该语句。Firehose 不使用 IAM 来访问 Snowflake。要访问 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:*" ] } ] }

有关允许其他 Amazon 服务访问您的 Amazon 资源的更多信息,请参阅 IAM 用户指南中的创建角色以向 Amazon 服务委派权限

在 VPC 中访问 Snowflake

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

根据您的集群所在区域使用的 VPC 终端节点 ID
Amazon Web Services 区域 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

亚太地区(东京)

vpce-06369e5258144e68a

vpce-0f2363cdb8926fbe8

向 Amazon Data Firehose 授予对 HTTP 终端节点目标的访问权限

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

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

使用以下访问策略允许 Amazon Data Firehose 访问您为数据备份指定的 S3 存储桶。如果您不是 S3 存储桶的所有者,请将其添加s3:PutObjectAcl到 Amazon S3 操作列表中,这将授予存储桶拥有者对由 Amazon Data Firehose 交付的对象的完全访问权限。该政策还授予 Amazon Data Firehose 访问权限以 CloudWatch 进行错误记录和数据转 Amazon 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" ] } ] }

有关允许其他 Amazon 服务访问您的 Amazon 资源的更多信息,请参阅 IAM 用户指南中的创建角色以向 Amazon 服务委派权限

重要

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

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

如果您的场景是跨账户场景,您要从 Firehose 账户(例如账户 B)创建传送流,而您的来源是 Amazon 另一个账户(账户 A)中的 MSK 集群,则必须进行以下配置:

账户 A:

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

  2. 网络设置下,选择编辑并打开多 VPC 连接

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

    1. 如果集群尚未配置策略,请选中包含 Firehose 服务主体启用 Firehose 跨账户 S3 传输。 Amazon Web Services 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. Amazon 主体下,输入账户 B 的主体 ID。

  5. 主题下,指定您需要传输流从中提取数据的 Apache Kafka 主题。创建传输流后,您将无法更新此主题。

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

账户 B:

  1. 在 Firehose 控制台中,选择使用账户 B 创建传送流

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

  3. 源设置下,对于 Amazon Managed Streaming for Apache Kafka 集群,请在账户 A 中输入 Amazon MSK 集群的 ARN。

  4. 主题下,指定您需要传输流从中提取数据的 Apache Kafka 主题。创建传输流后,您将无法更新此主题。

  5. 传输流名称中,指定传输流的名称。

在账户 B 中创建传输流时,您必须有一个 IAM 角色(使用时默认创建 Amazon Web Services Management Console),该角色授予传送流 “读取” 跨账户 Amazon MSK 集群的已配置主题权限。

以下是由 Amazon Web Services 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 }, }

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

跨账户传输到 Amazon S3 目标

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

  1. 使用授予 Firehose 访问亚马逊 S3 目的地的权限中所述的步骤,在账户 A 下创建 IA M 角色。

    注意

    在本例中,访问策略中指定的 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": { "Amazon": "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服务目的地

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

  1. 使用 授予亚马逊 Data Firehose 访问公共 OpenSearch 服务目标的权限 中所述的步骤以账户 A 身份创建 IAM 角色。

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

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Amazon": "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 流时,请使用 Amazon CLI 或亚马逊 Data Firehose API,并指定该ClusterEndpoint字段而不是 “服务” 字段。DomainARN OpenSearch

注意

要在一个 Amazon 账户中创建 Firehose 直播,而 OpenSearch 服务目标位于另一个账户中,则必须使用 Amazon CLI 或 Amazon Data Firehose API。您不能使用 Amazon Web Services Management Console 来创建此类跨账户配置。

使用标签控制访问

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

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 操作

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

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

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

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