本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用 Amazon Data Firehose 控制访问权限
以下几节介绍了如何控制对 Amazon Data Firehose 资源的访问以及来自这些资源的访问。涵盖的信息包括如何授予您的应用程序访问这些资源的权限,以便可以向您的 Firehose 流发送数据。它们还描述了如何授予 Amazon Data 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
" ] } ] }
授予 Firehose 对私有 Amazon MSK 集群的访问权限
如果 Firehose 流的源是私有 Amazon MSK 集群,则使用类似本例的策略。
{ "Version": "2012-10-17", "Statement": [ { "Principal": { "Service": [ "firehose.amazonaws.com" ] }, "Effect": "Allow", "Action": [ "kafka:CreateVpcConnection" ], "Resource": "cluster-arn" } ] }
您必须在集群的基于资源的策略中添加这样的策略,以向 Firehose 服务主体授予调用 Amazon MSK CreateVpcConnection
API 操作的权限。
允许 Firehose 担任 IAM 角色
本节介绍了授予 Amazon Data Firehose 访问权限,以摄取、处理数据并将数据从源传输到目的地的权限和策略。
注意
如果您使用控制台创建 Firehose 流,并选择创建新角色的选项,会将所需的信任策略 Amazon 附加到该角色。如果您希望 Amazon Data Firehose 使用现有 IAM 角色或者您自己创建角色,请将以下信任策略附加到该角色,以便 Amazon Data Firehose 可以承担该角色。编辑策略以account-id
替换为您的 Amazon 账户 ID。有关如何修改角色的信任关系的更多信息,请参阅修改角色。
Amazon Data Firehose 使用 IAM 角色来获取 Firehose 流处理和传输数据所需的权限。确保将以下信任策略附加到该角色,以便 Amazon Data Firehose 可以承担该角色。
{ "Version": "2012-10-17", "Statement": [{ "Sid": "", "Effect": "Allow", "Principal": { "Service": "firehose.amazonaws.com" }, "Action": "sts:AssumeRole", }] }
此策略使用sts:ExternalId
条件上下文键来确保只有来自 Amazon 账户的 Amazon Data Firehose 活动才能承担此 IAM 角色。有关防止未经授权使用 IAM 角色的更多信息,请参阅《IAM 用户指南》中的混淆代理问题。
如果您选择 Amazon 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" }] }
授予 Firehose 访问的权限以 Amazon Glue 进行数据格式转换
如果您的 Firehose 流执行数据格式转换,Amazon Data Firehose 会引用存储在 Amazon Glue中的表定义。要向 Amazon Data Firehose 授予对的必要访问权限 Amazon Glue,请将以下语句添加到您的策略。有关如何查找表的 ARN 的信息,请参阅指定 Glue 资源 Amazon 。 ARNs
[{ "Effect": "Allow", "Action": [ "glue:GetTable", "glue:GetTableVersion", "glue:GetTableVersions" ], "Resource": "
table-arn
" }, { "Sid": "GetSchemaVersion", "Effect": "Allow", "Action": [ "glue:GetSchemaVersion" ], "Resource": ["*"] }]
从架构注册表获取架构的建议策略没有资源限制。有关更多信息,请参阅《开发人员指南》中的用于反序列化程序的 IAM 示例。 Amazon Glue
授予 Firehose 访问 Amazon 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:::
amzn-s3-demo-bucket
", "arn:aws:s3:::amzn-s3-demo-bucket
/*" ] }, { "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:::amzn-s3-demo-bucket/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 对其他账户中的 Amazon S3 目的地的访问权限,请参阅跨账户传输到 Amazon S3 目的地。
授予 Firehose 对Amazon S3 表的访问权限
创建 Firehose 流之前,您必须拥有 IAM 角色。使用以下步骤创建策略和 IAM 角色。Firehose 承担此 IAM 角色并执行所需的操作。
登录到 Amazon Web Services Management Console 并打开 IAM 控制台(网址为)https://console.aws.amazon.com/iam/
创建策略并在策略编辑器中选择 JSON。添加以下内联策略,以向 Amazon S3 授予读/写权限、更新数据目录中的表的权限等。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "S3TableAccessViaGlueFederation", "Effect": "Allow", "Action": [ "glue:GetTable", "glue:GetDatabase", "glue:UpdateTable" ], "Resource": [ "arn:aws:glue:<region>:<account-id>:catalog/s3tablescatalog/*", "arn:aws:glue:<region>:<account-id>:catalog/s3tablescatalog", "arn:aws:glue:<region>:<account-id>:catalog", "arn:aws:glue:<region>:<account-id>:database/*", "arn:aws:glue:<region>:<account-id>:table/*/*" ] }, { "Sid": "S3DeliveryErrorBucketPermission", "Effect": "Allow", "Action": [ "s3:AbortMultipartUpload", "s3:GetBucketLocation", "s3:GetObject", "s3:ListBucket", "s3:ListBucketMultipartUploads", "s3:PutObject" ], "Resource": [ "arn:aws:s3:::<error delivery bucket>", "arn:aws:s3:::<error delivery bucket>/*" ] }, { "Sid": "RequiredWhenUsingKinesisDataStreamsAsSource", "Effect": "Allow", "Action": [ "kinesis:DescribeStream", "kinesis:GetShardIterator", "kinesis:GetRecords", "kinesis:ListShards" ], "Resource": "arn:aws:kinesis:<region>:<account-id>:stream/<stream-name>" }, { "Sid": "RequiredWhenDoingMetadataReadsANDDataAndMetadataWriteViaLakeformation", "Effect": "Allow", "Action": [ "lakeformation:GetDataAccess" ], "Resource": "*" }, { "Sid": "RequiredWhenUsingKMSEncryptionForS3ErrorBucketDelivery", "Effect": "Allow", "Action": [ "kms:Decrypt", "kms:GenerateDataKey" ], "Resource": [ "arn:aws:kms:<region>:<account-id>:key/<KMS-key-id>" ], "Condition": { "StringEquals": { "kms:ViaService": "s3.<region>.amazonaws.com" }, "StringLike": { "kms:EncryptionContext:aws:s3:arn": "arn:aws:s3:::<error delivery bucket>/prefix*" } } }, { "Sid": "LoggingInCloudWatch", "Effect": "Allow", "Action": [ "logs:PutLogEvents" ], "Resource": [ "arn:aws:logs:<region>:<account-id>:log-group:<log-group-name>:log-stream:<log-stream-name>" ] }, { "Sid": "RequiredWhenAttachingLambdaToFirehose", "Effect": "Allow", "Action": [ "lambda:InvokeFunction", "lambda:GetFunctionConfiguration" ], "Resource": [ "arn:aws:lambda:<region>:<account-id>:function:<function-name>:<function-version>" ] } ] }
该策略有语句,这些语句允许访问 Amazon Kinesis Data Streams、调用 Lambda 函数和访问密钥。 Amazon KMS 如果您不使用这些资源中的任何一个,则可以删除相应的语句。如果启用了错误日志记录,则 Amazon Data Firehose 还会将数据传输错误发送到您的 CloudWatch 日志组和流。您必须配置日志组和日志流名称才能使用此选项。对于日志组和日志流名称,请参阅使用日志监控 Amazon Data Firehose CloudWatch 。
在内联策略中,将<error delivery bucket>
替换为您的 Amazon S3 存储桶名称,aws-account-id
将区域替换为有效的 Amazon Web Services 账户 号码和资源区域。
创建策略后,在上打开 IAM 控制台,https://console.aws.amazon.com/iam/
对于服务或使用案例,选择 Kinesis。对于用例,请选择 Kinesis Firehose。
在下一页上,选择上一步中创建的策略附加到该角色。在查看页面上,您会发现信任策略已附加到此角色,以授予 Firehose 服务承担此角色的权限。在您创建角色时,Amazon Data Firehose 可以承担该角色以对 Amazon Glue 和 S3 存储桶执行所需的操作。将 Firehose 服务主体添加到所创建角色的信任策略中。有关更多信息,请参阅 允许 Firehose 担任 IAM 角色。
向 Firehose 授予 Apache Iceberg 表目的地的访问权限
在使用 Amazon Glue创建 Firehose 流和 Apache Iceberg 表之前,您必须具有 IAM 角色。使用以下步骤创建策略和 IAM 角色。Firehose 承担此 IAM 角色并执行所需的操作。
-
登录到 Amazon Web Services Management Console 并打开 IAM 控制台(网址为)https://console.aws.amazon.com/iam/
。 -
创建策略并在策略编辑器中选择 JSON。
-
添加以下内联策略,以向 Amazon S3 授予读/写权限、更新数据目录中的表的权限等。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "glue:GetTable", "glue:GetDatabase", "glue:UpdateTable" ], "Resource": [ "arn:aws:glue:
<region>:<aws-account-id>
:catalog", "arn:aws:glue:<region>:<aws-account-id>
:database/*", "arn:aws:glue:<region>:<aws-account-id>
:table/*/*" ] }, { "Effect": "Allow", "Action": [ "s3:AbortMultipartUpload", "s3:GetBucketLocation", "s3:GetObject", "s3:ListBucket", "s3:ListBucketMultipartUploads", "s3:PutObject", "s3:DeleteObject" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket
", "arn:aws:s3:::amzn-s3-demo-bucket
/*" ] }, { "Effect": "Allow", "Action": [ "kinesis:DescribeStream", "kinesis:GetShardIterator", "kinesis:GetRecords", "kinesis:ListShards" ], "Resource": "arn:aws:kinesis:<region>:<aws-account-id>
:stream/<stream-name>
" }, { "Effect": "Allow", "Action": [ "kms:Decrypt", "kms:GenerateDataKey" ], "Resource": [ "arn:aws:kms:<region>:<aws-account-id>
:key/<key-id>
" ], "Condition": { "StringEquals": { "kms:ViaService": "s3.region.amazonaws.com" }, "StringLike": { "kms:EncryptionContext:aws:s3:arn": "arn:aws:s3:::amzn-s3-demo-bucket
/prefix*" } } }, { "Effect": "Allow", "Action": [ "logs:PutLogEvents" ], "Resource": [ "arn:aws:logs:<region>:<aws-account-id>
:log-group:<log-group-name>
:log-stream:<log-stream-name>
" ] }, { "Effect": "Allow", "Action": [ "lambda:InvokeFunction", "lambda:GetFunctionConfiguration" ], "Resource": [ "arn:aws:lambda:<region>:<aws-account-id>
:function:<function-name>:<function-version>
" ] } ] }此策略有一项语句,该语句允许访问 Amazon Kinesis Data Streams、调用 Lambda 函数和访问 KMS 密钥。如果您不使用这些资源中的任何一个,则可以删除相应的语句。
如果启用了错误日志记录,则 Firehose 还会将数据传输错误发送到您的 CloudWatch 日志组和流。为此,您必须配置日志组和日志流名称。对于日志组和日志流名称,请参阅使用日志监控 Amazon Data Firehose CloudWatch 。
-
在内联策略中,将
amzn-s3-demo-bucket
替换为您的 Amazon S3 存储桶名称, aws-account-id将区域替换为有效的 Amazon Web Services 账户 号码和资源区域。注意
此角色授予对数据目录中的所有数据库和表的权限。如果需要,则您可以仅向特定的表和数据库授予权限。
-
创建策略后,打开 IAM 控制台
并创建一个 IAM 角色,将 Amazon Web Services 服务 作为可信实体类型。 -
对于服务或使用案例,选择 Kinesis。对于使用案例,选择 Kinesis Firehose。
-
在下一页上,选择上一步中创建的策略附加到该角色。在查看页面上,您会发现信任策略已附加到此角色,以授予 Firehose 服务承担此角色的权限。在您创建角色时,Amazon Data Firehose 可以承担该角色以对 Amazon Glue 和 S3 存储桶执行所需的操作。
授予 Firehose 对 Amazon Redshift 目的地的访问权限
在使用 Amazon Redshift 目的地时授予对 Amazon Data Firehose 的访问权限时,请参阅以下内容。
IAM 角色和访问策略
在使用 Amazon Redshift 目的地时,Amazon Data Firehose 会将数据传输到 S3 存储桶作为中间位置。它可以选择使用您拥有的 Amazon KMS 密钥进行数据加密。然后,Amazon Data Firehose 将数据从 S3 存储桶加载到您的 Amazon Redshift 预置集群或 Amazon Redshift Serverless 工作组。如果启用了错误日志记录,则 Amazon Data Firehose 还会将数据传输错误发送到您的 CloudWatch 日志组和流。Amazon Data Firehose 使用指定的 Amazon Redshift 用户名和密码,来访问您的预置集群或 Amazon Redshift Serverless 工作组,并使用 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:::
amzn-s3-demo-bucket
", "arn:aws:s3:::amzn-s3-demo-bucket
/*" ] }, { "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:::amzn-s3-demo-bucket/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 地址对其进行公开访问。此外,通过取消阻止 Amazon Data Firehose IP 地址,授予 Amazon Data Firehose 对 Amazon Redshift 预置集群或 Amazon Redshift Serverless 工作组的访问权限。目前,Amazon Data Firehose 为每个可用区域使用一个 CIDR 块。
区域 | CIDR 块 |
---|---|
美国东部(俄亥俄州) |
|
美国东部(弗吉尼亚州北部) | 52.70.63.192/27 |
美国西部(加利福尼亚北部) | 13.57.135.192/27 |
美国西部(俄勒冈州) | 52.89.255.224/27 |
Amazon GovCloud (美国东部) | 18.253.138.96/27 |
Amazon GovCloud (美国西部) | 52.61.204.160/27 |
加拿大(中部) | 35.183.92.128/27 |
加拿大西部(卡尔加里) | 40.176.98.192/27 |
亚太地区(香港) | 18.162.221.32/27 |
Asia Pacific (Mumbai) | 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 |
亚太地区(泰国) | 43.208.112.96/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 |
墨西哥(中部) | 78.12.207.32/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 |
亚太地区(马来西亚) | 43.216.58.0/27 |
有关如何取消阻止 IP 地址的更多信息,请参阅《Amazon Redshift 入门指南》中授予访问集群的权限的步骤。
授予 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:::
amzn-s3-demo-bucket
", "arn:aws:s3:::amzn-s3-demo-bucket
/*" ] }, { "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:::amzn-s3-demo-bucket/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 服务集群的访问权限,请参阅。跨账户传输到 S OpenSearch ervice 目的地
授予 Firehose 对 VPC 中 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
重要
创建 Firehose 流后,请勿撤销这些权限。如果您撤销这些权限,则每当服务尝试查询或更新时,您的 Firehose 流都会降级或停止向 OpenSearch 您的服务域传输数据。 ENIs
重要
在私有 VPC 中指定将数据传输到目的地的子网时,请确保所选子网中有足够数量的免费 IP 地址。如果指定子网中没有可用的免费 IP 地址,则 Firehose 将无法 ENIs 为私有 VPC 中的数据传输创建或添加,并且传输将降级或失败。
在创建或更新 Firehose 流时,您可以指定一个安全组,以便 Firehose 在向服务域发送数据时使用。 OpenSearch 您可以使用 S OpenSearch ervice 域使用的相同安全组,也可以使用其他安全组。如果您指定了其他安全组,确保该安全组允许出站 HTTPS 流量进入 OpenSearch服务域的安全组。还要确保 OpenSearch 服务域的安全组允许来自您在配置 Firehose 流时指定的安全组的 HTTPS 流量。如果您对 Firehose 流和 OpenSearch 服务域使用相同的安全组,确保安全组入站规则允许 HTTPS 流量。有关安全组规则的更多信息,请参阅 Amazon VPC 文档中的安全组规则。
授予 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:::
amzn-s3-demo-bucket
", "arn:aws:s3:::amzn-s3-demo-bucket
/*" ] }, { "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:::amzn-s3-demo-bucket/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 服务委派权限。
授予 Firehose 对 VPC 中 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
重要
创建 Firehose 流后,请勿撤销这些权限。如果您撤销这些权限,则每当服务尝试查询或更新时,您的 Firehose 流都会降级或停止向 OpenSearch 您的服务域传输数据。 ENIs
重要
在私有 VPC 中指定将数据传输到目的地的子网时,请确保所选子网中有足够数量的免费 IP 地址。如果指定子网中没有可用的免费 IP 地址,则 Firehose 将无法 ENIs 为私有 VPC 中的数据传输创建或添加,并且传输将降级或失败。
在创建或更新 Firehose 流时,您可以指定一个安全组,以便 Firehose 在向无服务器集合发送数据时使用。 OpenSearch 您可以使用与 OpenSearch Serverless 集合相同的安全组或其他安全组。如果您指定了其他安全组,确保该安全组允许出站 HTTPS 流量进入 OpenSearch 无服务器集合的安全组。还要确保 OpenSearch无服务器集合的安全组允许来自您在配置 Firehose 流时指定的安全组的 HTTPS 流量,该流量来自您在配置 Firehose 流时指定的安全组。如果您对 Firehose 流和 OpenSearch 无服务器集合使用相同的安全组,确保安全组入站规则允许 HTTPS 流量。有关安全组规则的更多信息,请参阅 Amazon VPC 文档中的安全组规则。
授予 Firehose 访问 Splunk 目的地的权限
在使用 Splunk 目的地时,Amazon Data Firehose 会将数据传输到 Splunk HTTP 事件收集器(HEC)端点。还会将该数据备份到您指定的 Amazon S3 存储桶,您可以选择使用您拥有的 Amazon KMS 密钥进行 Amazon S3 服务器端加密。如果启用了错误日志记录,则 Firehose 会将数据传输错误发送到您的 CloudWatch日志流。您还可以使用 Amazon Lambda 进行数据转换。
如果您使用 Amazon 负载均衡器,确保使用的是经典负载均衡器或 Application 负载均衡器。此外,使用为经典负载均衡器禁用的 Cookie 有效期启用基于持续时间的粘接会话,应用程序负载均衡器的有效期设置为最大值(7 天)。有关如何执行此操作的信息,请参阅经典负载均衡器或应用程序负载均衡器基于持续时间的会话粘性。
创建 Firehose 流时,您必须有 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:::
amzn-s3-demo-bucket
", "arn:aws:s3:::amzn-s3-demo-bucket
/*" ] }, { "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:::amzn-s3-demo-bucket/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 地址以公开进行访问。此外,还要取消阻止 Amazon Data Firehose IP 地址,以便为 Amazon Data Firehose 授予对 Splunk 平台的访问权限。Amazon Data Firehose 目前使用以下 CIDR 块。
区域 | CIDR 块 |
---|---|
美国东部(俄亥俄州) |
|
美国东部(弗吉尼亚州北部) | 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 |
Amazon GovCloud (美国东部) | 18.253.138.192/26 |
Amazon GovCloud (美国西部) | 52.61.204.192/26 |
亚太地区(香港) | 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 |
亚太地区(泰国) | 43.208.112.128/26 |
亚太地区(东京) | 13.230.21.0/27, 13.230.21.32/27 |
加拿大(中部) | 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 |
欧洲地区(西班牙) | 18.100.194.0/26 |
欧洲(斯德哥尔摩) | 13.53.191.0/26 |
中东(巴林) | 15.185.91.64/26 |
墨西哥(中部) | 78.12.207.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 |
亚太地区(马来西亚) | 43.216.44.192/26 |
使用 Amazon Data Firehose 将 VPC 流日志摄取到 Splunk
要详细了解如何创建 VPC 流日志订阅、发布到 Firehose 以及将 VPC 流日志发送到支持的目的地,请参阅使用 Amazon Data Firehose 将 VPC 流日志摄取到 Splunk 中
访问 Snowflake 或 HTTP 端点
当目的地是 HTTP 端点或 Snowflake 公有集群时,没有特定于 Amazon Data Firehose 的 Amazon IP 地址范围子集。
要将 Firehose 添加到公有 Snowflake 集群的允许列表或您的公有 HTTP 或 HTTPS 端点,请将所有当前 Amazon IP 地址范围添加到您的入口规则。
注意
通知并不总是来源于与其关联主题相同的 Amazon 区域的 IP 地址。您必须包括所有区域 Amazon 的 IP 地址范围。
授予 Firehose 访问 Snowflake 目的地的权限
当您使用 Snowflake 作为目的地时,Firehose 会使用您的 Snowflake 账户 URL 将数据传输到 Snowflake 账户。还会将错误数据备份到您指定的 Amazon Simple Storage Service 存储桶中,您可以选择使用您拥有的 Amazon Key Management Service 密钥进行 Amazon S3 服务器端加密。如果启用了错误日志记录,则 Firehose 会将数据传输错误发送到您的 CloudWatch 日志流。
创建 Firehose 流之前,您必须拥有 IAM 角色。Firehose 承担该 IAM 角色,并获得对指定存储桶、密钥以及 CloudWatch 日志组和流的访问权限。为使 Firehose 能够访问您的 S3 存储桶,请使用以下访问策略。如果您没有 S3 存储桶,请将 s3:PutObjectAcl
添加到 Amazon Simple Storage Service 操作列表,这将授予存储桶所有者对 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:::
amzn-s3-demo-bucket
", "arn:aws:s3:::amzn-s3-demo-bucket
/*" ] }, { "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:::amzn-s3-demo-bucket
/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
的以下内容中的入口。有关更多信息,请参阅 Snowflake User Guide 中的 Creating network rule
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-02bfb5966cc59b2af vpce-09e707674af878bf2 vpce-049b52e96cc1a2165 vpce-0bb6c7b7a8a86cdbb vpce-03b22d599f51e80f3 vpce-01d60dc60fc106fe1 vpce-0186d20a4b24ecbef vpce-0533906401a36e416 vpce-05111fb13d396710e vpce-0694613f4fbd6f514 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-0856d14310857b545 |
欧洲地区(法兰克福) |
vpce-068dbb7d71c9460fb vpce-0a7a7f095942d4ec9 |
欧洲地区(爱尔兰) |
vpce-06857e59c005a6276 vpce-04390f4f8778b75f2 vpce-011fd2b1f0aa172fd |
亚太地区(东京) |
vpce-06369e5258144e68a vpce-0f2363cdb8926fbe8 |
亚太地区(新加坡) |
vpce-049cd46cce7a12d52 vpce-0e8965a1a4bdb8941 |
亚太地区(首尔) |
vpce-0aa444d9001e1faa1 vpce-04a49d4dcfd02b884 |
亚太地区(悉尼) |
vpce-048a60a182c52be63 vpce-03c19949787fd1859 |
亚太地区(孟买) |
vpce-0d68cb822f6f0db68 vpce-0517d32692ffcbde2 |
欧洲地区(伦敦) |
vpce-0fd1874a0ba3b9374 vpce-08091b1a85e206029 |
南美洲(圣保罗) |
vpce-065169b8144e4f12e vpce-0493699f0e5762d63 |
加拿大(中部) |
vpce-07e6ed81689d5271f vpce-0f53239730541394c |
欧洲地区(巴黎) |
vpce-09419680077e6488a vpce-0ea81ba2c08140c14 |
亚太地区(大阪) |
vpce-0a9f003e6a7e38c05 vpce-02886510b897b1c5a |
欧洲地区(斯德哥尔摩) |
vpce-0d96410833219025a vpce-060a32f9a75ba969f |
亚太地区(雅加达) |
vpce-00add4b9a25e5c649 vpce-004ae2de34338a856 |
授予 Firehose 对 HTTP 端点目的地的访问权限
您可以使用 Amazon Data Firehose 将数据传输到任何 HTTP 端点目的地。Amazon Data Firehose 还会将该数据备份到您指定的 Amazon 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:::
amzn-s3-demo-bucket
", "arn:aws:s3:::amzn-s3-demo-bucket
/*" ] }, { "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:::amzn-s3-demo-bucket/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 端点传输数据。
Amazon MSK 的跨账户传输
当您从 Firehose 账户(例如账户 B)创建 Firehose 流,而源是其他账户( Amazon 账户 A)中的 MSK 集群时,您必须进行以下配置。
账户 A:
在 Amazon MSK 控制台中,选择预置的集群,然后选择属性。
在网络设置下,选择编辑并打开多 VPC 连接。
在安全设置下,选择编辑集群策略。
如果集群尚未配置策略,请选中包含 Firehose 服务主体和启用 Firehose 跨账户 S3 传输。 Amazon Web Services Management Console 将自动生成具有适当权限的策略。
-
如果集群已配置了策略,请向现有策略添加以下权限:
{ "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 }, }
在 Amazon 主体下,输入账户 B 的主体 ID。
在主题下,指定您需要 Firehose 流从中摄取数据的 Apache Kafka 主题。创建 Firehose 流后,您将无法更新此主题。
选择 Save changes(保存更改)
账户 B:
在 Firehose 控制台中,选择使用账户 B 创建 Firehose 流。
在源下,选择 Amazon Managed Streaming for Apache Kafka。
在源设置下,对于 Amazon Managed Streaming for Apache Kafka 集群,请在账户 A 中输入 Amazon MSK 集群的 ARN。
在主题下,指定您需要 Firehose 流从中摄取数据的 Apache Kafka 主题。创建 Firehose 流后,您将无法更新此主题。
-
在传输流名称中,指定 Firehose 流的名称。
在账户 B 中,当您创建 Firehose 流时,您必须拥有 IAM 角色(使用时默认创建 Amazon Web Services Management Console),该角色授予 Firehose 流对已配置主题的跨账户 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 APIs 在一个 Amazon 账户中创建 Firehose 流,而 Amazon S3 目标位于其他账户中。以下过程展示了一个示例,该示例配置账户 A 拥有的 Firehose 流,以向账户 B 拥有的 Amazon S3 存储桶传输数据。
-
使用授予 Firehose 对 Amazon S3 目的地的访问权限中所述的步骤,以账户 A 身份创建 IAM 角色。
注意
在本例中,访问策略中指定的 Amazon S3 存储桶由账户 B 拥有。务必将
s3:PutObjectAcl
添加到访问策略中的 Amazon S3 操作列表,该访问策略为账户 B 授予对 Amazon Data Firehose 传输的对象的完全访问权限。跨账户传输需要此权限。Amazon 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:::amzn-s3-demo-bucket
", "arn:aws:s3:::amzn-s3-demo-bucket
/*" ] } ] } -
使用您在步骤 1 中创建的 IAM 角色,以账户 A 身份创建 Firehose 流。
跨账户传输到 S OpenSearch ervice 目的地
您可以使用 Amazon CLI 或 Amazon Data Firehose APIs 在一个 Amazon 账户中创建 Firehose 流,而 OpenSearch 服务目标位于其他账户中。以下过程展示了一个示例,用于演示如何以账户 A 身份创建 Firehose 流,并对其进行配置,将数据传输到账户 B 拥有的 OpenSearch 服务目标。
-
使用 授予 Firehose 对公共 OpenSearch 服务目的地的访问权限 中所述的步骤以账户 A 身份创建 IAM 角色。
-
要允许上一步中创建的 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/" ] } ] } -
使用您在步骤 1 中创建的 IAM 角色,以账户 A 身份创建 Firehose 流。创建 Firehose 流时,请使用 Amazon CLI 或 Amazon Data Firehose, APIs 并指定该
ClusterEndpoint
字段而不是 “服务” 字段。DomainARN
OpenSearch
注意
要在一个 Amazon 账户中创建 Firehose 流,而 OpenSearch 服务目标位于其他账户中,您必须使用 Amazon CLI 或 Amazon Data Firehose。 APIs您不能使用 Amazon Web Services Management Console 创建此类跨账户配置。
使用标签控制访问
您可以使用 IAM 策略中的可选 Condition
元素(或 Condition
块),根据标签键和值微调对 Amazon Data Firehose 操作的访问。以下小节介绍了如何针对不同的 Amazon Data Firehose 操作执行上述操作。有关使用 Condition
元素以及您可在其内使用的运算符的更多信息,请参阅 IAM JSON 策略元素:条件。
CreateDeliveryStream
对于 CreateDeliveryStream
操作,请使用 aws:RequestTag
条件键。在以下示例中,MyKey
和 MyValue
表示标签的键和对应的值。有关更多信息,请参阅 了解标签基本知识。
{ "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
。
其他操作
对于 CreateDeliveryStream
、TagDeliveryStream
、UntagDeliveryStream
和 ListDeliveryStreams
之外的所有 Firehose 操作,请使用 aws:RequestTag
条件键。在以下示例中,MyKey
和 MyValue
表示标签的键和对应的值。
ListDeliveryStreams
,使用 firehose:ResourceTag
条件键根据该 Firehose 流上的标签来控制访问。
在以下示例中,MyKey
和 MyValue
表示标签的键和对应的值。该策略仅适用于具有名为 MyKey
的标签,值为 MyValue
的 Data Firehose 流。有关根据资源标签控制访问的更多信息,请参阅《IAM 用户指南》中的使用标签来控制对 Amazon 资源的访问。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": "firehose:DescribeDeliveryStream", "Resource": "*", "Condition": { "StringEquals": { "firehose:ResourceTag/MyKey": "MyValue" } } } ] }