

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 搭配 AWS PrivateLink 使用 Amazon Data Firehose
<a name="vpc"></a>

您可以使用介面 VPC 端點 (AWS PrivateLink) 從 VPC 存取 Amazon Data Firehose，而不需要網際網路閘道或 NAT 閘道。介面 VPC 端點不需要網際網路閘道、NAT 裝置、VPN 連線或 Direct Connect 連線。介面 VPC 端點採用 AWS PrivateLink 技術，這項 AWS 技術可讓您在 Amazon VPC 中使用具有私有 IPs彈性網路介面，在 AWS 服務之間進行私有通訊。如需詳細資訊，請參閱 [Amazon Virtual Private Cloud](https://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_Introduction.html)。

## 使用 Firehose 的介面 VPC 端點 (AWS PrivateLink)
<a name="using-interface-vpc-endpoints"></a>

若要開始使用，請建立介面 VPC 端點，讓來自 Amazon VPC 資源的 Amazon Data Firehose 流量開始流經介面 VPC 端點。建立端點時，您可以將端點政策連接到它，以控制對 Amazon Data Firehose 的存取。如需使用 政策控制從 VPC 端點到 Amazon Data Firehose 的存取的詳細資訊，請參閱[使用 VPC 端點控制對 服務的存取](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-endpoints-access.html)。

下列範例示範如何在 VPC 中設定 AWS Lambda 函數並建立 VPC 端點，以允許函數與 Amazon Data Firehose 服務安全地通訊。在此範例中，您使用的政策允許 Lambda 函數列出目前區域中的 Firehose 串流，但不描述任何 Firehose 串流。

**建立 VPC 端點**

1. 登入 AWS 管理主控台 並開啟位於 https：//[https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/) 的 Amazon VPC 主控台。

1. 在 VPC 儀表板中選擇 **​Endpoints (端點)**。​

1. 選擇**建立端點**。

1. 在服務名稱清單中，選擇 `com.amazonaws.your_region.kinesis-firehose`。

1. 選擇要在其中建立端點的 VPC 和一或多個子網路。

1. 選擇要與端點關聯的一或多個安全群組。

1. 對於 **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": [
                   "*"
               ]
           }
       ]
   }
   ```

1. 選擇**建立端點**。

**建立要與 ​Lambda 函數搭配使用的 IAM 角色**

1. 前往 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 開啟 IAM 主控台。

1. 在左側導覽窗格中，選擇**角色**，然後選擇**建立角色**。

1. 在**選取可信實體的類型**下，保留預設選項 **AWS 服務**。

1. 在 **Choose the service that will use this role (選擇將使用此角色的服務)** 下，選擇 **Lambda (Lambda)**。

1. 選擇 **Next: Permissions (下一步：許可)**。

1. 在政策清單中，搜尋和新增名為 `AWS LambdaVPCAccessExecutionRole` 和 `AmazonDataFirehoseReadOnlyAccess` 的兩個政策。​
**重要**  
以下是範例。您可能需要對生產環境採用更嚴格的政策。

1. 選擇下**一步：標籤**。在本練習中，您不需要新增標籤。選擇下**一步：檢閱**。

1. 輸入角色名稱，然後選擇**建立角色**。

**在 VPC 中建立 Lambda 函數**

1. 在 https：//[https://console.aws.amazon.com/lambda/](https://console.aws.amazon.com/lambda/) 開啟 AWS Lambda 主控台。

1. 選擇 **Create function (建立函數)**。

1. 選擇**從頭開始撰寫**。

1. 輸入函數的名稱，然後將**執行時間**設定為 `Python 3.9` 或更高。

1. 在 **Permissions (許可)** 下，展開 **Choose or create an execution role (選擇或建立執行角色)**。

1. 在 **Execution role (執行角色)** 清單中，選擇 **Use an existing role (使用現有角色)**。

1. 在 **Existing role (現有角色)** 清單中，選擇您以上建立的角色。

1. 選擇**建立函數**。

1. 在 **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.")
   ```

1. 在 **Basic settings (基本設定)** 下，將逾時設定為 1 分鐘。

1. 在 **Network (網路)** 下，選擇以上端點建立所在的 VPC，然後選擇子網路與您在建立安全群組時與該端點建立關聯的安全群組。

1. 請在頁面頂端附近選擇**儲存**。

1. 選擇**測試**。

1. 輸入事件名稱，然後選擇**建立**。

1. 再次選擇 **Test (測試)**。這可讓函數得以執行。在執行結果出現後，展開 **Details (詳細資訊)** 並將日誌輸出與函數程式碼做比較。​ 成功結果會顯示區域中 Firehose 串流的清單，以及下列輸出：

    `Calling describe_delivery_stream.` 

    `AccessDeniedException ` 

    `Access denied test succeeded.` 

## 支援的 AWS 區域
<a name="availability"></a>

下列區域目前支援介面 VPC 端點。
+ 美國東部 (俄亥俄)
+ 美國東部 (維吉尼亞北部)
+ 美國西部 (加利佛尼亞北部)
+ 美國西部 (奧勒岡)
+ 亞太區域 (孟買)
+ 亞太區域 (首爾)
+ 亞太區域 (新加坡)
+ 亞太地區 (雪梨)
+ 亞太區域 (泰國)
+ 亞太地區 (東京)
+ 亞太地區 (香港)
+ 加拿大 (中部)
+ 加拿大西部 (卡加利)
+ 中國 (北京)
+ 中國 (寧夏)
+ 歐洲 (法蘭克福)
+ 歐洲 (愛爾蘭)
+ 歐洲 (倫敦)
+ Europe (Paris)
+ 墨西哥 (中部)
+ 南美洲 (聖保羅)
+ AWS GovCloud （美國東部）
+ AWS GovCloud （美國西部）
+ 歐洲 (西班牙)
+ 中東 (阿拉伯聯合大公國)
+ 亞太地區 (雅加達)
+ 亞太地區 (大阪)
+ 以色列 (特拉維夫)
+ 亞太地區 (馬來西亞)