0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

KonnectのDev Portalの監査ログを取得する

Posted at

今までKonnectの監査ログ(Audit Log)の対象範囲にはDev Portalは含まれていなかった。
Konnectの監査ログは取れるのだが、Dev Portalについては誰がいつログインしたかを追う方法がなかったので、開発者向けにも高いセキュリティ要件が求められる場合では使いづらかった。
今回、これがサポートされたので早速確認してみる。
公式ドキュメントとしてはこの辺になる。

検証の前提

以下の環境で確認する。

  • Dev Portalは作成済み
  • Dev Portalの認証はOIDCを利用
  • 監査ログの受取先はBeeceptorを利用
  • 管理者のPAT(トークン)は入手済み

Beeceptorは無料で利用できるMockサーバを提供するサービスで使い勝手がいいのでテストにはオススメ。

動作確認

以下の流れで設定する。

  1. 各種設定値を環境変数に設定する
  2. KonnectにAudit Logの転送先を登録
  3. 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でも取れるが今回は省略)。
20241002131819.png

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されたことが確認できる。
20241002133822.png

中身を見てみると以下のような感じになっている。

{
  "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_atend_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されることが確認できる。
20241002135329.png
出力を見ると過去のログインのAudit Logが確認できる。
Replay Jobも問題なさそうだ。

UIによる設定

UIでも監査ログの転送は簡単に設定できる。
最初にWebhookを登録する。
Organization->Audit Log SetupからWebhook DestinationのタブのNew Webhookをクリックする。
image.png

APIの時と同じようにNameEndpointAuthorization Headerを指定してSaveする。
image.png

次にDev Portalのタブをクリックし、New Dev Portal Audit Logをクリックする。
image.png

Dev PortalとEndpointを紐づける画面になるので、それぞれ選択しEnabledを有効にしてSaveする。
image.png

以上で設定は終了となる。非常に簡単。
Dev Portalにログインすると、APIで設定した時同様にアクセスが確認できる。
image.png

また作成したDev Portalの紐づけ設定をクリックすると設定のステータスやReplayが行える。
image.png

所感

監査ログはPCI-DSSなどのセキュリティ基準などによっては必須になるため、今回の機能追加によってDev Portalがより幅広い人に使えるようになったと思う。
設定は簡単でログも分かりやすいので、利用する際に躓くこともあまりなさそうだ。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?