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

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

使用 Amazon Data Firehose 控制访问权限

以下几节介绍了如何控制对 Amazon Data Firehose 资源的访问以及来自这些资源的访问。涵盖的信息包括如何授予您的应用程序访问这些资源的权限,以便可以向您的 Firehose 流发送数据。它们还描述了如何授予亚马逊数据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 访问您的私有亚马逊集群的权限 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角色或自己创建角色,请将以下信任策略附加到该角色,以便亚马逊数据 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", "Condition": { "StringEquals": { "sts:ExternalId": "account-id" } } }] }

本政策使用sts:ExternalId条件上下文密钥来确保只有来自您 Amazon 账户的 Amazon Data Firehose 活动才能担任此IAM角色。有关防止未经授权使用IAM角色的更多信息,请参阅IAM用户指南》中的 “混淆副手问题”。

如果您选择亚马逊MSK作为 Firehose 直播的来源,则必须指定另一个IAM角色来授予 Amazon Data Firehose 从指定亚马逊集群提取源数据的权限。MSK确保将以下信任策略附加到该角色,以便 Amazon Data Firehose 可以承担该角色。

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

请确保该角色授予 Amazon Data Firehose 从指定亚马逊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请参阅指定 Amazon Glue 资源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 作为数据来源,可以删除该语句。如果您使用亚马逊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 访问亚马逊 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>" ] } ] }

该策略包含允许访问亚马逊 Kinesis Data Streams、调用 Lambda 函数和访问密钥的声明。 Amazon KMS 如果您不使用这些资源中的任何一个,则可以删除相应的语句。如果启用了错误记录,Amazon Data Firehose 还会将数据传输错误发送到您的 CloudWatch 日志组和流。必须配置日志组和日志流名称才能使用此选项。有关日志组和日志流名称,请参阅(使用 CloudWatch 日志监控 Amazon Data Firehose)。 (需要链接)。

在内联策略中,<error delivery bucket>用您的 Amazon S3 存储桶名称替换,aws-account-id将区域替换为资源的有效 Amazon Web Services 账户 编号和区域。

创建策略后,打开IAM控制台https://console.aws.amazon.com/iam/并创建一个IAM角色Amazon Web Services 服务作为可信实体类型

对于服务或使用案例,选择 Kinesis。对于用例,请选择 Kinesis Firehose

在下一页上,选择上一步中创建的策略附加到该角色。在审核页面上,您会发现该角色已附加了信任策略,该策略授予了 Firehose 服务担任此角色的权限。在您创建角色时,Amazon Data Firehose 可以假设该角色对 Amazon Glue 和 S3 存储桶执行所需的操作。将 Firehose 服务主体添加到所创建角色的信任策略中。有关更多信息,请参阅允许 Firehose 代入角色。IAM

向 Firehose 授予 Apache Iceberg 表目的地的访问权限

在使用创建 Firehose 直播和 Apache Iceberg Tables 之前,你必须有一个IAM角色。 Amazon Glue使用以下步骤创建策略和IAM角色。Firehose 担任此IAM角色并执行所需的操作。

  1. 登录 Amazon Web Services Management Console 并打开IAM控制台,网址为https://console.aws.amazon.com/iam/

  2. 创建策略并在策略编辑器JSON中选择。

  3. 添加以下内联策略,以向 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 日志组和直播发送数据传输错误。为此,您必须配置日志组和日志流名称。对于日志组和日志流名称,请参阅使用 CloudWatch Logs 监控 Amazon Data Firehose

  4. 在内联策略中,amzn-s3-demo-bucket用您的 Amazon S3 存储桶名称替换, aws-account-id将区域替换为有效的资源 Amazon Web Services 账户 编号和区域。

    注意

    此角色授予对数据目录中的所有数据库和表的权限。如果需要,则您可以仅向特定的表和数据库授予权限。

  5. 创建策略后,打开IAM控制台并创建一个名Amazon Web Services 服务为 “可信实体” 类型的IAM角色。

  6. 对于服务或使用案例,选择 Kinesis。对于使用案例,选择 Kinesis Firehose

  7. 在下一页上,选择上一步中创建的策略附加到该角色。在查看页面上,您会发现信任策略已附加到此角色,以授予 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 无服务器工作组,并使用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 服务委派权限的角色

