この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
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 インスタンスのアクセスログ記録機能を試してみました。インスタンス作成直後は無効化状態のため、忘れずに有効化したいと思いました。
このブログがどなたかのご参考になれば幸いです。