本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
您可以使用接口 VPC 终端节点 (AWS PrivateLink) 从您的 VPC 访问 Amazon Data Firehose,而无需互联网网关或 NAT 网关。接口 VPC 终端节点不需要互联网网关、NAT 设备、VPN 连接或 AWS Direct Connect 连接。接口 VPC 终端节点由一项 AWS 技术提供支持 AWS PrivateLink,该技术允许使用弹性网络接口在 AWS 服务之间进行私密通信,并使用您的 Amazon VPC IPs 中的私有接口。有关更多信息,请参阅 Amazon Virtual Private Cloud。
使用适用于 Firehose 的接口 VPC 终端节点 (AWS
PrivateLink)
首先,创建一个接口 VPC 端点,以便来自 Amazon VPC 资源的 Amazon Data Firehose 流量开始流经接口 VPC 端点。创建端点时,可以为其附加端点策略,以控制对 Amazon Data Firehose 的访问。有关使用策略控制 VPC 端点对 Amazon Data Firehose 的访问的更多信息,请参阅使用 VPC 端点控制对服务的访问。
以下示例展示了如何在 VPC 中设置 AWS Lambda 函数并创建 VPC 终端节点,以允许该函数与 Amazon Data Firehose 服务进行安全通信。在本例中,您使用的策略允许 Lambda 函数列出当前区域中的 Firehose 流,但不描述任何 Firehose 流。
创建 VPC 端点
登录 AWS Management Console 并打开 Amazon VPC 控制台,网址为https://console.aws.amazon.com/vpc/
。 -
在 VPC 控制面板中,选择 Endpoints (终端节点)。
-
选择 Create Endpoint(创建端点)。
-
在服务名称列表中,选择
com.amazonaws.
。your_region
.kinesis-firehose -
选择要在其中创建终端节点的 VPC 以及一个或多个子网。
-
选择一个或多个要与终端节点关联的安全组。
-
对于 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": [ "*" ] } ] }
-
选择创建端点。
创建用于 Lambda 函数的 IAM 角色
使用 https://console.aws.amazon.com/iam/
打开 IAM 控制台。 -
在左侧窗格中,选择角色,然后选择创建角色。
-
在选择可信实体的类型下,保留默认选择 AWS 服务。
-
在选择将使用此角色的服务下,选择 Lambda。
-
选择 Next: Permissions(下一步: 权限)。
-
在策略列表中,搜索并添加名为
AWS LambdaVPCAccessExecutionRole
和AmazonDataFirehoseReadOnlyAccess
的两个策略。重要
下面给出了一个示例:您的生产环境可能需要更严格的策略。
-
选择下一步:标签。在本练习中,您不需要添加标签。选择下一步:审核。
-
输入角色的名称,然后选择创建角色。
在 VPC 中创建 Lambda 函数
打开 AWS Lambda 控制台,网址为https://console.aws.amazon.com/lambda/
。 -
选择创建函数。
-
选择从头开始创作。
-
输入函数的名称,然后将运行时设置为
Python 3.9
或更高版本。 -
在权限下,展开选择或创建执行角色。
-
在 Execution role (执行角色) 列表中,选择 Use an existing role (使用现有角色)。
-
在 Existing role (现有角色) 列表中,选择您先前创建的角色。
-
选择创建函数。
-
在 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.")
-
在 Basic settings (基本设置) 下,将超时时间设置为 1 分钟。
-
在 Network (网络) 中,选择您之前在其中创建终端节点的 VPC,然后选择在您创建终端节点时与其关联的子网和安全组。
-
在页面顶部附近,选择保存。
-
选择测试。
-
输入事件名称,然后选择创建。
-
再次选择 Test (测试)。这将使该函数运行。在执行结果显示之后,展开 Details (详细信息),并将日志输出与函数代码进行比较。运行成功的结果将显示区域中的 Firehose 流的列表以及以下输出:
Calling describe_delivery_stream.
AccessDeniedException
Access denied test succeeded.
支持的 AWS 区域
接口 VPC 终端节点当前在以下区域受支持。
-
美国东部(俄亥俄州)
-
美国东部(弗吉尼亚州北部)
-
美国西部(加利福尼亚北部)
-
美国西部(俄勒冈州)
-
亚太地区(孟买)
-
亚太地区(首尔)
-
亚太地区(新加坡)
-
亚太地区(悉尼)
-
亚太地区(泰国)
-
亚太地区(东京)
-
亚太地区(香港)
-
加拿大(中部)
-
加拿大西部(卡尔加里)
-
中国(北京)
-
中国(宁夏)
-
欧洲地区(法兰克福)
-
欧洲地区(爱尔兰)
-
欧洲地区(伦敦)
-
欧洲地区(巴黎)
-
墨西哥(中部)
-
南美洲(圣保罗)
-
AWS GovCloud (美国东部)
-
AWS GovCloud (美国西部)
-
欧洲地区(西班牙)
-
中东(阿联酋)
-
亚太地区(雅加达)
-
亚太地区(大阪)
-
以色列(特拉维夫)
-
亚太地区(马来西亚)