VPC访问亚马逊 Redshift 预配置集群或亚马逊 Redshift 无服务器工作组

如果您的 Amazon Redshift 预配置集群或 Amazon Redshift Serverless 工作组位于虚拟私有云中 (VPC),则必须使用公有 IP 地址对其进行公开访问。此外,通过取消阻止 Amazon Data Firehose IP 地址,授予 Amazon Data Firehose 对 Amazon Redshift 预置集群或 Amazon Redshift Serverless 工作组的访问权限。Amazon Data Firehose 目前对每个可用区域使用一个CIDR区块。

区域 CIDR方块
美国东部(俄亥俄)

13.58.135.96/27

美国东部(弗吉尼亚州北部) 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
亚太地区(孟买) 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
Asia Pacific (Tokyo) 13.113.196.224/27
亚太地区(大阪) 13.208.177.192/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
南美洲(圣保罗) 18.228.1.128/27
欧洲地区(米兰) 15.161.135.128/27
非洲(开普敦) 13.244.121.224/27
中东 (UAE) 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 服务集群的权限,请参阅。跨账户配送到 OpenSearch 服务目的地

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

如果您的 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 服务域使用的相同安全组或不同的安全组。如果您指定其他安全组,请确保该安全组允许出站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 访问中 OpenSearch无服务器目标的权限 VPC

如果您的 OpenSearch 无服务器集合位于VPC,请务必向亚马逊数据 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 集合相同的安全组,也可以使用不同的安全组。如果您指定了其他安全组,请确保该安全组允许流向 OpenSearch Serverless 集合的安全组的出站HTTPS流量。此外,请确保 OpenSearch无服务器集合的安全组允许来自您在配置 Firehose 直播时指定的安全组的HTTPS流量。如果您对 Firehose 直播和 OpenSearch Serverless 集合使用同一个安全组,请确保安全组入站规则允许流量。HTTPS有关安全组规则的更多信息,请参阅 Amazon VPC 文档中的安全组规则

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

当你使用 Splunk 目标时,Amazon Data Firehose 会将数据传输到你的 HTTP Splunk 事件收集器 HEC () 端点。它还会将该数据备份到您指定的 Amazon S3 存储桶,您也可以选择使用自己拥有的 Amazon KMS 密钥进行 Amazon S3 服务器端加密。如果启用了错误记录,Firehose 会将数据传输错误发送到您的 CloudWatch日志流。您也可以 Amazon Lambda 用于数据转换。

如果您使用 Amazon 负载均衡器,请确保它是 Classic 负载均衡器或 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 服务委派权限的角色

在中访问 Splunk VPC

如果您的 Splunk 平台位于VPC,则必须使用公有 IP 地址对其进行公开访问。此外,还要取消阻止 Amazon Data Firehose IP 地址,以便为 Amazon Data Firehose 授予对 Splunk 平台的访问权限。Amazon Data Firehose 目前使用以下区块CIDR。

区域 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
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
亚太地区(东京) 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
Europe (Paris) 35.180.112.0/26
欧洲(西班牙) 18.100.194.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
中东 (UAE) 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 以及将流日志发送到支持的目的地,请参阅使用 Amazon Data Firehose 将VPC流日志提取到 Splunk。VPC

访问 Snowflake 或终点 HTTP

当目标为HTTP端点或 Snowflake 公共集群时,没有特定于 Amazon Data Firehose 的 Amazon IP 地址范围子集。

要将 Firehose 添加到公共 Snowflake 集群的允许列表或您的公共集群HTTP或HTTPS终端节点中,请将所有当前 Amazon IP 地址范围添加到您的入口规则中。

