使用 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 集群或 Amazon OpenSearch 服务集群的权限,以及使用 Datadog、Dynatrace、LogicMonitor、MongoDB、New Relic、Splunk 或相扑时所需的访问权限。逻辑作为你的目的地。本主题指南的最后还会介绍如何配置 Kinesis Data Firehose,以便它可以向属于其他目标传输数据。Amazonaccount. 管理所有这些形式的访问的技术是: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 可以担任该角色。

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

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

授予 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" }

授予 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 用户指南.

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对于 来说为AmazonGovCloud(美国东部)

  • 52.61.204.160/27对于 来说为AmazonGovCloud(美国西部)

  • 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适用于亚太地区(大阪)

有关如何取消阻止 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 Service 集群的访问权限,请参阅跨账户传输到 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 Service 域发送数据时使用。您可以使用 OpenSearch 服务域使用的相同安全组或其他安全组。如果您指定了不同的安全组,请确保它允许出站 HTTPS 流量到 OpenSearch Service 域的安全组。另外,还要确保 OpenSearch Service 域的安全组允许来自您在配置传输流时指定的安全组的 HTTPS 流量。如果您对传输流和 OpenSearch Service 域使用相同的安全组,请确保安全组入站规则允许 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资源,请参阅创建向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对于 来说为AmazonGovCloud(美国东部)

  • 52.61.204.192/26对于 来说为AmazonGovCloud(美国西部)

  • 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适用于亚太地区(大阪)

授予 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 或相扑逻辑)拥有的 HTTP 终端节点目标。要访问受支持的第三方服务提供商拥有的指定 HTTP 端点目标,请联系该服务提供商以获取 API 密钥或启用从 Kinesis 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": [ "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” 标头。

  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 Search 服务目标的账户。以下过程展示了一个示例,该示例展示了如何在账户 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 服务。

注意

在一个中创建传输流AmazonOpenSearch 服务目标位于另一个账户中的帐户,您必须使用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 操作CreateDeliveryStreamTagDeliveryStreamUntagDeliveryStream, 和ListDeliveryStreams,使用aws:RequestTag条件键。在以下示例中,MyKeyMyValue 表示标签的键和对应的值。

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