AWS API Gateway アクセスログを収集する
このドキュメントでは、AWS CloudWatch Logs と Kinesis Data Firehose を使用して Amazon API Gateway アクセスログを Google Security Operations に取り込む方法について説明します。Amazon API Gateway は、API を大規模に構築して管理するための REST API と HTTP API を提供します。アクセスログは、API の使用状況をモニタリングし、問題のトラブルシューティングに役立ちます。この統合により、これらのログが Google SecOps にストリーミングされ、分析とモニタリングが行われます。
始める前に
次の前提条件を満たしていることを確認してください。
- Google SecOps インスタンス
- AWS への特権アクセス
Amazon API Gateway アクセス ロギング(CloudWatch Logs)を有効にする
- AWS コンソール > API Gateway に移動します。
REST API の場合:
- [ステージ> ログ/トレース> アクセス ロギングを有効にする] を開きます。
ログ形式: [JSON] を選択します。
{ "requestId":"$context.requestId", "ip":"$context.identity.sourceIp", "requestTime":"$context.requestTime", "httpMethod":"$context.httpMethod", "routeKey":"$context.routeKey", "status":"$context.status", "protocol":"$context.protocol", "responseLength":"$context.responseLength", "integrationLatency":"$context.integrationLatency", "error":"$context.error.message" }
CloudWatch Logs ロググループ: ロググループ(
/aws/apigateway/access
など)を選択または作成します。
HTTP API の場合:
- [API> モニタリング> ロギング] を選択します。
- [ステージ>編集] を選択します。
- アクセス ロギングを有効にします。
- 上記の JSON ログ形式を使用します。
- CloudWatch Logs ロググループ: ロググループ(
/aws/apigateway/access
など)を選択または作成します。
[保存] をクリックします。
Amazon API Gateway のログを取り込むように Google SecOps でフィードを構成する
- [SIEM 設定] > [フィード] に移動します。
- [+ 新しいフィードを追加] をクリックします。
- [フィード名] フィールドに「
Amazon API Gateway - CloudWatch via Firehose
」と入力します。 - [ソースタイプ] として [Amazon Data Firehose] を選択します。
- [Log type] で [Amazon API Gateway] を選択します。
- [次へ] をクリックします。
- 次の入力パラメータの値を指定します。
- 分割区切り文字: 省略可
n
- アセットの Namespace:
aws.api_gateway
- 取り込みラベル:
source=apigw_access
、aws_region=<your-region>
など
- 分割区切り文字: 省略可
- [次へ] をクリックします。
- フィードの設定を確認し、[送信] をクリックします。
- フィードの [詳細] で、[シークレット キーを生成] をクリックし、[シークレット キー] をコピーします。
- [エンドポイント情報] から [フィード HTTPS エンドポイント URL] をコピーします。
- [API とサービス] > [認証情報] > [認証情報を作成] > [API キー] で Google Cloud API キーを作成し、Google SecOps API に制限します。
- API キーをコピーして安全な場所に保存します。
Amazon Kinesis Data Firehose を構成する(Google SecOps に直接送信)
- AWS コンソールで、[Kinesis] > [Data Firehose] > [Create delivery stream] に移動します。
- 次の構成の詳細を入力します。
- ソース: [直接 PUT またはその他のソース] を選択します。
- 宛先: [HTTP エンドポイント] を選択します。
- HTTP エンドポイント URL:
ENDPOINT_URL?key=API_KEY
と入力します(前の手順のフィード HTTPS エンドポイント URL と API キーを使用します)。 - HTTP メソッド: [POST] を選択します。
- Access key: フィードで生成された秘密鍵を貼り付けます。
- バッファリングのヒント: [バッファサイズ] = [1 MiB]、[バッファ間隔] = [60 秒] に設定します。
- 圧縮: [無効] を選択します。
- S3 バックアップ: [無効] を選択します。
- 再試行とロギングの設定はデフォルトのままにします。
- [配信ストリームを作成] をクリックします。(例:
cwlogs-to-secops
。)
IAM 権限を構成してロググループをサブスクライブする
- AWS コンソールで、[IAM] > [ポリシー] > [ポリシーの作成] > [JSON] に移動します。
- JSON エディタで、次のポリシーを入力します。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "firehose:PutRecord", "firehose:PutRecordBatch" ], "Resource": "arn:aws:firehose:<region>:<account-id>:deliverystream/cwlogs-to-secops" } ] }
<region>
と<account-id>
は、AWS リージョンとアカウント ID に置き換えます。
ポリシーに
CWLtoFirehoseWrite
という名前を付けて、[ポリシーを作成] をクリックします。[IAM]> [ロール]> [ロールの作成] に移動します。
[カスタム信頼ポリシー] を選択して、次のように入力します。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "logs.<your-region>.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
ポリシー
CWLtoFirehoseWrite
をロールにアタッチします。ロールに「
CWLtoFirehoseRole
」という名前を付けて、[ロールを作成] をクリックします。[CloudWatch] > [ログ] > [ロググループ] に移動します。
前に作成した API Gateway ロググループを選択します。
[サブスクリプション フィルタ] タブを開き、[作成] をクリックします。
[Amazon Kinesis Data Firehose サブスクリプション フィルタを作成] を選択します。
以下の構成を行います。
- 送信先: 配信ストリーム
cwlogs-to-secops
。 - 権限を付与する: ロール
CWLtoFirehoseRole
。 - フィルタ名: 「
all-events
」と入力します。 - フィルタ パターン: すべてのイベントを送信する場合は、空白のままにします。
- 送信先: 配信ストリーム
[ストリーミングを開始] をクリックします。
さらにサポートが必要な場合 コミュニティ メンバーや Google SecOps のプロフェッショナルから回答を得ることができます。