今までKonnectの監査ログ(Audit Log)の対象範囲にはDev Portalは含まれていなかった。
Konnectの監査ログは取れるのだが、Dev Portalについては誰がいつログインしたかを追う方法がなかったので、開発者向けにも高いセキュリティ要件が求められる場合では使いづらかった。
今回、これがサポートされたので早速確認してみる。
公式ドキュメントとしてはこの辺になる。
検証の前提
以下の環境で確認する。
Beeceptorは無料で利用できるMockサーバを提供するサービスで使い勝手がいいのでテストにはオススメ。
動作確認
以下の流れで設定する。
- 各種設定値を環境変数に設定する
- KonnectにAudit Logの転送先を登録
- Dev PortalのWebhookを設定しAudit Logを転送する
今回は最初はAPIで設定し、後でUIの設定も確認する。
APIによる設定
環境変数の設定
今回の検証は後々使い回せるよう、基本的な設定値は環境変数で定義する。
まずトークンを環境変数に設定する。
KONNECT_TOKEN=kpat_ERWxxxx
接続先リージョンを指定する。
REGION=us
ログの転送先を環境変数に設定する。
SIEM_ENDPOINT=https://xxxx.free.beeceptor.com
ログ転送先サーバの認証情報を設定する。今回利用するbeeceptorは無料版だと認証機能がないので、ここではダミーを設定する。
AUTORIZATION="Bearer dummy"
Dev PortalのIDを設定する。
PORTAL_ID="a0c7d46c-87a5-4ad9-beb4-9445d601c71b"
なお、Dev PortalのIDはKonnectのUIから確認できる(APIでも取れるが今回は省略)。
Audit Logの転送先を登録
Audit Logの転送先を登録する。
APIのエンドポイントは/audit-log-destinations
になる。(ちなみにKonnectのAudit Logの登録用APIのエンドポイントは/audit-log-webhook
となる。同じではないので注意)
またこの設定はKonnect全体の設定であり、特定のエンティティに絡む設定でもないのでリージョンはglobalとなり、htts://global.api.konghq.com
にリクエストを投げる。
curl -X POST https://global.api.konghq.com/v2/audit-log-destinations \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $KONNECT_TOKEN" \
-d '{
"endpoint": "'"$SIEM_ENDPOINT"'",
"authorization":"'"$AUTORIZATION"'",
"log_format":"json",
"name":"Webhook Endpoint for Dev Portal",
"skip_ssl_verification": false
}'
skip_ssl_verification
はhttpを使っている時など証明書の検証をスキップしたい場合はtrue
にする。
成功すると以下のような感じで登録した内容が返ってくる。
{"id":"7be8f4bb-4690-4e1a-948a-f07472a7xxxx","name":"Webhook Endpoint for Dev Portal","endpoint":"https://xxxx.free.beeceptor.com","log_format":"json","skip_ssl_verification":false,"created_at":"2024-10-12T04:06:36Z"}
Dev PortalのWebhookの設定
Dev PortalのWebhookに先ほど作成した転送先を登録する。
登録するにあたり、さきほど作成した転送先のIDが必要となるので取得する。
DEST_ID=$(curl -s -X GET https://global.api.konghq.com/v2/audit-log-destinations \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $KONNECT_TOKEN" | jq -r ".data[0].id")
Dev Portalの/audit-log-webhook
にリクエストを投げて登録する。
curl -X PATCH https://${REGION}.api.konghq.com/v2/portals/${PORTAL_ID}/audit-log-webhook \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $KONNECT_TOKEN" \
-d '{
"audit_log_destination_id": "'"${DEST_ID}"'",
"enabled": true
}'
コマンドが成功すると以下のような出力が返ってくる。
{"enabled":true,"audit_log_destination_id":"7be8f4bb-4690-4e1a-948a-f07472axxxxx"}
これでもう監査ログが取れるはずだ。
Dev Portalにアクセスしてみる。
アクセス後、beeceptorを見てみると以下のように何かがPOSTされたことが確認できる。
中身を見てみると以下のような感じになっている。
{
"cef_version": "0",
"event_class_id": "AUTHENTICATION_TYPE_SSO",
"event_product": "Dev-Portal",
"event_ts": "2024-10-12T04:37:42Z",
"event_vendor": "KongInc",
"event_version": "1.0",
"name": "AUTHENTICATION_OUTCOME_SUCCESS",
"org_id": "bbe3ced9-475c-4b55-8ea6-07018d7cxxxx",
"portal_id": "a0c7d46c-87a5-4ad9-beb4-9445d601xxxx",
"principal_id": "39b4d34c-56d1-4b24-8238-6c33d48fxxxx",
"request": "/api/v2/developer/authenticate/oidc-callback?code\\=0.AS4...(省略)",
"rt": 1727843862860,
"severity": 0,
"src": "224.216.36.247",
"success": true,
"trace_id": "15996394345079714525",
"user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36",
"sig": "3Me8V0K4nJ6JNNmL93Kz-dWDBqtotL7_wbFRbZrcJKyDptk-p_hPPDHkTQw6XOY9kmGOOpNZrvv-xxxx"
}
どの組織(org_id
)のどのPortal(portal_id
)に対し、いつ(event_ts
)誰が(principal_id)どこから(src)どの認証方法(event_class_id
)で接続し、結果どうなったか(name
)が確認できることが分かる。
Replay Jobの確認
Dev Portalの監査ログでもReplay Jobが利用できる。
Replay Jobは最大7日前までの監査ログを再送する機能であり、Audit Logの転送先サーバがダウンしていた時などに利用すると便利な機能だ。
この機能はPortalの/audit-log-replay-job
に対してリクエストを送ることで利用できる。
curl -X PUT https://${REGION}.api.konghq.com/v2/portals/${PORTAL_ID}/audit-log-replay-job \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $KONNECT_TOKEN" \
-d '{
"start_at": "2024-09-27T20:00:00Z",
"end_at": "2024-10-01T20:00:00Z"
}'
start_at
とend_at
で期間を指定している。
成功すると以下のような出力が返ってくる。
{"start_at":"2024-09-27T20:00:00Z","end_at":"2024-10-01T20:00:00Z","status":"accepted","updated_at":"2024-10-02T04:50:45Z"}
なお、期限を適切に設定しないと以下のようなエラーが返ってくる。
{"status":400,"title":"Bad Request","instance":"konnect:trace:7888096506638149934","invalid_parameters":[{"field":"start_at","reason":"must be within the 7 day retention period."},{"field":"end_at","reason":"must be within the 7 day retention period."}]}
API発行後、beeceptorを見てみると以下のように過去にアクセスした際の監査ログがまとめてPOSTされることが確認できる。
出力を見ると過去のログインのAudit Logが確認できる。
Replay Jobも問題なさそうだ。
UIによる設定
UIでも監査ログの転送は簡単に設定できる。
最初にWebhookを登録する。
Organization
->Audit Log Setup
からWebhook Destination
のタブのNew Webhook
をクリックする。
APIの時と同じようにName
、Endpoint
、Authorization Header
を指定してSaveする。
次にDev Portal
のタブをクリックし、New Dev Portal Audit Log
をクリックする。
Dev PortalとEndpointを紐づける画面になるので、それぞれ選択しEnabled
を有効にしてSaveする。
以上で設定は終了となる。非常に簡単。
Dev Portalにログインすると、APIで設定した時同様にアクセスが確認できる。
また作成したDev Portalの紐づけ設定をクリックすると設定のステータスやReplayが行える。
所感
監査ログはPCI-DSSなどのセキュリティ基準などによっては必須になるため、今回の機能追加によってDev Portalがより幅広い人に使えるようになったと思う。
設定は簡単でログも分かりやすいので、利用する際に躓くこともあまりなさそうだ。