使用 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 授予对您的 Amazon SSimple Storage Service (Amazon S3) 存储桶、Amazon Redshift 集群 OpenSearch 服务集群,以及使用 Datadog、Dynatrace 时所需的访问权限 LogicMonitor、MongoDB、New Relic、Splunk 或 Sumo Logic 作为目的地。最后,您将在本主题中找到有关如何配置 Kinesis Data Firehose 以使其能够将数据传输到属于其他目的地的指南Amazon账户。管理所有这些访问形式的技术是Amazon Identity and Access Management(我是)。有关 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条件上下文密钥用于确保只有 Kinesis Data Firehose 活动源自你的Amazon账户可以担任此 IAM 角色。有关防止未经授权使用 IAM 角色的更多信息,请参阅混淆代理人问题在里面IAM 用户指南.

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

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

如果您的传输流执行数据格式转换,Kinesis Data Firehose 会引用存储在Amazon Glue. 为了 Kinesis Data Firehose 提供必要的访问权限Amazon Glue,请将以下声明添加到您的政策中。有关如何查找表的 ARN 的信息,请参阅指定AmazonGlue 资源 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支持。有关以下地区的更多信息Amazon Glue支持,请参阅https://docs.aws.amazon.com/general/latest/gr/glue.html

向 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资源,请参阅创建向Amazon服务在里面IAM 用户指南.

要了解如何向 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资源,请参阅创建向Amazon服务在里面IAM 用户指南.

对Amazon Redshift 集群的 VPC 访问权限

如果您的 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/27加拿大 (中部)

  • 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/27为非洲(开普敦)

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

  • 108.136.221.64/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资源,请参阅创建向Amazon服务在里面IAM 用户指南.

要了解如何授予 Kinesis Data Firehose 访问权限 OpenSearch 另一个账户中的服务集群,请参阅跨账户配送到 OpenSearch服务目的地.

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

如果你的 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 服务域用途或其他用途。如果您指定了不同的安全组,请确保它允许出站 HTTPS 流量进入 OpenSearch 服务域的安全组。还要确保 OpenSearch Service Domain 的安全组允许来自您在配置传输流时指定的安全组的 HTTPS 流量。如果您对传输流和 OpenSearch 服务域,确保安全组入站规则允许 HTTPS 流量。有关安全组规则的更多信息,请参阅安全组规则在Amazon VPC 文档中。

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

当你使用 Splunk 目标时,Kinesis Data Firehose 会将数据传送到你的 Splunk HTTP 事件收集器 (HEC) 终端节点。它还会将这些数据备份到您指定的 Amazon Simple Storage Service(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资源,请参阅创建向Amazon服务在里面IAM 用户指南.

在 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/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亚太地区(雅加达)

授予 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、 LogicMonitor、MongoDB、New Relic、Splunk 或 Sumo Logic。要访问由支持的第三方服务提供商拥有的指定 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资源,请参阅创建向Amazon服务在里面IAM 用户指南.

重要

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

向 Amazon S3 目标进行跨账户传输

您可以使用Amazon CLI或者使用 Kinesis Data Firehose API 将交付流合而为一Amazon目标为 Amazon S3 目标的账户处于不同的账户中。以下过程显示了配置账户 A 拥有的 Kinesis Data Firehose 传输流以将数据传输到账户 B 拥有的 Amazon S3 存储桶的示例。

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

    注意

    在本例中,访问策略中指定的 Amazon S3 存储桶归账户 B 所有。一定要添加s3:PutObjectAcl进入访问策略中的 Amazon S3 操作列表,该策略授予账户 B 对 Amazon Kinesis Data Firehose 交付的对象的完全访问权限。此权限是跨账户交付所必需的。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 传输流并将其配置为将数据传输到 OpenSearch 账户 B 拥有的服务目标。

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

  2. 要允许您在上一步中创建的 IAM 角色访问,请创建一个 OpenSearch 账户 B 下的服务策略。以下 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 来创建这种跨账户配置。

使用标签控制访问

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

CreateDeliveryStream 和 TagDeliveryStream

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

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

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 的其他操作

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

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

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

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