Amazon Data Firehose によるアクセスの制御
次のセクションでは、Amazon Data Firehose リソースのアクセスを制御する方法について説明します。例えば、Firehose ストリームにデータを送信できるようにアプリケーションにアクセスを付与する方法などについて説明します。また、Amazon Data Firehose に Amazon Simple Storage Service (Amazon S3) バケット、Amazon Redshift クラスター、または Amazon OpenSearch Service クラスターへのアクセスを付与する方法、および Datadog、Dynatrace、LogicMonitor、MongoDB、New Relic、Splunk、または Sumo Logic を宛先として使用する場合に必要な許可を付与する方法についても説明します。最後に、このトピックガイダンスでは、別の AWS アカウントに属する宛先にデータを配信できるように Amazon Data Firehose を設定する方法について説明します。これらのすべてのアクセス形式を管理するテクノロジーが AWS Identity and Access Management (IAM) です。IAM の詳細については、「IAM とは?」を参照してください。
内容
- Firehose のリソースへのアクセスを付与する
- Firehose にプライベートの Amazon MSK Cluster クラスターへのアクセスを付与する
- Firehose が IAM ロールを引き受けることを許可する
- データ形式変換のために Firehose に AWS Glue へのアクセスを付与する
- Firehose に Amazon S3 宛先へのアクセスを付与する
- Apache Iceberg テーブルの宛先へのアクセスを Firehose に付与する
- Amazon Redshift の宛先へのアクセスを Firehose に付与する
- Firehose に公開 OpenSearch Service の宛先へのアクセスを付与する
- VPC 内の OpenSearch Service の宛先へのアクセスを Firehose に付与する
- Firehose に公開 OpenSearch Serverless の宛先へのアクセスを付与する
- VPC 内の OpenSearch Serverless の宛先へのアクセスを Firehose に付与する
- Splunk の宛先へのアクセスを Firehose に付与する
- VPC の Splunk へのアクセス
- Amazon Data Firehose を使用して VPC フローログを Splunk に取り込む
- Snowflake または HTTP エンドポイントへのアクセス
- Snowflake の宛先へのアクセスを Firehose に付与する
- VPC での Snowflake へのアクセス
- HTTP エンドポイントの宛先へのアクセスを Firehose に付与する
- Amazon MSK からのクロスアカウント配信
- Amazon S3 の宛先へのクロスアカウント間の配信
- OpenSearch Service の宛先へのクロスアカウント間の配信
- タグを使用したアクセスへのコントロール
Firehose のリソースへのアクセスを付与する
アプリケーションに Firehose ストリームへのアクセスを付与するには、次の例のようなポリシーを使用します。Action
セクションを変更するか、"firehose:*"
を使用してすべてのオペレーションへのアクセス権を付与することで、アクセス権を付与する個別の API オペレーションを調整できます。
{ "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 にプライベートの Amazon MSK Cluster クラスターへのアクセスを付与する
Firehose ストリームのソースがプライベートの Amazon MSK クラスターである場合は、次の例のようなポリシーを使用します。
{ "Version": "2012-10-17", "Statement": [ { "Principal": { "Service": [ "firehose.amazonaws.com" ] }, "Effect": "Allow", "Action": [ "kafka:CreateVpcConnection" ], "Resource": "cluster-arn" } ] }
Amazon MSK CreateVpcConnection
API オペレーションを呼び出すための許可を Firehose サービスプリンシパルに付与するには、このようなポリシーをクラスターのリソースベースのポリシーに追加する必要があります。
Firehose が IAM ロールを引き受けることを許可する
このセクションでは、ソースから宛先へのデータの取り込み、処理、配信を行うためのアクセスを Amazon Data Firehose に付与する許可とポリシーについて説明します。
注記
コンソールを使用して Firehose ストリームを作成し、新しいロールを作成するオプションを選択した場合、AWS が必要な信頼ポリシーをロールにアタッチします。Amazon Data Firehose で既存の IAM ロールを使用する場合、または独自にロールを作成する場合は、Amazon Data Firehose がロールを引き受けることができるように、次の信頼ポリシーをそのロールにアタッチします。ポリシーを編集し、account-id
をお使いの AWS アカウント ID に置き換えます。ロールの信頼関係を変更する方法については、「ロールの修正」を参照してください。
Amazon Data Firehose は、Firehose ストリームがデータを処理および配信する際に必要になるすべての許可にこの IAM ロールを使用します。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
条件コンテキストキーを使用することで、お使いの AWS アカウントで発生した Amazon Data Firehose アクティビティのみがこの IAM ロールを引き受けられるようにします。詳細については、「IAM ユーザーガイド」の「混乱する代理問題」を参照してください。
Amazon MSK を Firehose ストリームのソースに選ぶ場合は、指定した Amazon MSK クラスターからソースデータを取り込むための許可を Amazon Data Firehose に付与する別の IAM ロールを指定する必要があります。Amazon Data Firehose がロールを引き受けることができるように、そのロールに次の信頼ポリシーがアタッチされていることを確認します。
{ "Version": "2012-10-17", "Statement": [ { "Principal": { "Service": [ "firehose.amazonaws.com" ] }, "Effect": "Allow", "Action": "sts:AssumeRole" } ] }
指定した Amazon MSK クラスターからソースデータを取り込むための許可を Amazon Data Firehose に付与するこのロールが、次の許可を付与していることを確認します。
{ "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 に AWS Glue へのアクセスを付与する
Firehose ストリームがデータ形式の変換を実行する場合、Amazon Data Firehose は AWS Glue に保存されているテーブル定義を参照します。必要な AWS Glue へのアクセスを Amazon Data Firehose に付与するには、ポリシーに次のステートメントを追加します。テーブルの ARN を見つける方法については、「AWS Glue リソース ARN の指定」を参照してください。
[{ "Effect": "Allow", "Action": [ "glue:GetTable", "glue:GetTableVersion", "glue:GetTableVersions" ], "Resource": "
table-arn
" }, { "Sid": "GetSchemaVersion", "Effect": "Allow", "Action": [ "glue:GetSchemaVersion" ], "Resource": ["*"] }]
スキーマレジストリからスキーマを取得するための推奨ポリシーには、リソースの制限はありません。詳細については、「AWS Glue デベロッパーガイド」の「IAM examples for deserializers 」を参照してください。
Firehose に Amazon S3 宛先へのアクセスを付与する
Amazon S3 の宛先を使用している場合、Amazon Data Firehose は S3 バケットにデータを配信し、オプションで、データ暗号化のためにお客様が所有している AWS KMS キーを使用できます。エラーログ記録が有効になっている場合、Amazon Data Firehose はデータ配信エラーを CloudWatch ロググループとストリームにも送信します。Firehose ストリームを作成するときは、IAM ロールが必要です。Amazon Data Firehose はその IAM ロールを引き受け、指定されたバケット、キー、および CloudWatch ロググループとストリームへのアクセスを取得します。
次のアクセスポリシーを使用して、Amazon Data Firehose が S3 バケットおよび AWS KMS キーにアクセスできるようにします。S3 バケットを所有していない場合、Amazon S3 アクションのリストに s3:PutObjectAcl
を追加します。これにより、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 を使用しない場合は、そのステートメントを削除できます。Amazon 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}}/*" }
他の AWS のサービスによる AWS リソースへのアクセスの許可の詳細については、IAM ユーザーガイド の「AWS サービスにアクセス許可を委任するロールの作成」を参照してください。
別のアカウントの Amazon S3 の宛先へのアクセスを Amazon Data Firehose に付与する方法については、「Amazon S3 の宛先へのクロスアカウント間の配信」を参照してください。
Apache Iceberg テーブルの宛先へのアクセスを Firehose に付与する
AWS Glue を使用して Firehose ストリームと Apache Iceberg テーブルを作成する前に、IAM ロールが必要です。ポリシーと IAM ロールを作成するには、次のステップを実行します。Firehose はこの IAM ロールを引き受け、必要なアクションを実行します。
-
AWS Management Console にサインインして、IAM コンソール (https://console.aws.amazon.com/iam/
) を開きます。 -
ポリシーを作成し、ポリシーエディタで [JSON] を選択します。
-
読み取り/書き込み許可、データカタログのテーブルを更新する許可など、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 をモニタリングする」を参照してください。
-
インラインポリシーで、
amzn-s3-demo-bucket
を、Amazon S3 バケット名に置き換え、aws-account-id およびリージョンを、リソースの有効な AWS アカウント 番号とリージョンに置き換えます。注記
このロールは、データカタログ内のすべてのデータベースとテーブルに許可を付与します。必要に応じて、特定のテーブルとデータベースにのみ許可を付与できます。
-
ポリシーを作成したら、IAM コンソール
を開き、[信頼されたエンティティタイプ] として AWS のサービス を使用して IAM ロールを作成します。 -
[サービスまたはユースケース] で、[Kinesis] を選択します。[ユースケース]で、[Kinesis Firehose] を選択します。
-
次のページで、前のステップで作成したポリシーを選択し、このロールにアタッチします。レビューページでは、このロールを引き受けるための許可を Firehose サービスに付与する信頼ポリシーが既にこのロールにアタッチされているのを確認できます。ロールを作成すると、Amazon Data Firehose は、AWS Glue および S3 バケットで必要なオペレーションを実行するために、そのロールを引き受けることができます。
Amazon Redshift の宛先へのアクセスを Firehose に付与する
Amazon Redshift の宛先を使用して Amazon Data Firehose にアクセスを付与するときは、次を参照してください。
トピック
IAM ロールとアクセスポリシー
Amazon Redshift の宛先を使用する場合、Amazon Data Firehose は中間の場所として S3 バケットにデータを配信します。オプションで、データ暗号化のためにお客様が所有している AWS KMS キーを使用できます。次に Amazon Data Firehose は、S3 バケットから Amazon Redshift プロビジョンドクラスターまたは Amazon Redshift Serverless ワークグループにデータをロードします。エラーログ記録が有効になっている場合、Amazon Data Firehose はデータ配信エラーを CloudWatch ロググループとストリームにも送信します。Amazon Data Firehose は、指定された Amazon Redshift ユーザー名とパスワードを使用してプロビジョンドクラスターまたは Amazon Redshift Serverless ワークグループにアクセスし、IAM ロールを使って、指定されたバケット、キー、CloudWatch ロググループ、ストリームにアクセスします。Firehose ストリームを作成するときは、IAM ロールが必要です。
次のアクセスポリシーを使用して、Amazon Data Firehose が S3 バケットおよび AWS KMS キーにアクセスできるようにします。S3 バケットを所有していない場合は、Amazon S3 アクションのリストに s3:PutObjectAcl
を追加します。これにより、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
" ] } ] }
他の AWS のサービスによる AWS リソースへのアクセスの許可の詳細については、IAM ユーザーガイド の「AWS サービスにアクセス許可を委任するロールの作成」を参照してください。
Amazon Redshift プロビジョンドクラスターまたは Amazon Redshift Serverless サーバーレスワークグループへの VPC アクセス
Amazon Redshift プロビジョンドクラスターまたは Amazon Redshift Serverless ワークグループが仮想プライベートクラウド (VPC) にある場合、それらはパブリック IP アドレスでパブリックにアクセスできる必要があります。また、Amazon Data Firehose IP アドレスのブロックを解除して、Amazon Data Firehose に Amazon Redshift プロビジョンドクラスターまたは Amazon Redshift Serverless ワークグループへのアクセスを付与します。現在、Amazon Data Firehose は利用可能なリージョンごとに 1 つの CIDR ブロックを使用します。
リージョン | CIDR ブロック |
---|---|
米国東部(オハイオ) |
|
米国東部 (バージニア北部) | 52.70.63.192/27 |
米国西部 (北カリフォルニア) | 13.57.135.192/27 |
米国西部 (オレゴン) | 52.89.255.224/27 |
AWS GovCloud (米国東部) | 18.253.138.96/27 |
AWS 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 |
アジアパシフィック (東京) | 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 |
中東 (アラブ首長国連邦) | 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 Service の宛先へのアクセスを付与する
OpenSearch Service の宛先を使用している場合、Amazon Data Firehose はデータを OpenSearch Service クラスターに配信し、同時に、失敗したドキュメントまたはすべてのドキュメントを S3 バケットにバックアップします。エラーログ記録が有効になっている場合、Amazon Data Firehose はデータ配信エラーを CloudWatch ロググループとストリームにも送信します。Amazon Data Firehose は IAM ロールを使用して、指定された OpenSearch Service ドメイン、S3 バケット、AWS KMS キー、およびCloudWatch ロググループとストリームにアクセスします。Firehose ストリームを作成するときは、IAM ロールが必要です。
次のアクセスポリシーを使用して、Amazon Data Firehose が S3 バケット、OpenSearch Service ドメイン、および AWS KMS キーにアクセスできるようにします。S3 バケットを所有していない場合は、Amazon S3 アクションのリストに s3:PutObjectAcl
を追加します。これにより、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
" ] } ] }
他の AWS のサービスによる AWS リソースへのアクセスの許可の詳細については、IAM ユーザーガイド の「AWS サービスにアクセス許可を委任するロールの作成」を参照してください。
別のアカウントの OpenSearch Service クラスターへのアクセスを Amazon Data Firehose に付与する方法については、「OpenSearch Service の宛先へのクロスアカウント間の配信」を参照してください。
VPC 内の OpenSearch Service の宛先へのアクセスを Firehose に付与する
OpenSearch Service ドメインが VPC 内にある場合は、前のセクションで説明した許可を Amazon Data Firehose に付与してください。さらに、OpenSearch Service ドメインの VPC にアクセスできるように、次の許可を Amazon Data Firehose に付与する必要があります。
-
ec2:DescribeVpcs
-
ec2:DescribeVpcAttribute
-
ec2:DescribeSubnets
-
ec2:DescribeSecurityGroups
-
ec2:DescribeNetworkInterfaces
-
ec2:CreateNetworkInterface
-
ec2:CreateNetworkInterfacePermission
-
ec2:DeleteNetworkInterface
重要
Firehose ストリームの作成後にこれらの許可を取り消さないでください。これらの許可を取り消すと、サービスが ENI のクエリまたは更新を試みるたびに、Firehose ストリームのパフォーマンスが低下するか、または OpenSearch サービスドメインへのデータの配信が停止します。
重要
プライベート VPC の宛先にデータを配信するためのサブネットを指定する場合は、選択したサブネットに十分な数の空き IP アドレスがあることを確認してください。指定されたサブネットに使用可能な空き IP アドレスがない場合、Firehose はプライベート VPC でデータ配信用の ENI を作成または追加できず、配信のパフォーマンスが低下するか、または配信が失敗します。
Firehose ストリームを作成または更新するときに、OpenSearch Service ドメインにデータを送信するときに Firehose で使用するセキュリティグループを指定します。OpenSearch Service ドメインで使用しているのと同じセキュリティグループを使用することも、別のセキュリティグループを使用することもできます。別のセキュリティグループを指定する場合は、そのセキュリティグループで、OpenSearch Service ドメインのセキュリティグループへのアウトバウンド HTTPS トラフィックを必ず許可します。また、OpenSearch Service ドメインのセキュリティグループで、Firehose ストリームの設定時に指定したセキュリティグループからの HTTPS トラフィックを必ず許可します。Firehose ストリームと OpenSearch Service ドメインの両方に同じセキュリティグループを使用する場合は、セキュリティグループのインバウンドルールで HTTPS トラフィックを必ず許可します。セキュリティグループのルールの詳細については、Amazon VPCドキュメントの「セキュリティグループのルール」を参照してください。
Firehose に公開 OpenSearch Serverless の宛先へのアクセスを付与する
OpenSearch Serverless の宛先を使用している場合、Amazon Data Firehose はデータを OpenSearch Serverless クラスターに配信し、同時に、失敗したドキュメントまたはすべてのドキュメントを S3 バケットにバックアップします。エラーログ記録が有効になっている場合、Amazon Data Firehose はデータ配信エラーを CloudWatch ロググループとストリームにも送信します。Amazon Data Firehose は IAM ロールを使用して、指定された OpenSearch Serverless コレクション、S3 バケット、AWS KMS キー、CloudWatch ロググループ、ストリームにアクセスします。Firehose ストリームを作成するときは、IAM ロールが必要です。
次のアクセスポリシーを使用して、Amazon Data Firehose が S3 バケット、OpenSearch Serverless ドメイン、AWS KMS キーにアクセスできるようにします。S3 バケットを所有していない場合は、Amazon S3 アクションのリストに s3:PutObjectAcl
を追加します。これにより、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
/*" ] } ]
他の AWS のサービスによる AWS リソースへのアクセスの許可の詳細については、IAM ユーザーガイド の「AWS サービスにアクセス許可を委任するロールの作成」を参照してください。
VPC 内の OpenSearch Serverless の宛先へのアクセスを Firehose に付与する
OpenSearch Serverless コレクションが VPC 内にある場合は、前のセクションで説明した許可を Amazon Data Firehose に付与してください。さらに、OpenSearch Serverless コレクションの VPC にアクセスできるように、次の許可を Amazon Data Firehose に付与する必要があります。
-
ec2:DescribeVpcs
-
ec2:DescribeVpcAttribute
-
ec2:DescribeSubnets
-
ec2:DescribeSecurityGroups
-
ec2:DescribeNetworkInterfaces
-
ec2:CreateNetworkInterface
-
ec2:CreateNetworkInterfacePermission
-
ec2:DeleteNetworkInterface
重要
Firehose ストリームの作成後にこれらの許可を取り消さないでください。これらの許可を取り消すと、サービスが ENI のクエリまたは更新を試みるたびに、Firehose ストリームのパフォーマンスが低下するか、または OpenSearch サービスドメインへのデータの配信が停止します。
重要
プライベート VPC の宛先にデータを配信するためのサブネットを指定する場合は、選択したサブネットに十分な数の空き IP アドレスがあることを確認してください。指定されたサブネットに使用可能な空き IP アドレスがない場合、Firehose はプライベート VPC でデータ配信用の ENI を作成または追加できず、配信のパフォーマンスが低下するか、または配信が失敗します。
Firehose ストリームを作成または更新するときは、OpenSearch Serverless コレクションにデータを送信する際に Firehose で使用するセキュリティグループを指定します。OpenSearch Serverless コレクションで使用しているものと同じセキュリティグループを使用できますが、別のセキュリティグループも使用できます。別のセキュリティグループを指定する場合は、そのセキュリティグループが、OpenSearch Serverless コレクションのセキュリティグループへのアウトバウンド HTTPS トラフィックを許可していることを確認します。また、OpenSearch Serverless コレクションのセキュリティグループが、Firehose ストリームを設定したときに指定したセキュリティグループからの HTTPS トラフィックを許可していることも確認します。Firehose ストリームと OpenSearch Serverless コレクションの両方で同じセキュリティグループを使用する場合は、セキュリティグループのインバウンドルールが HTTPS トラフィックを許可していることを確認します。セキュリティグループのルールの詳細については、Amazon VPCドキュメントの「セキュリティグループのルール」を参照してください。
Splunk の宛先へのアクセスを Firehose に付与する
Splunk の宛先を使用している場合、Amazon Data Firehose はデータを Splunk HTTP Event Collector (HEC) エンドポイントに配信します。また、指定した Amazon S3 バケットにデータをバックアップします。必要に応じて Amazon S3 のサーバー側の暗号化のために所有している AWS KMS キーを使用することもできます。エラーログ記録が有効になっている場合、Firehose はデータ配信エラーを CloudWatch ログストリームに送信します。データ変換のために AWS Lambda を使用することもできます。
AWS ロードバランサーを使用した場合、それが Classic Load Balancer または Application Load Balancer であることを確認します。また、Classic Load Balancer の Cookie の有効期限を無効にした状態で、期間ベースのスティッキーセッションを有効にし、Application Load Balancer の有効期限を最大値 (7 日間) に設定します。これを行う方法の詳細については、Classic Load Balancer または Application Load Balancer の「Duration-Based Session Stickiness」を参照してください。
Firehose ストリームを作成する際には、IAM ロールが必要です。Firehose はその IAM ロールを引き受け、指定されたバケット、キー、および CloudWatch ロググループとストリームへのアクセスを取得します。
次のアクセスポリシーを使用して、Amazon Data Firehose が S3 バケットにアクセスできるようにします。S3 バケットを所有していない場合は、Amazon S3 アクションのリストに s3:PutObjectAcl
を追加します。これにより、Amazon Data Firehose で配信されるオブジェクトへのフルアクセスが、バケット所有者に付与されます。このポリシーは、エラーログ記録のための CloudWatch へのアクセスとデータ変換のための AWS Lambda へのアクセスも Amazon Data Firehose に付与します。このポリシーには、Amazon Kinesis Data Streams へのアクセスを許可するステートメントも含まれています。データソースとして Kinesis Data Streams を使用しない場合は、そのステートメントを削除できます。Amazon Data Firehose は Splunk へのアクセスに IAM を使用しません。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
" ] } ] }
他の AWS のサービスによる AWS リソースへのアクセスの許可の詳細については、IAM ユーザーガイド の「AWS サービスにアクセス許可を委任するロールの作成」を参照してください。
VPC の Splunk へのアクセス
Splunk プラットフォームが VPC にある場合、パブリック IP アドレスでパブリックにアクセス可能である必要があります。また、Amazon Data Firehose の IP アドレスをブロック解除して、Splunk プラットフォームへのアクセスを Amazon Data Firehose に付与する必要があります。Amazon Data Firehose は現在、次の CIDR ブロックを使用します。
リージョン | CIDR ブロック |
---|---|
米国東部(オハイオ) |
|
米国東部 (バージニア北部) | 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 |
AWS GovCloud (米国東部) | 18.253.138.192/26 |
AWS 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 |
欧州 (パリ) | 35.180.112.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 |
中東 (アラブ首長国連邦) | 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 に発行して、サポートされている宛先に VPC フローログを送信する方法の詳細については、「Amazon Data Firehose を使用して VPC フローログを Splunk に取り込む
Snowflake または HTTP エンドポイントへのアクセス
宛先が HTTP エンドポイントまたは Snowflake パブリッククラスターである場合、Amazon Data Firehose に固有の AWS IP アドレス範囲のサブセットはありません。
Firehose をパブリック Snowflake クラスターの許可リストまたはパブリック HTTP もしくは HTTPS エンドポイントに追加するには、現在の AWS IP アドレス範囲をすべてイングレスルールに追加します。
注記
通知は、関連付けられたトピックと同じ AWS リージョンの IP アドレスからのものであるとは限りません。すべてのリージョンの AWS IP アドレス範囲を含める必要があります。
Snowflake の宛先へのアクセスを Firehose に付与する
Snowflake を宛先として使用する場合、Firehose は Snowflake アカウント URL を使用して Snowflake アカウントにデータを配信します。また、指定した Amazon Simple Storage Service バケットにエラーデータをバックアップします。必要に応じて Amazon S3 のサーバー側の暗号化のために所有している AWS Key Management Service キーを使用することもできます。エラーログ記録が有効になっている場合、Firehose はデータ配信エラーを CloudWatch Logs ストリームに送信します。
Firehose ストリームを作成する前に、IAM ロールが必要です。Firehose はその IAM ロールを引き受け、指定されたバケット、キー、および CloudWatch ロググループとストリームへのアクセスを取得します。次のアクセスポリシーを使用して、Firehose が S3 バケットにアクセスできるようにします。S3 バケットを所有していない場合は、Amazon Simple Storage Service アクションのリストに s3:PutObjectAcl
を追加します。これにより、Firehose で配信されるオブジェクトへのフルアクセスが、バケット所有者に付与されます。また、このポリシーは、エラーログ記録のために CloudWatch へのアクセスを Firehose に付与します。このポリシーには、Amazon Kinesis Data Streams へのアクセスを許可するステートメントも含まれています。データソースとして Kinesis Data Streams を使用しない場合は、そのステートメントを削除できます。Firehose は Snowflake にアクセスするために IAM を使用しません。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:*" ] } ] }
他の AWS のサービスによる AWS リソースへのアクセスの許可の詳細については、IAM ユーザーガイド の「AWS サービスにアクセス許可を委任するロールの作成」を参照してください。
VPC での Snowflake へのアクセス
Snowflake クラスターでプライベートリンクが有効になっている場合、Firehose はプライベートリンクの作成時に次のいずれかの VPC エンドポイントを使用して、パブリックインターネットを経由せずにプライベートクラスターにデータを配信します。そのためには、Snowflake ネットワークルールを作成して、クラスターが存在している AWS リージョン のために、次の AwsVpceIds
からのイングレスを許可します。詳細については、「Snowflake ユーザーガイド」の「Creating network rule
AWS リージョン | 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 |
アジアパシフィック (東京) |
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 |
HTTP エンドポイントの宛先へのアクセスを Firehose に付与する
Amazon Data Firehose を使用して、任意の HTTP エンドポイントの宛先にデータを配信できます。また、Amazon Data Firehose は指定した Amazon S3 バケットにデータをバックアップします。必要に応じて Amazon S3 のサーバー側の暗号化のために所有している AWS KMS キーを使用することもできます。エラーログ記録が有効になっている場合、Amazon Data Firehose はデータ配信エラーを CloudWatch ログストリームに送信します。データ変換のために AWS Lambda を使用することもできます。
Firehose ストリームを作成するときは、IAM ロールが必要です。Amazon Data Firehose はその IAM ロールを引き受け、指定されたバケット、キー、および CloudWatch ロググループとストリームへのアクセスを取得します。
次のアクセスポリシーを使用して、Amazon Data Firehose がデータバックアップ用に指定した S3 バケットにアクセスできるようにします。S3 バケットを所有していない場合は、Amazon S3 アクションのリストに s3:PutObjectAcl
を追加します。これにより、Amazon Data Firehose で配信されるオブジェクトへのフルアクセスが、バケット所有者に付与されます。このポリシーは、エラーログ記録のための CloudWatch へのアクセスとデータ変換のための AWS Lambda へのアクセスも Amazon Data Firehose に付与します。このポリシーには、Amazon Kinesis Data Streams へのアクセスを許可するステートメントも含まれています。データソースとして Kinesis Data Streams を使用しない場合は、そのステートメントを削除できます。
重要
Amazon Data Firehose は IAM を使用して、サポートされているサードパーティーサービスプロバイダーが所有する HTTP エンドポイントの宛先 (Datadog、Dynatrace、LogicMonitor、MongoDB、New Relic、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
" ] } ] }
他の AWS のサービスによる AWS リソースへのアクセスの許可の詳細については、IAM ユーザーガイド の「AWS サービスにアクセス許可を委任するロールの作成」を参照してください。
重要
現在、Amazon Data Firehose は VPC 内の HTTP エンドポイントへのデータ配信をサポートしていません。
Amazon MSK からのクロスアカウント配信
Firehose アカウント (アカウント B など) から Firehose ストリームを作成しており、ソースが別の AWS アカウント (アカウント A) の MSK クラスターである場合は、次の設定を行う必要があります。
アカウント A:
Amazon MSK コンソールで、プロビジョンドクラスターを選択し、[プロパティ] を選択します。
[ネットワーク設定] で [編集] を選択し、[マルチ VPC 接続] をオンにします。
[セキュリティ設定] で [クラスターポリシーの編集] を選択します。
クラスターにまだポリシーが設定されていない場合は、[Firehose サービスプリンシパルを含める] と [Firehose のクロスアカウント S3 配信を有効にする] にチェックを入れます。AWS Management Console が、適切なアクセス許可を持つポリシーを自動生成します。
-
クラスターに既にポリシーが設定されている場合は、既存のポリシーに次のアクセス許可を追加します。
{ "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 }, }
[AWS プリンシパル] にアカウント B のプリンシパル ID を入力します。
[トピック] で、Firehose ストリームでデータを取り込む Apache Kafka トピックを指定します。Firehose ストリームを作成した後は、このトピックを更新することはできません。
[Save changes] (変更の保存) を選択します。
アカウント B:
Firehose コンソールで、アカウント B を使用して [Firehose ストリームを作成] を選択します。
[ソース] で、[Amazon Managed Streaming for Apache Kafka] を選択します。
[ソース設定] の [Apache Kafka クラスター用 Amazon Managed Streaming] で、アカウント A の Amazon MSK クラスターの ARN を入力します。
[トピック] で、Firehose ストリームでデータを取り込む Apache Kafka トピックを指定します。Firehose ストリームを作成した後は、このトピックを更新することはできません。
-
[配信ストリーム名] に Firehose ストリームの名前を入力します。
アカウント B で Firehose ストリームを作成するときは、その Firehose ストリームに、設定したトピックでクロスアカウント Amazon MSK クラスターへの「読み取り」アクセスを許可する IAM ロールが必要になります (AWS Management Console を使用している場合はデフォルトで作成されます)。
AWS 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 の宛先へのクロスアカウント間の配信
AWS CLI または Amazon Data Firehose API を使用して、1 つの AWS アカウントで Firehose ストリームを作成し、Amazon S3 の宛先は別のアカウントに設定できます。次の手順では、アカウント A が所有する Firehose ストリームを設定して、アカウント B が所有する Amazon S3 バケットにデータを配信する例を示します。
-
[Amazon S3 宛先へのアクセスを Firehose に付与する] で説明されているステップを使用して、アカウント A で IAM ロールを作成します。
注記
この場合、アクセスポリシーで指定した Amazon S3 バケットはアカウント B が所有しています。Amazon Data Firehose が配信するオブジェクトへのフルアクセスがアカウント B に付与されるよう、アクセスポリシーで Amazon S3 アクションのリストに
s3:PutObjectAcl
を追加したことを確認してください。このアクセス許可は、クロスアカウント配信に必要です。Amazon Data Firehose は、リクエストの「x-amz-acl」ヘッダーを「bucket-owner-full-control」に設定します。 -
以前に作成した IAM ロールからのアクセスを許可するには、アカウント B で S3 バケットポリシーを作成します。次のコードは、バケットポリシーの例です。詳細については、「バケットポリシーとユーザーポリシーの使用」を参照してください。
{ "Version": "2012-10-17", "Id": "PolicyID", "Statement": [ { "Sid": "StmtID", "Effect": "Allow", "Principal": { "AWS": "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
/*" ] } ] } -
ステップ 1 で作成した IAM ロールを使用して、アカウント A で Firehose ストリームを作成します。
OpenSearch Service の宛先へのクロスアカウント間の配信
AWS CLI または Amazon Data Firehose API を使用して、1 つの AWS アカウントで Firehose ストリームを作成し、OpenSearch Service の宛先は別のアカウントに設定できます。次の手順では、アカウント A で Firehose ストリームを作成し、アカウント B が所有する OpenSearch Service の宛先にデータを配信するよう設定する方法の例を示しています。
-
Firehose に公開 OpenSearch Service の宛先へのアクセスを付与する で示されているステップを使用して、アカウント A に IAM ロールを作成します。
-
前のステップで作成した IAM ロールからのアクセスを許可するには、アカウント B に OpenSearch Service ポリシーを作成します。例として、JSON を以下に示します。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "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/" ] } ] } -
ステップ 1 で作成した IAM ロールを使用して、アカウント A で Firehose ストリームを作成します。Firehose ストリームを作成する場合は、AWS CLI または Amazon Data Firehose API を使用して、OpenSearch Service の
DomainARN
ではなくClusterEndpoint
フィールドを指定します。
注記
1 つの AWS アカウントで Firehose ストリームを作成し、OpenSearch Service の宛先は別のアカウントに設定するには、AWS CLI または Amazon Data Firehose API を使用する必要があります。AWS Management Console を使用して、このような種類のクロスアカウント設定を作成することはできません。
タグを使用したアクセスへのコントロール
IAM ポリシーでオプションの Condition
要素 (または Condition
ブロック) を使用して、タグキーと値に基づいて Amazon Data Firehose オペレーションへのアクセスをファインチューニングできます。次のサブセクションでは、さまざまな Amazon Data Firehose オペレーションのためにこれを行う方法について説明します。Condition
要素とその中で使用できる演算子の使用の詳細については、「IAM JSON ポリシー要素: Condition」を参照してください。
CreateDeliveryStream
CreateDeliveryStream
オペレーションでは、aws:RequestTag
条件キーを使用します。次の例では、MyKey
と MyValue
はキー、およびタグの対応する値を表しています。詳細については、「タグの基本を理解する」を参照してください。
{ "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
でタグベースのアクセスコントロールを使用することはできません。
その他のオペレーション
CreateDeliveryStream
、TagDeliveryStream
、UntagDeliveryStream
、および ListDeliveryStreams
以外のすべての Firehose オペレーションで、aws:RequestTag
条件キーを使用します。次の例では、MyKey
と MyValue
はキー、およびタグの対応する値を表しています。
ListDeliveryStreams
は、firehose:ResourceTag
条件キーを使用して、その Firehose ストリームのタグに基づいてアクセスをコントロールします。
次の例では、MyKey
と MyValue
はキー、およびタグの対応する値を表しています。このポリシーは、値が MyValue
である MyKey
というタグを持つ Data Firehose ストリームにのみ適用されます。リソースタグに基づいたアクセスコントロールの詳細については、「IAM ユーザーガイド」の「Controlling access to AWS resources using tags」を参照してください。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": "firehose:DescribeDeliveryStream", "Resource": "*", "Condition": { "StringEquals": { "firehose:ResourceTag/MyKey": "MyValue" } } } ] }