[アップデート] AWS Verified Access のログに信頼プロバイダーから受信したすべてのユーザーコンテキストを記録出来るようになりました

2023.06.20

いわさです。

AWS Verified Access ではポリシーを設定することで信頼された IdP やデバイス側の情報を使って、アプリケーションへの認可制御を行うことが出来ます。
これまでは IdP などからどういったコンテキスト情報が送信されるのか、開発者は把握することが困難でした。

以下のログ出力設定を有効化することで受信したコンテキスト情報を若干確認することは出来たのですが、最低限の情報であり IdP に応じて柔軟にポリシーを設定するには情報が不足していました。

しかし、本日のアップデートでこのログ機能が拡張され、より多くのユーザーコンテキスト情報を記録することが出来るようになりました。

これによって、ブラックボックスだったプロバイダーごとのコンテキスト情報を確認しながらポリシー設計出来るようになる可能性があります。
本日は Azure AD を信頼プロバイダーに設定した Verified Access インスタンスを使って機能の有効化前後のログ内容を比較してみましたので、その内容をご紹介します。

機能の有効化方法

設定は簡単で、Verified Access インスタンスのログ記録設定から「信頼コンテキストを含める」を有効化するだけです。

一点注意点があり、本機能を使う場合のログバージョンを 1.0.0-rc.2 に使用する必要があります。

本日時点で Verified Access ログは Open Cyber​​security Schema Framework (OCSF) バージョン 0.1 をデフォルトで使用します。
ログバージョンを更新することで OCSF バージョン 1.0.0-rc.2 と互換性のあるログ出力形式となります。

本機能は 1.0.0-rc.2 の data プロパティにコンテキストが出力されるようになるというものです。
ログバージョンのエントリ内容の差分は以下をご確認ください。

ログの比較

有効化前

以下が有効化前のログ情報です。

{
    "activity_id": "1",
    "activity_name": "Access Grant",
    "actor": {
        "authorizations": [
            {
                "decision": "Allow",
                "policy": {
                    "name": "inline"
                }
            }
        ],
        "idp": {
            "name": "hoge0620verifiedpolicy",
            "uid": "vatp-0ea41a9f54933b9a6"
        },
        "user": {
            "email_addr": "user1@aad.tak1wa.com",
            "name": "user1iwasa",
            "uuid": "TaVpWO_NCrLslzNdBhH2jqyGmH-OXUOohiBtZjOQPT4"
        }
    },
    "category_name": "Audit Activity",
    "category_uid": "3",
    "class_name": "Access Activity",
    "class_uid": "3006",
    "data": null,
    "device": {
        "ip": "203.0.113.1",
        "type": "Unknown",
        "type_id": 0
    },
    "duration": "0.008",
    "end_time": "1687209845360",
    "time": "1687209845360",
    "http_request": {
        "http_method": "GET",
        "url": {
            "hostname": "hoge0620.tak1wa.com",
            "path": "/",
            "port": 443,
            "scheme": "h2",
            "text": "https://hoge0620.tak1wa.com:443/"
        },
        "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36",
        "version": "HTTP/2.0"
    },
    "http_response": {
        "code": 200
    },
    "message": "",
    "metadata": {
        "uid": "Root=1-6490c775-33bb144f6210a1433b71a28c",
        "logged_time": 1687210100675,
        "version": "1.0.0-rc.2",
        "product": {
            "name": "Verified Access",
            "vendor_name": "AWS"
        }
    },
    "ref_time": "2023-06-19T21:24:05.360335Z",
    "proxy": {
        "ip": "203.0.113.1",
        "port": 443,
        "svc_name": "Verified Access",
        "uid": "vai-0ab9244cf952e8cf0"
    },
    "severity": "Informational",
    "severity_id": "1",
    "src_endpoint": {
        "ip": "203.0.113.1",
        "port": 60346
    },
    "start_time": "1687209845352",
    "status_code": "100",
    "status_detail": "Access Granted",
    "status_id": "1",
    "status": "Success",
    "type_uid": "300601",
    "type_name": "Access Activity: Access Grant",
    "unmapped": null
}

