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

亚马逊 Data Firehose 以前被称为亚马逊 Kinesis Data Firehose

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

将 Amazon Data Firehose 与 Amazon PrivateLink

接口 Amazon Data Firehose 的 VPC 终端节点 (Amazon PrivateLink)

您可以使用接口 VPC 终端节点来防止您的亚马逊 VPC 和 Amazon Data Firehose 之间的流量离开亚马逊网络。接口 VPC 端点不需要互联网网关、NAT 设备、VPN 连接或 Amazon Direct Connect 连接。接口 VPC 端点由 Amazon PrivateLink 提供支持,后者是一种 Amazon 技术,可将弹性网络接口与 Amazon VPC 中的私有 IP 结合使用,以实现 Amazon 服务之间的私有通信。有关更多信息,请参阅 Amazon Virtual Private Cloud

使用 Amazon Data Firehose 的接口 VPC 终端节点 (Amazon PrivateLink)

首先,创建一个接口 VPC 终端节点,以便来自亚马逊 VPC 资源的 Amazon Data Firehose 流量开始流经接口 VPC 终端节点。在创建终端节点时,您可以为其附加终端节点策略,以控制对 Amazon Data Firehose 的访问权限。有关使用策略控制从 VPC 终端节点对 Amazon Data Firehose 的访问的更多信息,请参阅使用 VPC 终端节点控制对服务的访问

以下示例展示了如何在 VPC 中设置Amazon Lambda函数并创建 VPC 终端节点,以允许该函数与 Amazon Data Firehose 服务进行安全通信。在此示例中,您使用的策略允许 Lambda 函数列出当前区域中的 Firehose 流,但不允许描述任何 Firehose 流。

创建 VPC 端点
  1. 通过 https://console.aws.amazon.com/vpc/ 登录到Amazon Web Services Management Console并打开 Amazon VPC 控制台。

  2. 在 VPC 控制面板中,选择 Endpoints (终端节点)

  3. 选择创建端点

  4. 在服务名称列表中,选择 com.amazonaws.your_region.kinesis-firehose

  5. 选择要在其中创建终端节点的 VPC 以及一个或多个子网。

  6. 选择一个或多个要与终端节点关联的安全组。

  7. 对于 Policy (策略),选择 Custom (自定义) 并粘贴以下策略:

    { "Statement": [ { "Sid": "Allow-only-specific-PrivateAPIs", "Principal": "*", "Action": [ "firehose:ListDeliveryStreams" ], "Effect": "Allow", "Resource": [ "*" ] }, { "Sid": "Allow-only-specific-PrivateAPIs", "Principal": "*", "Action": [ "firehose:DescribeDeliveryStream" ], "Effect": "Deny", "Resource": [ "*" ] } ] }
  8. 选择创建端点

创建用于 Lambda 函数的 IAM 角色
  1. 通过 https://console.aws.amazon.com/iam/ 打开 IAM 控制台。

  2. 在左侧窗格中,选择角色,然后选择创建角色

  3. 选择可信实体的类型下,保留默认选择 Amazon 服务

  4. 选择将使用此角色的服务下,选择 Lambda

  5. 选择 Next: Permissions(下一步: 权限)。

  6. 在策略列表中,搜索并添加名为 AmazonLambdaVPCAccessExecutionRoleAmazonDataFirehoseReadOnlyAccess 的两个策略。

    重要

    下面给出了一个示例:您的生产环境可能需要更严格的策略。

  7. 选择下一步:标签。在本练习中,您不需要添加标签。选择下一步:审核

  8. 输入角色的名称,然后选择创建角色

在 VPC 中创建 Lambda 函数
  1. 通过 https://console.aws.amazon.com/lambda/ 打开 Amazon Lambda 控制台。

  2. 选择 Create function (创建函数)

  3. 选择从头开始创作

  4. 输入函数的名称,然后将 Runtime (运行时) 设置为 Python 3.6。

  5. Permissions (权限) 下,展开 Choose or create an execution role (选择或创建执行角色)

  6. Execution role (执行角色) 列表中,选择 Use an existing role (使用现有角色)

  7. Existing role (现有角色) 列表中,选择您先前创建的角色。

  8. 选择创建函数

  9. Function code (函数代码) 下,粘贴以下代码。

    import json import boto3 import os from botocore.exceptions import ClientError def lambda_handler(event, context): REGION = os.environ['AWS_REGION'] client = boto3.client( 'firehose', REGION ) print("Calling list_delivery_streams with ListDeliveryStreams allowed policy.") delivery_stream_request = client.list_delivery_streams() print("Successfully returned list_delivery_streams request %s." % ( delivery_stream_request )) describe_access_denied = False try: print("Calling describe_delivery_stream with DescribeDeliveryStream denied policy.") delivery_stream_info = client.describe_delivery_stream(DeliveryStreamName='test-describe-denied') except ClientError as e: error_code = e.response['Error']['Code'] print ("Caught %s." % (error_code)) if error_code == 'AccessDeniedException': describe_access_denied = True if not describe_access_denied: raise else: print("Access denied test succeeded.")
  10. Basic settings (基本设置) 下,将超时时间设置为 1 分钟。

  11. Network (网络) 中,选择您之前在其中创建终端节点的 VPC,然后选择在您创建终端节点时与其关联的子网和安全组。

  12. 在页面顶部附近,选择保存

  13. 选择测试

  14. 输入事件名称,然后选择创建

  15. 再次选择 Test (测试)。这将使该函数运行。在执行结果显示之后,展开 Details (详细信息),并将日志输出与函数代码进行比较。成功结果会显示该区域的 Firehose 直播列表以及以下输出:

    Calling describe_delivery_stream.

    AccessDeniedException

    Access denied test succeeded.

可用性

接口 VPC 终端节点当前在以下区域受支持:

  • 美国东部(俄亥俄)

  • 美国东部(弗吉尼亚州北部)

  • 美国西部(北加利福尼亚)

  • 美国西部(俄勒冈)

  • 亚太地区(孟买)

  • 亚太地区(首尔)

  • 亚太地区(新加坡)

  • 亚太地区(悉尼)

  • 亚太地区(东京)

  • 亚太地区(香港)

  • 加拿大(中部)

  • 加拿大西部(卡尔加里)

  • 中国(北京)

  • 中国(宁夏)

  • 欧洲地区(法兰克福)

  • 欧洲地区(爱尔兰)

  • 欧洲地区(伦敦)

  • 欧洲(巴黎)

  • 南美洲(圣保罗)

  • Amazon GovCloud (美国东部)

  • Amazon GovCloud (美国西部)

  • 欧洲(西班牙)

  • 中东(阿联酋)

  • 亚太地区(雅加达)

  • 亚太地区(大阪)

  • 以色列(特拉维夫)