AWS Verified Accessのアクセスログ記録設定を試してみた
AWS Verified Access にはアクセスログの記録機能があるため、CloudWatch Losg と S3 バケットへの配信を試してみました。
AWS Verified Access の設定は次のブログが参考になります。
Verified Access のアクセスログについて
Verified Access のアクセスログは保存でき、ログ配信先には次の 3 種類があります。
- CloudWatch Logs
- Amazon S3
- Kinesis Data Firehose
ログ形式は OCSF(Open Cybersecurity Schema Framework) をサポートしています。
ログの例は次のドキュメントに記載があります。
なお、Verified Access リソースへのアクセスは AWS CloudTrail に記録されます。
アクセスログの記録設定
事前にアクセスログ保管用の CloudWatch Logs ロググループと S3 バケットを作成しておきます。
CloudWatch Logs ロググループの主な設定は下記の通りとしました。
- ロググループ名
test-verified-access-log
- 保持期間
12 months (365 日)
S3 バケットの主な設定は下記の通りとしました。
- バケット名
test-verified-access-log-20230501
- リージョン
バージニア北部
(Verified Access 構築したリージョンと合わせました) - デフォルト暗号化
SSE-S3
アクセスログの設定は Verified Access インスタンスで実施します。
CloudWatch Logs ロググループと S3 バケットを指定して設定します。
設定後の画面です。
以上で、ログ記録設定は完了です。
アクセスログの確認
配信されたアクセスログを確認してみます。
テスト用に下記のポリシーを Verified Access グループに設定しています。プライマリ E メールアドレスのドメインと検証済みかどうかを条件としています。 g
permit(principal, action, resource) when { context.idc.user.email.address like "*@gmail.com" && context.idc.user.email.verified == true };
テスト用の AWS IAM Identity Center ユーザーは下表となります。
項目名 | ユーザー 1 | ユーザー 2 |
---|---|---|
ユーザー名 | developer | developer2 |
プライマリ E メール | example_host1@gmail.com | example_host2@gmail.com |
メールの検証 | 検証済 | 未検証 |
CloudWatch Logs のログストリーム名
ログストリーム名は次のような形式で作成されます。
vai-07cb90ee3d0a8dbd2-vagr-0bad28ebe4f567b98-vae-0e6afddf188131684-access-log-192.0.2.1 vai-07cb90ee3d0a8dbd2-vagr-0bad28ebe4f567b98-vae-0e6afddf188131684-access-log-192.0.2.2
vai
は Verified Access インスタンスの ID です。
vagr
は Verified Access グループの ID です。
vae
は Verified Access エンドポイントの ID です。
最後の IP アドレスは、Verified Access エンドポイントドメインを名前解決したときに応答される IPv4 アドレスと一致しています(例示のアドレスに置換しています)。アクセスログは名前解決の結果、利用された IP アドレスが付与されたログストリームに配信されるようです。後述するログの例も異なるログストリームに配信されていました。
% dig endpoint.edge-03fa3ffffc1e392f6.vai-07cb90ee3d0a8dbd2.prod.verified-access.us-east-1.amazonaws.com. +short 192.0.2.1 192.0.2.2
S3 のフォルダ構成
ログが保管される S3 のフォルダ構成は下記の通りでした。
test-verified-access-log-20230501 AWSLogs 111122223333 verifiedaccess us-east-1 2023 05 01 14
アクセス成功のログ
テスト用に作成したdeveloper
ユーザーのアクセスログです。
アクセスに成功しており、status
がSuccess
となっています。
ポリシーの評価結果やユーザー情報はidentity
に記録されています。
クライントの送信元 IP アドレスもsrc_endpoint
から確認できます(例示のアドレスに置換しています)。
{ "activity": "Access Granted", "activity_id": "1", "category_name": "Application Activity", "category_uid": "8", "class_name": "Access Logs", "class_uid": "208001", "device": { "ip": "203.0.113.1", "type": "Unknown", "type_id": 0 }, "duration": "0.116", "end_time": "1682926936397", "time": "1682926936397", "http_request": { "http_method": "GET", "url": { "hostname": "secured.access.example.net", "path": "/", "port": 443, "query_string": "", "scheme": "h2", "text": "https://secured.access.example.net:443/?" }, "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36", "version": "HTTP/2.0" }, "http_response": { "code": 200 }, "identity": { "authorizations": [ { "decision": "Allow", "policy": { "name": "inline" } } ], "idp": { "name": "idc", "uid": "vatp-0af5ceecc4a30e640" }, "user": { "email_addr": "example_host1@gmail.com", "name": "developer", "uid": "84781448-e071-707a-632f-721d1EXAMPLE" } }, "message": "", "metadata": { "uid": "Root=1-644f6d58-54e2d516541dcdfe5EXAMPLE", "logged_time": 1682927290640, "version": "", "product": { "name": "Verified Access", "version": "0.1", "vendor_name": "AWS" } }, "ref_time": "2023-05-01T07:42:16.397209Z", "proxy": { "ip": "192.0.2.1", "port": 443, "svc_name": "Verified Access", "uid": "vai-07cb90ee3d0a8dbd2" }, "severity": "Informational", "severity_id": "1", "src_endpoint": { "ip": "203.0.113.1", "port": 21549 }, "start_time": "1682926936281", "status_code": "100", "status_details": "Access Granted", "status_id": "1", "status": "Success", "type_uid": "20800101", "type_name": "AccessLogs: Access Granted", "unmapped": null }
アクセス失敗のログ(メールアドレス未検証)
テスト用に作成したdeveloper2
ユーザーのアクセスログです。
メールアドレスが未検証のためアクセスに失敗しており、status
はFailure
です。
ポリシー評価結果はauthorizations
のdecision
から確認でき、Deny
となっていることからポリシーの評価結果は拒否だったことが分かります。
{ "activity": "Access Denied", "activity_id": "2", "category_name": "Application Activity", "category_uid": "8", "class_name": "Access Logs", "class_uid": "208001", "device": { "ip": "203.0.113.1", "type": "Unknown", "type_id": 0 }, "duration": "0.1", "end_time": "1682927198369", "time": "1682927198369", "http_request": { "http_method": "GET", "url": { "hostname": "secured.access.example.net", "path": "/", "port": 443, "query_string": "", "scheme": "h2", "text": "https://secured.access.example.net:443/?" }, "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36", "version": "HTTP/2.0" }, "http_response": { "code": 403 }, "identity": { "authorizations": [ { "decision": "Deny", "policy": { "name": "inline" } } ], "idp": { "name": "idc", "uid": "vatp-0af5ceecc4a30e640" }, "user": { "email_addr": "example_host2@gmail.com", "name": "developer2", "uid": "34982458-7031-70d7-cf06-d5e4fEXAMPLE" } }, "message": "", "metadata": { "uid": "Root=1-644f6e5e-2741a852602815f51EXAMPLE", "logged_time": 1682927587254, "version": "", "product": { "name": "Verified Access", "version": "0.1", "vendor_name": "AWS" } }, "ref_time": "2023-05-01T07:46:38.369619Z", "proxy": { "ip": "192.0.2.2", "port": 443, "svc_name": "Verified Access", "uid": "vai-07cb90ee3d0a8dbd2" }, "severity": "Informational", "severity_id": "1", "src_endpoint": { "ip": "203.0.113.1", "port": 25647 }, "start_time": "1682927198269", "status_code": "300", "status_details": "Authorization Denied", "status_id": "2", "status": "Failure", "type_uid": "20800102", "type_name": "AccessLogs: Access Denied", "unmapped": null }
参考までにポリシーで Deny された場合のアクセス結果画面です。
以上で、AWS Verified Access のアクセスログの確認は終了です。
さいごに
AWS Verified Access インスタンスのアクセスログ記録機能を試してみました。インスタンス作成直後は無効化状態のため、忘れずに有効化したいと思いました。
このブログがどなたかのご参考になれば幸いです。