actor.user あたりの情報から、メールアドレスと名前については使用出来そうなことまでは把握出来ますね。

有効化後

有効化すると次のハイライト部分が出力されるようになります。

{
    "activity_id": "1",
    "activity_name": "Access Grant",
    "actor": {
        "authorizations": [
            {
                "decision": "Allow",
                "policy": {
                    "name": "inline"
                }
            }
        ],
        "idp": {
            "name": "hoge0620verifiedpolicy",
            "uid": "vatp-0ea41a9f54933b9a6"
        },
        "user": {
            "email_addr": "user1@aad.tak1wa.com",
            "name": "user1iwasa",
            "uuid": "TaVpWO_NCrLslzNdBhH2jqyGmH-OXUOohiBtZjOQPT4"
        }
    },
    "category_name": "Audit Activity",
    "category_uid": "3",
    "class_name": "Access Activity",
    "class_uid": "3006",
    "data": {
        "context": {
            "http_request": {
                "hostname": "hoge0620.tak1wa.com",
                "http_method": "GET",
                "x_forwarded_for": "203.0.113.1",
                "port": 80,
                "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36",
                "client_ip": "203.0.113.1"
            },
            "hoge0620verifiedpolicy": {
                "sub": "TaVpWO_NCrLslzNdBhH2jqyGmH-OXUOohiBtZjOQPT4",
                "name": "user1iwasa",
                "family_name": "ほげ",
                "given_name": "いわさ",
                "picture": "https://graph.microsoft.com/v1.0/me/photo/$value",
                "email": "user1@aad.tak1wa.com",
                "exp": 1687210685,
                "iss": "https://login.microsoftonline.com/11111111-2222-3333-4444-555555555555/v2.0"
            }
        }
    },
    "device": {
        "ip": "203.0.113.1",
        "type": "Unknown",
        "type_id": 0
    },
    "duration": "0.016",
    "end_time": "1687210565988",
    "time": "1687210565988",
    "http_request": {
        "http_method": "GET",
        "url": {
            "hostname": "hoge0620.tak1wa.com",
            "path": "/",
            "port": 443,
            "scheme": "h2",
            "text": "https://hoge0620.tak1wa.com:443/"
        },
        "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36",
        "version": "HTTP/2.0"
    },
    "http_response": {
        "code": 304
    },
    "message": "",
    "metadata": {
        "uid": "Root=1-6490ca45-3dd811d75059d1d15664325d",
        "logged_time": 1687210819669,
        "version": "1.0.0-rc.2",
        "product": {
            "name": "Verified Access",
            "vendor_name": "AWS"
        }
    },
    "ref_time": "2023-06-19T21:36:05.988606Z",
    "proxy": {
        "ip": "203.0.113.1",
        "port": 443,
        "svc_name": "Verified Access",
        "uid": "vai-0ab9244cf952e8cf0"
    },
    "severity": "Informational",
    "severity_id": "1",
    "src_endpoint": {
        "ip": "203.0.113.1",
        "port": 27573
    },
    "start_time": "1687210565972",
    "status_code": "100",
    "status_detail": "Access Granted",
    "status_id": "1",
    "status": "Success",
    "type_uid": "300601",
    "type_name": "Access Activity: Access Grant",
    "unmapped": null
}

今回コンテキストをログ出力することが出来るようになり、Azure AD 側からfamily_namegiven_nameなども引き渡されていることがわかるようになりました。
data配下を使ってそのままポリシーを構築することが出来るので、ポリシー周りのトラブルシューティング時に非常に役立ちそうです。

さいごに

本日は AWS Verified Access のログに信頼プロバイダーから受信したすべてのユーザーコンテキストを記録出来るようになったので有効化して出力内容を確認してみました。

これはかなり良いですね。
以前 Azure AD を使ったときに複雑なポリシーを構成してみたいと思ったのですが、送信されるコンテキスト情報がブラックボックスすぎて挫折しました。
今回の機能を活用して再度挑戦してみようと思います。