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

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

使用Amazon Kinesis Data Firehose 控制

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

授予您的应用程序访问您的 Kinesis Data Firehose 资源的权限

要让您的应用程序访问 Kinesis Data 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" ] } ] }

允许 Kinesis Data Firehose 担任 IAM 角色

如果您使用控制台来创建传输流并选择创建新角色的选项,将所需的信任策略Amazon附加到角色。如果你想让 Kinesis Data Firehose 使用现有的 IAM 角色,或者如果你自己创建一个角色,请将以下信任策略附加到该角色,这样 Kinesis Data Firehose 就可以代入这个角色。请编辑该策略以将 account-id 替换为您的 Amazon 账户 ID。

{ "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账户的 Kinesis Data Firehose 活动才能担任此 IAM 角色。有关防止未经授权使用 IAM 角色的更多信息,请参阅 IA M 用户指南中的混乱副手问题

有关如何修改角色的信任关系的更多信息,请参阅修改角色

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

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

{ "Effect": "Allow", "Action": [ "glue:GetTable", "glue:GetTableVersion", "glue:GetTableVersions" ], "Resource": "table-arn" }
注意

目前,Amazon Glue不支持亚太地区(雅加达)或中东(阿联酋)区域。如果您在亚太地区(雅加达)或中东(阿联酋)地区使用 Kinesis Data Firehose,请确保您的 Kinesis Data Firehose 访问权限Amazon Glue位于当前支持的区域之一。Amazon Glue支持 Data Firehose 和Amazon Glue之间的跨区域互操作性。有关支持区域的更多信息,请参阅 https://docs.aws.amazon.com/general/latest/gr/glue.htmlAmazon Glue

向 Kinesis Data Firehose 访问对 Amazon S3 的访问权限

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

使用以下访问策略允许 Kinesis Data Firehose 访问您的 S3 存储桶和Amazon KMS密钥。如果您不拥有 S3 存储桶,请将其添加s3:PutObjectAcl到 Amazon S3 操作列表中。这授予存储桶拥有者对由 Kinesis 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": [ "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服务访问您的Amazon资源的更多信息,请参阅《IAM 用户指南》中的创建向Amazon服务委派权限的角色

要了解如何向 Kinesis Data Firehose 授予对 Amazon S3 目标的访问权限,请参阅跨账户传输到 Amazon S3 目标

授予 Kinesis Data Firehose 访问Amazon Redshift 目的地的权限

在使用Amazon Redshift 目的地时授予对 Kinesis Data Firehose 的访问权限时,请参阅以下内容。

IAM 角色和访问策略

当你使用Amazon Redshift 目的地时,Kinesis Data Firehose 会将数据作为中间位置传输到你的 S3 存储桶。它可以选择使用您的 Amazon KMS 密钥对数据进行加密。然后,Kinesis Data Firehose 将数据从 S3 存储桶加载到你的 Amazon Redshift 集群。如果启用了错误记录,Kinesis Data Firehose 还会将数据传输错误发送到您的 CloudWatch 日志组并进行流式传输。Kinesis Data Firehose 使用指定的 Amazon Redshift 用户名和密码来访问您的集群,并使用 IAM 角色访问指定的存储桶、密钥、 CloudWatch 日志组和流。在创建交付流时,您需要拥有 IAM 角色。

使用以下访问策略允许 Kinesis Data Firehose 访问您的 S3 存储桶和Amazon KMS密钥。如果您不拥有 S3 存储桶,请将其添加s3:PutObjectAcl到 Amazon S3 操作列表中,这将授予存储桶拥有者对 Kinesis 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服务委派权限的角色

通过 VPC 访问Amazon Redshift 集群

如果您的 Amazon Redshift 集群位于虚拟私有云 (VPC) 中,则必须可将其公有 IP 地址公开访问。另外,通过解除对 Kinesis Data Firehose IP 地址的封锁,授予 Kinesis Data Firehose 对您的Amazon Redshift 集群的访问权限。Kinesis 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/27Canada (Central)

  • 18.162.221.32/27适用于亚太地区(香港)

  • 13.232.67.32/27适用于亚太地区(孟买)

  • 13.209.1.64/27适用于亚太地区(首尔)

  • 13.228.64.192/27适用于亚太地区(新加坡)

  • 13.210.67.224/27适用于亚太地区(悉尼)

  • 13.113.196.224/27亚太地区(东京)

  • 52.81.151.32/27中国(北京)

  • 161.189.23.64/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/27Africa (Cape Town)

  • 13.208.177.192/27适用于亚太地区(大阪)

  • 108.136.221.64/27适用于亚太地区(雅加达)

  • 3.28.159.32/27用于中东(阿联酋)

有关如何解除封锁 IP 地址的更多信息,请参阅 Amazon Redshift 入门指南中的授权集群访问权限步骤。

授予 Kinesis Data Firehose 访问公共 OpenSearch 服务目的地的权限

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

使用以下访问策略允许 Kinesis Data Firehose 访问您的 S3 存储桶、 OpenSearch服务域和Amazon KMS密钥。如果您不拥有 S3 存储桶,请将其添加s3:PutObjectAcl到 Amazon S3 操作列表中,这将授予存储桶拥有者对 Kinesis 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" ] }, { "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服务委派权限的角色

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

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

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

  • ec2:DescribeVpcs

  • ec2:DescribeVpcAttribute

  • ec2:DescribeSubnets

  • ec2:DescribeSecurityGroups

  • ec2:DescribeNetworkInterfaces

  • ec2:CreateNetworkInterface

  • ec2:CreateNetworkInterfacePermission

  • ec2:DeleteNetworkInterface

如果您在创建传输流后撤销这些权限,则 Kinesis Data Firehose 无法在必要时通过创建更多 ENI 进行扩展。因此,您可能会看到性能下降。

在创建或更新交付流时,您需要为 Kinesis Data Firehose 指定一个安全组,供其在向您的 OpenSearch 服务域发送数据时使用。您可以使用 OpenSearch 服务域相同的安全组或其他安全组。如果指定了不同的安全组,请确保该安全组允许到 OpenSearch 服务域的安全组的出站 HTTPS 流量。还要确保 OpenSearch 服务域的安全组允许来自您在配置传输流时指定的安全组的 HTTPS 流量。如果您对传输流和 OpenSearch 服务域使用相同的安全组,请确保安全组入站规则允许 HTTPS 流量。有关安全组规则的更多信息,请参阅 Amazon VPC 文档中的安全组规则

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

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

使用以下访问策略允许 Kinesis Data Firehose 访问您的 S3 存储桶、 OpenSearch无服务器域和Amazon KMS密钥。如果您不拥有 S3 存储桶,请将其添加s3:PutObjectAcl到 Amazon S3 操作列表中,这将授予存储桶拥有者对 Kinesis 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" ] } ] }

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

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

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

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

如果您的 OpenSearch Serverless 集合位于 VPC 中,请确保授予 Kinesis Data Firehose 上一节所述的权限。此外,您需要向 Kinesis Data Firehose 授予以下权限,使其能够访问您的 OpenSearch 无服务器集合的 VPC。

  • ec2:DescribeVpcs

  • ec2:DescribeVpcAttribute

  • ec2:DescribeSubnets

  • ec2:DescribeSecurityGroups

  • ec2:DescribeNetworkInterfaces

  • ec2:CreateNetworkInterface

  • ec2:CreateNetworkInterfacePermission

  • ec2:DeleteNetworkInterface

如果您在创建传输流后撤销这些权限,则 Kinesis Data Firehose 无法在必要时通过创建更多 ENI 进行扩展。因此,您可能会看到性能下降。

在创建或更新交付流时,您需要为 Kinesis Data Firehose 指定一个安全组,供其在向 OpenSearch Serverless 集合发送数据时使用。您可以使用与 OpenSearch Serverless 集合相同的安全组或其他安全组。如果指定了不同的安全组,请确保该安全组允许到 OpenSearch Serverless 集合的安全组的出站 HTTPS 流量。还要确保 OpenSearch Serverless 集合的安全组允许来自您在配置传输流时指定的安全组的 HTTPS 流量。如果您对传输流和 OpenSearch Serverless 集合使用相同的安全组,请确保安全组入站规则允许 HTTPS 流量。有关安全组规则的更多信息,请参阅 Amazon VPC 文档中的安全组规则

授予 Kinesis Data Firehose 访问 Splunk 目的地的访问权限

当你使用 Splunk 目标时,Kinesis Data Firehose 将数据传送到你的 Splunk HTTP 事件收集器 (HEC) 端点。它还会将这些数据备份到您指定的 Amazon S3 存储桶,您可以选择使用自己拥有的Amazon KMS密钥进行 Amazon S3 服务器端加密。如果启用了错误记录,Kinesis Data Firehose 会将数据传输错误发送到您的 CloudWatch日志流。您也可以使用 Amazon Lambda 进行数据转换。如果您使用Amazon负载均衡器,请确保它是Classic Load Balancer。Kinesis Data Firehose 既不支持应用程序负载均衡器,也不支持网络负载均衡器。此外,启用基于持续时间的粘性会话,并禁用 Cookie 过期。有关如何执行此操作的信息,请参阅基于持续时间的会话粘性

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

使用以下访问策略允许 Kinesis Data Firehose 访问您的 S3 存储桶。如果您不拥有 S3 存储桶,请将其添加s3:PutObjectAcl到 Amazon S3 操作列表中,这将授予存储桶拥有者对 Kinesis Data Firehose 交付的对象的完全访问权限。该政策还授予 Kinesis Data Firehose 访问权限以 CloudWatch Amazon Lambda进行错误记录和数据转换。该政策还有允许访问 Amazon Kinesis Data Streams 的声明。如果您不使用 Kinesis Data Streams 作为数据源,则可以删除该语句。Kinesis 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 地址以公开进行访问。另外,通过解除对 Kinesis Data Firehose IP 地址的封锁,授予 Kinesis Data Firehose 访问你的 Splunk 平台的权限。Kinesis 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亚太地区(东京)

  • 35.183.92.64/26Canada (Central)

  • 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/26Africa (Cape Town)

  • 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用于中东(阿联酋)

授予 Kinesis Data Firehose 对 HTTP 端点目标的访问权限

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

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

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

重要

Kinesis Data Firehose 不使用 IAM 来访问由受支持的第三方服务提供商(包括 Datadog、Dynatrace、MongoDB LogicMonitor、New Relic、Splunk 或 Sumo Logic)拥有的 HTTP 端点。要访问受支持的第三方服务提供商拥有的指定 HTTP 端点目标,请联系该服务提供商,获取从 Kinesis 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服务委派权限的角色

重要

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

跨账户传输到 Amazon S3 目标

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

  1. 使用向 Kinesis Firehose 授予对 Amazon S3 目标的访问权限中所述的步骤,创建 IAM 角色。

    注意

    在这种情况下,访问策略中指定的 Amazon S3 存储桶归账户 B 所有。确保将访问策略中的 Amazon S3 操作s3:PutObjectAcl添加到访问策略中,该策略授予账户 B 对Amazon Kinesis Data Firehose e 交付的对象的完全访问权限。跨账户传输需要此权限。Kinesis 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 下创建 Kinesis Data Firehose 交付流。

跨账户向 OpenSearch服务目的地交付

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

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

  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" ] } ] }
  3. 使用您在步骤 1 中创建的 IAM 角色,在账户 A 下创建 Kinesis Data Firehose 交付流。创建交付流时,请使用Amazon CLI或 Kinesis Data Firehose API 并指定该ClusterEndpoint字段,而不是DomainARN为 “ OpenSearch 服务” 指定字段。

注意

要在一个Amazon账户中创建交付流,并在另一个账户中创建 OpenSearch 服务目标,您必须使用Amazon CLI或 Kinesis Data Firehose API。而不能使用 Amazon Web Services Management Console 来创建这种跨账户配置。

使用标签控制访问

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

CreateDeliveryStream

对于 CreateDeliveryStream 操作,请使用 aws:RequestTag 条件键。在以下示例中,MyKeyMyValue 表示标签的键和对应的值。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "firehose:CreateDeliveryStream", "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

其他 Kinesis Data Firehose

对于CreateDeliveryStreamTagDeliveryStream、和以外的所有 Kinesis Data Firehose 操作ListDeliveryStreams,请使用aws:RequestTag条件键。UntagDeliveryStream在以下示例中,MyKeyMyValue 表示标签的键和对应的值。

ListDeliveryStreams,使用firehose:ResourceTag条件键根据该传输流上的标签控制访问。

在以下示例中,MyKeyMyValue 表示标签的键和对应的值。该政策仅适用于具有值为的标签的 Data FirehMyKey ose 交付流MyValue。有关根据资源标签控制访问的更多信息,请参阅 IAM 用户指南中的使用标签控制对Amazon资源的访问

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