本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用 Amazon Kinesis Data Firehose
以下各节介绍如何控制对您的 Kinesis Data Firehose 资源的访问权限。它们涵盖的信息包括如何授予应用程序访问权限,使其能够将数据发送到您的 Kinesis Data Firehose 传输流。它们还描述了如何授予 Kinesis Data Firehose 访问您的亚马逊Simple Storage Service (Amazon S3) 存储桶、Amazon Redshift ft 集群或亚马逊 OpenSearch 服务集群的访问权限,以及使用 Datadog、Dynatrace、MongoDB LogicMonitor、New Relic、Splunk 或 Sumo Logic 作为目的地时所需的访问权限。最后,您将在本主题中找到有关如何配置 Kinesis Data Firehose 的指南,以便它可以将数据传送到属于其他Amazon账户的目的地。管理所有这些访问形式的技术是Amazon Identity and Access Management (IAM)。有关 IAAM 的更多信息,请参阅什么是 IAAM? 。
目录
- 授予您的应用程序访问您的 Kinesis Data Firehose 资源的权限
- 允许 Kinesis Data Firehose 担任 IAM 角色
- 授予 Kinesis Data Firehose 访问权限以Amazon Glue进行数据格式转换
- 向 Kinesis Data Firehose 访问权限
- 授予 Kinesis Data Firehose 访问Amazon Redshift ft 目的地的
- 授予 Kinesis Data Firehose 访问公共 OpenSearch 服务目的地的权限
- 授予 Kinesis Data Firehose 对 VPC 中 OpenSearch 服务目标的访问权限
- 授予 Kinesis Data Firehose 对公共 OpenSearch无服务器目标的访问权限
- 授予 Kinesis Data Firehose 对 VPC 中 OpenSearch无服务器目标的访问权限
- 授予 Kinesis Data Firehose 访问 Splunk 目的地的权限
- 在 VPC 中访问 Splunk
- 授予 Kinesis Data Firehose 访问 HTTP 端点目标的权限
- 跨账户传输到 Amazon S3 目标
- 跨账户交付到 OpenSearch服务目的地
- 使用标签控制访问
授予您的应用程序访问您的 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 a、欧洲(巴林)、欧洲(巴林)、欧洲(苏黎世)、亚太地区(海德拉巴)、欧洲(苏黎世)、亚太地区(海德拉巴)、中东(海德拉巴)、中东(海德拉巴)、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 目标时,Kinesis Data Firehose 会将数据传输到您的 S3 存储桶,并且可以选择使用您拥有的Amazon KMS密钥进行数据加密。如果启用了错误记录,Kinesis Data Firehose 还会向您的 CloudWatch 日志组和直播发送数据传输错误。在创建交付流时,您需要拥有 IAAM 角色。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 ft 目的地的
在使用Amazon Redshift ft 目的地时授予 Kinesis Data Firehose 访问权限时,请参阅以下内容。
IAM 角色和访问策略
当你使用Amazon Redshift ft 目的地时,Kinesis Data Firehose 会将数据作为中间位置传输到你的 S3 存储桶。它可以选择使用您的 Amazon KMS 密钥对数据进行加密。然后,Kinesis Data Firehose 将数据从 S3 存储桶加载到你的Amazon Redshift ft 集群。如果启用了错误记录,Kinesis Data Firehose 还会向您的 CloudWatch 日志组和直播发送数据传输错误。Kinesis Data Firehose 使用指定的 Amazon Redshift 用户名和密码访问您的集群,并使用 IAM 角色访问指定的存储桶、密钥、 CloudWatch 日志组和流。在创建交付流时,您需要拥有 IAAM 角色。
使用以下访问策略允许 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 ft 集群
如果您的 Amazon Redshift 集群位于虚拟私有云 (VPC) 中,则必须通过公有 IP 地址对其进行公开访问。此外,通过解锁 Kinesis Data Firehose IP 地址,授予 Kinesis Data Firehose 访问您的Amazon Redshift ft 集群的权限。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
亚太地区(雅加达) -
3.28.159.32/27
适用于中东(阿联酋) -
18.100.71.96/27
欧洲(西班牙) -
16.62.183.32/27
欧洲(苏黎世) -
18.60.192.128/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 日志组和流。在创建交付流时,您需要拥有 IAAM 角色。
使用以下访问策略使 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 服务域使用的相同安全组或其他安全组。如果指定了其他安全组,请确保该安全组允许到 Service 域的安全组的出站 HTTPS 流量。 OpenSearch 还要确保 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 日志组和流。在创建交付流时,您需要拥有 IAAM 角色。
使用以下访问策略使 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 无服务器集合位于 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 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 过期。有关如何执行此操作的信息,请参阅基于持续时间的会话粘性。
在创建交付流时,您需要拥有 IAAM 角色。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 不使用 IAAM 访问 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/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
适用于中东(阿联酋) -
18.100.194.0/26
欧洲(西班牙) -
16.62.183.64/26
欧洲(苏黎世) -
18.60.192.192/26
亚太地区(海得拉巴)
授予 Kinesis Data Firehose 访问 HTTP 端点目标的权限
您可以使用 Kinesis Data Firehose 将数据传送到任何 HTTP 端点目标。Kinesis Data Firehose 还会将这些数据备份到您指定的Amazon S3 存储桶中,您可以选择使用自己拥有的Amazon KMS密钥进行 Amazon S3 服务器端加密。如果启用了错误记录,Kinesis Data Firehose 会向您的 CloudWatch 日志流发送数据传输错误。您也可以使用 Amazon Lambda 进行数据转换。
在创建交付流时,您需要拥有 IAAM 角色。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、Sumo Logic、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 存储桶的示例。
-
使用向 Kines is S3 目标授予对 Kinesis Amazon S3 目标的访问权限中所述的步骤。
注意
在本例中,访问策略中指定的 Amazon S3 存储桶归账户 B 所有。确保将您
s3:PutObjectAcl
添加到访问策略中的 Amazon S3 操作列表中,该策略授予账户 B 对Amazon Kinesis Data Firehose e 交付的对象的完全访问权限。需要此权限才能进行跨账户传输。Kinesis Data Firehose 将请求中的x-amz-acl “” 标头设置为 “bucket-owner-full-control”。 -
要允许之前创建的 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
/*" ] } ] } -
使用您在步骤 1 中创建的 IAM 角色,在账户 A 下创建 Kinesis Data Firehose 交付流。
跨账户交付到 OpenSearch服务目的地
您可以使用Amazon CLI或 Kinesis Data Firehose API 在一个Amazon账户中创建传输流,在另一个账户中创建 OpenSearch 服务目标。以下过程显示了如何在账户 A 下创建 Kinesis Data Firehose 传输流并将其配置为将数据传送到账户 B 拥有的 OpenSearch 服务目标的示例。
-
使用中所述的步骤在账户 A 下创建 IAM 角色授予 Kinesis Data Firehose 访问公共 OpenSearch 服务目的地的权限。
-
要允许您在上一步中创建的 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" ] } ] } -
使用您在步骤 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
条件键。在以下示例中,MyKey
和 MyValue
表示标签的键和对应的值。
{ "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
对于除CreateDeliveryStream
、TagDeliveryStream
、和之外的所有 Kinesis Data Firehose 操作ListDeliveryStreams
,请使用aws:RequestTag
条件键。UntagDeliveryStream
在以下示例中,MyKey
和 MyValue
表示标签的键和对应的值。
ListDeliveryStreams
,使用firehose:ResourceTag
条件密钥根据该传输流上的标签控制访问权限。
在以下示例中,MyKey
和 MyValue
表示标签的键和对应的值。该政策仅适用于标签名为MyKey
、值为的 Data Firehose 传输流MyValue
。有关基于资源标签控制访问的更多信息,请参阅 IAM 用户指南中的使用标签控制对Amazon资源的访问权限。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": "firehose:DescribeDeliveryStream", "Resource": "*", "Condition": { "StringEquals": { "firehose:ResourceTag/MyKey": "MyValue" } } } ] }