注意

通知并不总是来自与其关联主题相同 Amazon 区域的 IP 地址。您必须包括所有区域 Amazon 的 IP 地址范围。

授予 Firehose 访问 Snowflake 目的地的权限

当你使用 Snowflake 作为目的地时,Firehose 会使用你的 Snowflake 账户将数据传输到 Snowflake 账户。URL它还会将错误数据备份到您指定的亚马逊简单存储服务存储桶,您也可以选择使用自己拥有的 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 不用来访问 Snowfla IAM ke。要访问 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 服务委派权限的角色

访问 Snowflake VPC

如果您的 Snowflake 集群启用了私有链接,Firehose 将在创建私有链接时使用以下VPC终端节点之一将数据传送到您的私有集群,而无需通过公共互联网。为此,请创建 Snowflake 网络规则,以允许 Amazon Web Services 区域 您的集群所在AwsVpceIds的以下内容进入。有关更多信息,请参阅 Snowflake User Guide 中的 Creating network rule

VPC根据您的集群所在区域使用的终端节点 ID
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

Asia Pacific (Tokyo)

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 确实NOT支持向中的HTTP终端节点传输数据。VPC

来自亚马逊的跨账户配送 MSK

当您从 Firehose 账户(例如账户 B)创建 Firehose 直播并且您的来源是另一个 Amazon 账户(账户 A)中的MSK集群时,您必须进行以下配置。

账户 A:

  1. 在 Amazon MSK 控制台中,选择已配置的集群,然后选择属性

  2. “网络设置” 下,选择 “编辑”,然后打开 “多VPC连接”。

  3. 安全设置下,选择编辑集群策略

    1. 如果集群尚未配置策略,请选中包含 Firehose 服务主体启用 Firehose 跨账户 S3 传输。 Amazon Web Services Management Console 将自动生成具有相应权限的策略。

    2. 如果集群已配置了策略,请向现有策略添加以下权限:

      { "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 }, }
  4. Amazon 主体下,输入账户 B 的主体 ID。

  5. 主题下,指定您需要 Firehose 流从中摄取数据的 Apache Kafka 主题。创建 Firehose 流后,您将无法更新此主题。

  6. 选择 Save changes(保存更改)

账户 B:

  1. 在 Firehose 控制台中,选择使用账户 B 创建 Firehose 流

  2. 下,选择 Amazon Managed Streaming for Apache Kafka

  3. “源设置” 下,对于适用于 A pache Kafka 的亚马逊托管流媒体 Kafka 集群,在账户 A 中输入ARNMSK亚马逊集群的

  4. 主题下,指定您需要 Firehose 流从中摄取数据的 Apache Kafka 主题。创建 Firehose 流后,您将无法更新此主题。

  5. 传输流名称中,指定 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 Firehos APIs e 在一个账户中创建 Firehose 直播,在另一个 Amazon 账户中创建 Amazon S3 目标。以下过程展示了一个示例,该示例配置账户 A 拥有的 Firehose 流,以向账户 B 拥有的 Amazon S3 存储桶传输数据。

  1. 使用授予 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。

  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:::amzn-s3-demo-bucket", "arn:aws:s3:::amzn-s3-demo-bucket/*" ] } ] }
  3. 使用您在步骤 1 中创建的IAM角色在账户 A 下创建 Firehose 直播。

跨账户配送到 OpenSearch 服务目的地

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

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

  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", "arn:aws:es:us-east-1:Account-B-ID:domain/cross-account-cluster/" ] } ] }
  3. 使用您在步骤 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元素的使用以及可以在其中使用的运算符的更多信息,请参阅IAMJSON策略元素:条件

CreateDeliveryStream

对于 CreateDeliveryStream 操作,请使用 aws:RequestTag 条件键。在以下示例中,MyKeyMyValue 表示标签的键和对应的值。有关更多信息,请参阅 了解标签基本知识

{ "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

其他操作

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

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

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

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