Amazon Web Services ブログ
Amazon WorkSpaces のアクセスパターンの分析
このブログは 2020 年 9 月 14 日に Spencer DeBrosse によって投稿された Analyze access patterns in Amazon WorkSpaces をソリューションアーキテクトの平田が翻訳したものです。
お客様から定期的に Amazon WorkSpaces のアクセスパターンを分析する方法について質問されます。管理者は、ユーザーが Amazon WorkSpaces にどのようにアクセスしているかを理解することで、優れた総合的なエクスペリエンスを提供できるようにしようとしています。例えば、アクセスパターンに関する詳細な情報は、メンテナンスウィンドウの計画、ネットワークキャパシティ要件の予測、WorkSpaces クライアントアップデートの優先順位の設定に役立ちます。
AWS リージョン全体で WorkSpaces イベントを集中的に収集することで、ユーザーのアクセスパターンを把握することができます。これらのイベントを分析することで、次のような質問に答えることができます。
- ユーザーはどのように WorkSpaces に接続していますか?
- お客様はどのクライアントプラットフォームを使用していますか?
- お客様は社内ネットワークから WorkSpaces にアクセスしていますか、それともリモートからアクセスしていますか?
- 多くのユーザーは1日のうち毎日何時ごろに接続していますか?
また、このデータを監査目的で使用し、リモートワーカーがどのような頻度で、どのような時間帯に WorkSpaces にログインしているかを検証することができます。
このブログ記事では、Amazon CloudWatch、Amazon Kinesis、Amazon Athena、Amazon QuickSight を使用して、WorkSpaces ユーザーのアクセスパターンを分析し、可視化する方法を紹介します。
次の図は、このブログでデプロイするソリューションでの WorkSpaces ログインイベントの取り込みを示しています。
この図では、複数の AWS リージョンからのログインイベントの収集を示しています。なお、これはオプションの構成で、このソリューションは、単一の AWS リージョンでデプロイすることができます。
ログインイベントの収集手順は以下の通りです。
- WorkSpaces へのログオンが成功すると、CloudWatch イベントが生成されます (CloudWatch Events を使用した WorkSpaces のモニタリング を確認してください)。
- CloudWatch ルールは、サブスクライバーとして AWS Lambda 関数を持つ Amazon SNS トピックにメッセージをパブリッシュします。すべてのSNSトピックは、同じ Lambda 関数をサブスクライバーとして持ちます。
- Lambda 関数は、CloudWatch ベントデータを変換することができます。Lambda 関数は、このデータを Kinesis Data Firehose ストリームにパブリッシュします。
- Kinesis Data Firehose は、データを Amazon S3 バケットにバッチで書き込みます (60 秒後または 5MB のデータが収集された後の、いずれか早い方)。
クエリは、Amazon Athena と AWS Glue Data Catalog により処理されます。データは Amazon QuickSight ダッシュボードを通じて視覚化されます。
前提条件
- Amazon WorkSpaces が設定された AWS 環境。
- WorkSpaces のアクセスデータを収集するため、ソリューションの検証のために、複数の WorkSpaces テストユーザーを作成します。
- IAM ロールとポリシーを作成する権限を持つ AWS アカウント。
- S3バケット。このバケットには、Athena からのクエリ結果が格納されます。
チュートリアル
先ほどの図にあるログインイベント収集コンポーネントを作成する 2つの AWS CloudFormation テンプレートを用意しました。まず、プライマリスタックをデプロイします。
- WorkSpaces のアクセス分析用 AWS CloudFormation テンプレート をダウンロードします。
- 選択したリージョンで、AWS CloudFormation コンソールにアクセスします。
- スタックの作成 を選択し、新しいリソースを使用 (標準) を選択します。
- スタックの作成 ページで テンプレートファイルのアップロード を選択し、ステップ 1 でダウンロードしたテンプレートファイルを選択します。次へ を選択します。
- S3 バケットに一意の名前を指定します。このバケットは WorkSpaces のアクセスイベントデータを格納するために使用されます。次へ を選択します。
- スタックオプションの設定 ページで 次へ を選択します。
- AWS CloudFormation によって IAM リソースが作成される場合があることを承認します。チェックボックスを選択します。
- スタックの作成 を選択します。スタックは約 4 分でデプロイされ、次のリソースが作成されます。
- CloudWatch ルール。この CloudWatch ルールは、プライマリ AWS リージョンの Workspaces ログインイベントをキャプチャします。ログインするたびに successfulLogin イベントが生成されます。
- successfulLogin の CloudWatch イベントを受信する SNS トピック。
- successfulLogin イベントを変換する Lambda 関数
- Kinesis Data Firehose データストリーム
- アクセスイベントデータを保存する S3 バケット
- 前述のリソースに必要な IAM ロールとポリシー
- スタックのステータスが CREATE_COMPLETE であることを確認します。
- 現在の AWS リージョン内の任意の WorkSpaces にログインし successfulLogin CloudWatch イベントを発生させます。
- 異なる場所やデバイスから WorkSpaces に接続すると、より豊富なデータが生成されます。
(オプション) 2つ目の AWS CloudFormation テンプレートを導入することで、他の AWS リージョンでの WorkSpaces ログインイベントもキャプチャできます。セカンダリーリージョン用の WorkSpaces アクセス解析 AWS CloudFormation テンプレート をダウンロードします。このテンプレートでは、プライマリスタックでデプロイした Lambda 関数の ARN を提供する必要があります:ARN はプライマリスタックの 出力 タブで利用可能です。
WorkSpaces にログインしてから約 60 秒後に、S3 バケットに workspacesAccessLogs/<YEAR>/<MONTH>/<DAY/<HOUR> というプレフィックスでデータが書き込まれているのが確認できます。
注: S3 バケットに到達する前に、イベント内のデータを変換できます。プライマリスタックによってデプロイされた Python Lambda 関数にコードを追加します。以下に例を示します。
- loginTime フィールドを別の時間形式に変換する。
- WorkSpace ID とユーザー名のマッピングがある DynamoDB テーブルにクエリを実行して、イベントにユーザー名フィールドを追加する。
WorkSpaces のログインイベントのデータを収集していることが確認できたので、Amazon Athena を使用してこれらのイベントにクエリを実行します。
アクセスデータの分析と可視化
Athenaでは、収集するログインイベントデータに対して、クエリを作成し、実行します。
- Athena コンソールを開きます。Athena コンソールに初めてアクセスする場合は、クエリエディタを詳しく確認する を選択して、クエリエディタ を開きます。
- クエリエディタ画面で 設定 タブを選択し、クエリの結果と暗号化の設定で 管理 を選択します。
- 設定を管理画面にて、クエリ結果の場所に、クエリ結果用に Amazon S3 に作成したバケットのパスを入力します (前提条件に記載)。パスのプレフィックスは s3:// とします。また、パスの末尾にスラッシュ (/) を追加します。保存 を選択します。
- Athena クエリエディタで、以下のクエリを入力し、10個のログインイベントのサンプルを確認します。
SELECT DISTINCT id,detail.loginTime,
detail.clientPlatform,
detail.workspaceId,
detail.directoryId,
detail.clientIpAddress,
region
FROM "workspaces_access_dashboard_db"."workspaces-access-events"
limit 10;
- クエリエディタで + (プラス記号) を選択して、新しいクエリ用のタブを作成します。
- 新しいタブで、別のクエリを入力して、異なるクライアントプラットフォームからのログインイベントの数を数えます (Windows、macOS、Linux などの生成されたログインイベントの数)。
SELECT detail.clientPlatform,
count(*) cnt
FROM "workspaces_access_dashboard_db"."workspaces-access-events"
GROUP BY detail.clientPlatform
ORDER BY cnt desc;
Amazon QuickSight ダッシュボードの構築
続行する前に、Amazon QuickSight が WorkSpaces のログインデータを含む S3 バケットにアクセスできることを確認します(Amazon QuickSight 内で、プロファイル名 (右上) を選択、QuickSight の管理、セキュリティとアクセス権限 の順に選択し、QuickSight の AWS のサービスへのアクセスを設定できます)。
- はじめに、Amazon QuickSight を起動します。
- 正しい AWS リージョンにいることを確認します。違う場合は、右上のドロップダウンメニューから選択することで、正しいリージョンに切り替えることができます。
- データセット を選択します。
- 右上の 新しいデータセット を選択します。
- 新しい Athena データソースを作成し、名前を指定します。
- workspaces_access_dashboard_db データベースと workspaces-access-events テーブルを選択します。
- カスタムSQL を使用 を選択します。
- 次の SQL クエリを入力します。
SELECT DISTINCT
id,
account,
region,
detail.loginTime,
detail.clientPlatform,
detail.workspaceId,
detail.directoryId,
detail.clientIpAddress
FROM"workspaces_access_dashboard_db"."workspaces-access-events"
limit 10;
- 迅速な分析のために SPICE へインポート を選択します。
- Visualize を選択します。
- 最初のビジュアライゼーションを作成するには、左パネルのフィールドリストで clientplatform を選択します。次に、ビジュアルタイプの 円グラフ を選択します。これは、さまざまな種類のクライアント・プラットフォームから接続するユーザーの割合を示しています。ディレクトリ ID について同様の視覚化を作成して (directoryid フィールドを使用)、WorkSpaces に登録した各ディレクトリからの接続の割合を表示できます。
- (オプション) 複数の AWS Regions にまたがるイベントを収集している場合。左上の +追加 ボタン、ビジュアルを追加を選択して、新しいビジュアライゼーションを追加します。次に、左パネルの フィールドリスト で region を選択します。ビジュアルタイプ で 水平棒グラフ を選択します。これは、WorkSpaces をデプロイしている各 AWS リージョンからの接続数を示しています。
- 再度 +追加 ボタンを選択し、最後のビジュアライゼーションを追加します。
- 左パネルの フィールドリスト で loginTime を選択し、ビジュアルタイプ で 積み上げ面折線グラフ を選択します。上部の フィールドウェル で loginTime を選択し、時間単位で集計します。この可視化では、1 日の各時間の successfulLoginイベントの数が表示されます。
クリーンアップ
このブログで作成したリソースを削除するため、以下の手順を実施します。
- WorkSpaces のログインデータが入った S3 バケットの中身を空にします。
- デプロイした CloudFormation スタックを削除します (プライマリーリージョンとその他のリージョン)。
- Amazon QuickSight で、Athena データセットを削除し、作成した分析を削除します。
まとめ
Amazon WorkSpaces のアクセスパターンを分析するには、リージョン全体で WorkSpaces イベントを一元的に収集することで、ユーザーのアクセスパターンを把握することができます。例えば、ユーザーが主に社内ネットワークまたは外部から接続している場合や、1 日の異なる時間にログインアクティビティレベルで接続している場合の、最も人気のあるクライアントプラットフォームを検出できます。
Amazon WorkSpaces は successfulLogin CloudWatch イベントを生成します (CloudWatch Events を使用した WorkSpaces のモニタリング を確認してください)。Lambda 関数を使用して外部データソースを呼び出すことで、これらのイベントにメタデータを追加することができます。例えば、DynamoDB テーブルにクエリを実行して WorkSpace ID をユーザー名にマッピングできます。
これらのイベントを Amazon S3 に一元的に収集した後、Athena とAmazon QuickSight を使用してサーバーレスでWorkSpaces のログインデータクエリと視覚化を行うことができます。