AWS ソースから Splunk クラスターにデータをプッシュするときに、AWS データと Splunk の統合を改善したいと考えています。
解決策
**注:**Kinesis Data Firehose は Application Load Balancer または Network Load Balancer をサポートしていません。代わりに、Classic Load Balancer を使用してください。Cookie の有効期限を無効にした期間ベースのスティッキーセッションを許可するようにしてください。Splunk エンドポイントのデリバリーストリームの問題のトラブルシューティングの詳細については、「Splunk にデータが配信されない」を参照してください。
前提条件
Kinesis Data Firehose デリバリーストリームを作成します。
1. デリバリーストリームを作成します。[ソース] で [ダイレクト PUT] を選択します。
2. [宛先] には、[Splunk] を選択します。
3. デリバリーストリーム名を入力します。
AWS Lambda によるレコード変換の設定
1. レコード変換を設定します。注:****[AWS Lambda を使用してソースレコードを変換する] で、[レコードの変換を有効にする] を選択します。CloudWatch はログを圧縮された.gzip ファイルとして送信するため、Amazon Kinesis はこれらのファイルをユーザーが使用する前に抽出する必要があります。
2. [Lambda 関数] で、[新規作成] を選択します。
3. [Lambda ブループリントの選択] ウィンドウの、[Lambda ブループリント] で、[Kinesis Firehose CloudWatch ログプロセッサ] を選択します。
4. ブラウザで開かれる新しいタブを選択して、Lambda 関数を作成します。
[名前] に Lambda 関数の名前を入力します。
[ロール] に [カスタムロールの作成] を選択します。
5. ブラウザに開いた新しいタブを選択して、新しい AWS ID およびアクセス管理 (IAM) ロールを作成します。[ロール名] で、名前が lambda_basic_execution であることを確認してください。
6. [許可] を選択してロールを作成し、Lambda 関数設定ページに戻ります。
7. [関数を作成] を選択します。
8. 関数がタイムアウトしないようにするには、[タイムアウト] をデフォルトの 3 秒から 1 分 に増やします。
9. [保存] を選択します。
Kinesis Data Firehose のデリバリーストリームを完成させる
1. [Amazon Kinesis コンソール] を開きます。
2. ナビゲーションペインで、[Data Firehose] を選択します。
3. デリバリーストリームで、[Lambda 関数] を選択し、ドロップダウンから新しい AWS Lambda 関数の名前を選択します。
4. **デスティネーション設定で、**作成した Splunk HEC エンドポイントを含む Splunk HEC の詳細を入力します。
**注:**有効な SSL 証明書を使用して Splunk HEC エンドポイントを終了する必要があります。一致する DNS ホスト名を使用して HEC エンドポイントに接続します。クラスターエンドポイントの形式は https://YOUR-ENDPOINT.splunk.com:8088 です。
5. Splunk エンドポイントタイプに、Raw エンドポイントを選択し、認証トークンを入力します。
6. [次へ] を選択します。
7. (オプション) 既存の Amazon Simple Storage Service (Amazon S3) バケットを選択するか、失敗したイベントまたはすべてのイベントをバックアップする新しいパケットを作成します。 必ず デリバリーストリームウィザードのバッファ条件、圧縮と暗号化の設定、エラーログオプションなど、Amazon S3 関連の設定を設定してください。
8. [IAM ロール] で、[新規作成] を選択します。
9. 開いているタブに、[ロール名] を入力し、[許可] を選択します。
10. [次へ] を選択します。
11. [デリバリーストリームの作成] を選択します。
Amazon VPC フローログの設定
**注:**Amazon VPC フローログがある場合は、次のセクション「Amazon CloudWatch Logs サブスクリプションの作成」に進んでください。VPC フローログがない場合は、次の手順を実行してください。
1. [CloudWatch コンソール] を開きます。
2. ナビゲーションペインで、[ログ] を選択します。
3. [アクション]で、[ロググループの作成] を選択します。
4. [ロググループ名] を入力します。
5. [ロググループを作成] を選択します。
6. Amazon VPC コンソールを開きます。
7. ナビゲーションペインの 仮装プライベートクラウドで、[お使いの VPCs] を選択します。
8. コンテンツペインで、VPC を選択します。
9. [フローログ] ビューを選択します。
10. [フローログの作成] を選択します。
- [フィルター] で [すべて] を選択します。
- [宛先ロググループ] で、先ほど作成したロググループを選択します。
- IAM ロールには、Amazon VPC が CloudWatch にログを公開できるようにする IAM ロールを選択してください。適切な IAM ロールがない場合は、[IAM ロール] で [権限の設定] を選択し、次に [新しい IAM ロールを作成する] を選択します。デフォルトの設定をそのまま使用してください。
- [許可] を選択すると、VPCFlowLogs というロールが作成され、宛先ロググループに関連付けられます。
11. [作成] を選択します。
12. ロググループからデリバリーストリームへのリアルタイムフィードを設定します。
**注:**AWS CLI コマンドの実行中にエラーが発生した場合は、最新バージョンの AWS CLI を実行しているかを確認してください。
Amazon CloudWatch Logs サブスクリプションを作成する
1. CloudWatch へのアクセス権を付与して、適切なロール権限で Kinesis Data Firehose ストリームを公開します。
2. AWS CLI を開きます。
3. 次の JSON ファイルを使用してトラストポリシー (TrustPolicyforCWLToFireHose.json) などを作成します。YOUR-RESOURCE-REGION をリソースの AWS リージョンに置き換えてください。
{
"Statement": {
"Effect": "Allow",
"Principal": { "Service": "logs.YOUR-RESOURCE-REGION.amazonaws.com" },
"Action": "sts:AssumeRole"
}
}
4. 次のコマンドを実行して、信頼ポリシーからの権限を持つロールを作成します。
$ aws iam create-role --role-name CWLtoKinesisFirehoseRole --assume-role-policy-document file://TrustPolicyForCWLToFireHose.json
5. 次の JSON ファイルを使用して IAM ポリシー (PermissionPolicyForCWLToFireHose.json) などを作成します。YOUR-AWS-ACCT-NUM をお使いの AWS アカウント番号に、YOUR-RESOURCE-REGION をお使いのリソースのリージョンに、FirehoseSplunkDeliveryStream をストリームの名前に置き換えてください。
{
"Statement":[
{
"Effect":"Allow",
"Action":["firehose:PutRecord"],
"Resource":["arn:aws:firehose:YOUR-RESOURCE-REGION:YOUR-AWS-ACCT-NUM:deliverystream/FirehoseSplunkDeliveryStream"]
},
{
"Effect":"Allow",
"Action":["iam:PassRole"],
"Resource":["arn:aws:iam::YOUR-AWS-ACCT-NUM:role/CWLtoKinesisFirehoseRole"]
}
]
}
6. 次のコマンドを実行して IAM ポリシーをロールにアタッチします。
$ aws iam put-role-policy
--role-name CWLtoKinesisFirehoseRole
--policy-name Permissions-Policy-For-CWL
--policy-document file://PermissionPolicyForCWLToFireHose.json
7. 次のコマンドを実行して、サブスクリプションフィルターを作成します。YOUR-AWS-ACCT-NUM をお使いの AWS アカウント番号に、YOUR-RESOURCE-REGION をお使いのリソースのリージョンに、FirehoseSplunkDeliveryStream をストリームの名前に置き換えてください。
$ aws logs put-subscription-filter
--log-group-name " /vpc/flowlog/FirehoseSplunk"
--filter-name "Destination"
--filter-pattern ""
--destination-arn "arn:aws:firehose:YOUR-RESOURCE-REGION:YOUR-AWS-ACCT-NUM:deliverystream/FirehoseSplunkDeliveryStream"
--role-arn "arn:aws:iam::YOUR-AWS-ACCT-NUM:role/CWLtoKinesisFirehoseRole"
サブスクリプションフィルターの詳細については、「例 3: Amazon Kinesis Data Firehose によるサブスクリプションフィルター」を参照してください。
関連情報
Amazon Kinesis Data Firehose を使用して Splunk へのデータインジェストを強化
デスティネーション設定
Amazon Kinesis Data Firehose によるアクセス制御