如何設定從 Kinesis Data Firehose 至 Amazon OpenSearch Service 的跨帳戶串流?
我想要設定 Amazon Kinesis Data Firehose 串流,以將資料傳送至另一個帳戶中的 Amazon OpenSearch Service 叢集。
簡短描述
設定 Kinesis Data Firehose 及其相依性 (例如 Amazon Simple Storage Service (Amazon S3) 和 Amazon CloudWatch),以跨不同的帳戶進行串流。無論是否開啟精細的存取控制 (FGAC),串流資料交付都適用於可公開存取的 OpenSearch Service 叢集。
若要設定 Kinesis Data Firehose 串流,以便將資料傳送至 OpenSearch Service 叢集,請完成下列步驟:
- 在帳戶 A 中建立 Amazon S3 儲存貯體。
- 在帳戶 A 中建立 CloudWatch 日誌群組和日誌串流。
- 在帳戶 A 中建立 Kinesis Data Firehose 角色和政策。
- 在帳戶 B 中建立可公開存取的 OpenSearch Service 叢集,以便帳戶 A 中的 Kinesis Data Firehose 角色在其中對資料進行串流。
- (選用) 如果已開啟 FGAC,請登入 OpenSearch 儀表板並新增角色映射。
- 更新帳戶 A 中您的 Kinesis Data Firehose 角色的 AWS Identity Access Management (IAM) 角色政策,以將資料傳送至帳戶 B。
- 在帳戶 A 中建立 Kinesis Data Firehose 串流。
- 測試 OpenSearch Service 叢集的跨帳戶串流。
解決方案
在帳戶 A 中建立 Amazon S3 儲存貯體
在帳戶 A 中建立 S3 儲存貯體。Amazon S3 儲存貯體會產生 Amazon Resource Name (ARN)。
**注意事項:**稍後使用完整的 ARN 授予 Kinesis Data Firehose 存取權,以儲存和擷取 Amazon S3 儲存貯體中的記錄。
在帳戶 A 中建立 CloudWatch 日誌群組和日誌串流
若要建立 CloudWatch 日誌群組,請完成下列步驟:
- 開啟 CloudWatch 主控台。
- 在導覽窗格中,選擇日誌,然後選擇日誌群組。
- 選擇建立日誌群組。
- 輸入日誌群組名稱。
- 選擇建立日誌群組按鈕以儲存新的日誌群組。
- 搜尋新建立的日誌群組,然後進行選取。
若要建立 Amazon CloudWatch 日誌串流,請完成下列步驟:
- 選擇建立日誌串流。
- 輸入日誌串流名稱。
- 選擇建立日誌串流。
**重要事項:**在建立 Kinesis Data Firehose 角色政策時,需要 CloudWatch 日誌群組和 CloudWatch 日誌串流名稱。
在帳戶 A 中建立 Kinesis Data Firehose 角色和政策
- 開啟 AWS Identity and Access Management (IAM) 主控台。
- 建立 IAM 政策,以允許 Kinesis Data Firehose 執行下列操作:
將串流日誌儲存至 CloudWatch
記錄至 Amazon S3
對 OpenSearch Service 叢集的資料進行串流
範例:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:AbortMultipartUpload", "s3:GetBucketLocation", "s3:GetObject", "s3:ListBucket", "s3:ListBucketMultipartUploads", "s3:PutObject", "s3:PutObjectAcl" ], "Resource": [ "<Bucket ARN>", "<Bucket ARN>/*" ] }, { "Effect": "Allow", "Action": [ "logs:PutLogEvents" ], "Resource": [ "arn:aws:logs:<region>:<account-id>:log-group:/aws/kinesisfirehose/<Firehose Name>:log-stream:*" ] } ] }
**注意事項:**稍後,您可以將串流許可附加至 OpenSearch Service 叢集政策。但是,您必須先在帳戶 B 中建立叢集。
- 儲存政策。
- 選擇建立角色。
- 將政策新增至您的 Kinesis Data Firehose 角色。
在帳戶 B 中建立可公開存取的 OpenSearch Service 叢集,以便帳戶 A 中的 Kinesis Data Firehose 角色對資料進行串流
- 在帳戶 B 中建立可公開存取的 OpenSearch Service 叢集。
- 記錄 OpenSearch Service 網域 ARN。您可以在稍後的步驟中使用 ARN。
- 設定叢集的安全設定。
**重要事項:**您必須設定 OpenSearch Service 安全設定,以允許帳戶 A 中的 Kinesis Data Firehose 角色串流至您的 OpenSearch Service 叢集。
若要設定安全設定,請執行下列步驟:
-
在 OpenSearch Service 中,導覽至存取政策。
-
選取 JSON 定義的存取政策。您的政策必須具有下列許可:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "*" }, "Action": "es:*", "Resource": "<ES Domain ARN in Account B>/*", "Condition": { "IpAddress": { "aws:SourceIp": "<Your IP Address for OpenSearch Dashboards access>" } } }, { "Effect": "Allow", "Principal": { "AWS": "<Firehose Role ARN in Account A>" }, "Action": [ "es:ESHttpPost", "es:ESHttpPut" ], "Resource": [ "<ES Domain ARN in Account B>", "<ES Domain ARN in Account B>/*" ] }, { "Effect": "Allow", "Principal": { "AWS": "<Firehose Role ARN in Account A>" }, "Action": "es:ESHttpGet", "Resource": [ "<ES Domain ARN in Account B>/_all/_settings", "<ES Domain ARN in Account B>/_cluster/stats", "<ES Domain ARN in Account B>/index-name*/_mapping/type-name", "<ES Domain ARN in Account B>/roletest*/_mapping/roletest", "<ES Domain ARN in Account B>/_nodes", "<ES Domain ARN in Account B>/_nodes/stats", "<ES Domain ARN in Account B>/_nodes/*/stats", "<ES Domain ARN in Account B>/_stats", "<ES Domain ARN in Account B>/index-name*/_stats", "<ES Domain ARN in Account B>/roletest*/_stats" ] } ] }
如需有關 OpenSearch Service 政策內許可的詳細資訊,請參閱跨帳戶交付至 OpenSearch Service 目的地。
-
(選用) 如果已為您的叢集開啟 FGAC,請登入 OpenSearch 儀表板並新增角色映射。角色映射可讓 Kinesis Data Firehose 角色將請求傳送至 OpenSearch Service。
若要登入 OpenSearch 儀表板並新增角色映射,請完成下列步驟:
- 開啟儀表板。
- 選擇安全索引標籤。
- 選擇角色。
- 選擇 all_access 角色。
- 選擇映射的使用者標籤。
- 選擇管理映射。
- 在後端角色區段中,輸入 Kinesis Data Firehose 角色。
- 選擇映射。
更新帳戶 A 中您的 Kinesis Data Firehose 角色的 IAM 角色政策,以將資料傳送至帳戶 B
若要將資料從帳戶 A 中的 Kinesis Data Firehose 角色傳送至帳戶 B 中的 OpenSearch Service 叢集,請更新 Kinesis Data Firehose 政策。
範例:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:AbortMultipartUpload", "s3:GetBucketLocation", "s3:GetObject", "s3:ListBucket", "s3:ListBucketMultipartUploads", "s3:PutObject", "s3:PutObjectAcl" ], "Resource": [ "<Bucket ARN>", "<Bucket ARN>/*" ] }, { "Effect": "Allow", "Action": [ "logs:PutLogEvents" ], "Resource": [ "arn:aws:logs:<region>:<account-id>:log-group:/aws/kinesisfirehose/<Firehose Name>:log-stream:*" ] }, { "Effect": "Allow", "Action": [ "es:ESHttpPost", "es:ESHttpPut", "es:DescribeDomain", "es:DescribeDomains", "es:DescribeDomainConfig" ], "Resource": [ "<Domain ARN in Account B>", "<Domain ARN in Account B>/*" ] }, { "Effect": "Allow", "Action": [ "es:ESHttpGet" ], "Resource": [ "<Domain ARN in Account B>/_all/_settings", "<Domain ARN in Account B>/_cluster/stats", "<Domain ARN in Account B>/index-name*/_mapping/superstore", "<Domain ARN in Account B>/_nodes", "<Domain ARN in Account B>/_nodes/stats", "<Domain ARN in Account B>/_nodes/*/stats", "<Domain ARN in Account B>/_stats", "<Domain ARN in Account B>/index-name*/_stats" ] } ] }
如需詳細資訊,請參閱授予 Kinesis Data Firehose 對 Amazon OpenSearch Service 目的地的存取權。
在帳戶 A 中建立 Kinesis Data Firehose 串流
若要建立可跨帳戶存取 OpenSearch Service 叢集的 Kinesis Data Firehose 串流,請使用並設定 AWS Command Line Interface (AWS CLI)。
檢查以確定您使用最新的 AWS CLI:
aws --version
**注意事項:**如果您在執行 AWS CLI 命令時收到錯誤,請參閱 對 AWS CLI 錯誤進行疑難排解。此外,請確定您使用的是最新的 AWS CLI 版本。
建立稱為 input.json 的檔案,包含下列內容:
{ "DeliveryStreamName": "<Firehose Name>", "DeliveryStreamType": "DirectPut", "ElasticsearchDestinationConfiguration": { "RoleARN": "", "ClusterEndpoint": "", "IndexName": "local", "TypeName": "TypeName", "IndexRotationPeriod": "OneDay", "BufferingHints": { "IntervalInSeconds": 60, "SizeInMBs": 50 }, "RetryOptions": { "DurationInSeconds": 60 }, "S3BackupMode": "FailedDocumentsOnly", "S3Configuration": { "RoleARN": "", "BucketARN": "", "Prefix": "", "BufferingHints": { "SizeInMBs": 128, "IntervalInSeconds": 128 }, "CompressionFormat": "UNCOMPRESSED", "CloudWatchLoggingOptions": { "Enabled": true, "LogGroupName": "/aws/kinesisfirehose/<Firehose Name>", "LogStreamName": "S3Delivery" } }, "CloudWatchLoggingOptions": { "Enabled": true, "LogGroupName": "/aws/kinesisfirehose/<Firehose Name>", "LogStreamName": "ElasticsearchDelivery" } } }
確定在 ClusterEndpoint 屬性欄位中正確輸入端點值。
**注意事項:**在 Elasticsearch 7.x 版中,類型已棄用。對於 Elasticsearch 7.x 版,從 input.json 檔案中移除 TypeName 屬性。
然後,在與 input.json 檔案位置相同的目錄中執行下列命令:
aws firehose create-delivery-stream --cli-input-json file://input.json
此命令語法會在帳戶 A 中建立 Kinesis Data Firehose 串流,目的地為帳戶 B 中的 OpenSearch Service 叢集。
測試 OpenSearch Service 叢集的跨帳戶串流
使用 Kinesis Data Generator (KDG) 將記錄串流到帳戶 A 中的 Kinesis Data Firehose 串流。
KDG 每秒產生許多記錄。此生產力等級可讓 OpenSearch Service 具有足夠的資料點來確定記錄結構的正確映射。
以下是 Kinesis Data Generator 中使用的範本結構:
{ "device_id": {{random.number(5)}}, "device_owner": "{{name.firstName}} {{name.lastName}}", "temperature": {{random.number( { "min":10, "max":150 } )}}, "timestamp": "{{date.now("DD/MMM/YYYY:HH:mm:ss Z")}}" }
若要確認跨帳戶串流成功,請檢閱叢集的索引標籤下的索引項目。檢查是否存在使用字首 "local" 和目前日期的索引名稱。您也可以檢查 OpenSearch 儀表板中是否存在記錄。
**注意事項:**OpenSearch Service 需要幾分鐘的時間來確定正確的映射。
相關資訊
相關內容
- 已提問 9 個月前lg...
- 已提問 9 個月前lg...
- 已提問 1 年前lg...
- 已提問 7 個月前lg...
- AWS 官方已更新 2 年前
- AWS 官方已更新 1 年前