AWS Verified Accessのアクセスログ記録設定を試してみた

2023.05.02

この記事は公開されてから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ユーザーのアクセスログです。

アクセスに成功しており、statusSuccessとなっています。

ポリシーの評価結果やユーザー情報は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ユーザーのアクセスログです。

メールアドレスが未検証のためアクセスに失敗しており、statusFailureです。

ポリシー評価結果はauthorizationsdecisionから確認でき、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 インスタンスのアクセスログ記録機能を試してみました。インスタンス作成直後は無効化状態のため、忘れずに有効化したいと思いました。

このブログがどなたかのご参考になれば幸いです。