WorkSpaces のログインとログアウトが発生した際に通知を受け取る方法

WorkSpaces の UserConnected メトリクスを使って WorkSpace のログインとログアウトを検知する方法をご紹介します。
2021.09.28

困っていた内容

WorkSpaces のログインとログアウトを監視したいのですが、それを検知して通知させる方法がありましたら教えてください。

どう対応すればいいの?

WorkSpaces のログインイベントについては、「WorkSpaces Access イベント」を利用して検知ができる機能が既にあります。しかしながら、この機能はログアウトについてはサポートをしておりません。 また、イベントは、ベストエフォートベースでの出力となります。

そのため、今回は WorkSpaces の「UserConnected」メトリクスを使って WorkSpaces のログイン/ログアウトを検知してみようと思います。

今回の構築図

試してみる

早速始めていきたいのですが、はじめに注意事項に目を通していただけますと幸いです。

<注意事項>

  • UserConnected メトリクスは取得間隔が5分であり、状況次第で多少のラグが発生することがあります。
  • ラグが許容できない場合は、WorkSpaces Access イベントを使用したログイン検知機能をご利用ください。
  • WorkSpaces クライアントからのログイン/ログアウトを行います。
  • AutoStop の WorkSpace を使用します。
  • まずはドキュメントを参考にディレクトリを立ち上げて、WorkSpace「ws-cllpytrzw」を起動させました。

     WorkSpace立ち上げた


    ログインを検知する仕組みを作る

    CloudWatch アラームの作成

    CloudWatch コンソールに移動し、ナビゲーションより「すべてのアラーム」を選択し、「アラームの作成」をクリックします。

    CloudWatchアラーム作成ページ

    次に「メトリクスの選択」をクリックします。

    メトリクスの選択

    検索バーに「WorkSpaces」と入力すると、「WorkSpaces > ワークスペース ID 別」という候補が出てきますので、これを選択します。

    WorkSpacesメトリクス

    UserConnected」メトリクスを見つけ出して、チェックボックスにチェックを入れて、「メトリクスの選択」をクリックします。

    UserConnectedメトリクス

    メトリクスの項目はいじらずに、条件の項目でしきい値の種類を「静的」とし、アラーム条件を「より大きい」、しきい値を「0」として設定します。

    メトリクスと条件の指定

    次のアクションの設定では、後に作成する CloudWatch イベントのルールで指定を行うので、通知の項目の「削除」を選択して何も設定を行わずに「次へ」をクリックします。

    通知を削除

    次はアラーム名の選択です。アラーム名は「WorkSpace-Login」としました。入力を終えましたら「次へ」をクリックします。

    WorkSpace-Loginと名付ける

    最後にプレビューを確認し、問題がなさそうであれば「アラームの作成」を選択します。
    これで CloudWatch アラームの作成は完了です。


    CloudWatch Events ルールの作成

    次に CloudWatch Events のルールを作成していきます。「ルールの作成」をクリックします。

    CloudWatchルールの作成開始

    イベントソースでは「イベントパターン」を選択し、ドロップダウンリストから「カスタムイベントパターン」を選択します。

    カスタムイベントパターンログイン

    • カスタムイベントパターン
    {
      "source": [
        "aws.cloudwatch"
      ],
      "detail-type": [
        "CloudWatch Alarm State Change"
      ],
      "resources": [
        "arn:aws:cloudwatch:リージョン:AWSアカウントID:alarm:WorkSpace-Login"
      ],
      "detail": {
        "state": {
          "value": [
            "ALARM"
          ]
        }
      }
    }


    ターゲットではドロップダウンリストから「SNS トピック」を選択し、送信先トピック名を選択します。
    そして、入力の設定をクリックし、「インプットトランスフォーマー」を選択します。

    • 入力パス
      {"Account":"$.account","MetricsWorkspaceId":"$.detail.configuration.metrics[0].metricStat.metric.dimensions.WorkspaceId","AlarmName":"$.detail.alarmName","Time":"$.time","Reason":"$.detail.state.reason"}

    • 入力テンプレート

      "WorkSpaceのログインを検知しました"
      "AWS Account ID : <Account> "
      "発生時間(GMT) : <Time>"
      "アラーム名  :  <AlarmName>"
      "対象 WorkSpace :  <MetricsWorkspaceId>"
      "理由 : <Reason>"


    最後にこのルールの名前を「WorkSpace-Login-Event」として、「ルールの作成」をクリックします。 これで WorkSpace のログインを検知する仕組みが出来上がりました。

     ログインルールの名前をつける


    WorkSpaces クライアントからログインしてみる

    さっそく WorkSpaces クライアントから対象の WorkSpace へログインを行います。

    WorkSpaceクライアントからログイン

    CloudWatch より、WorkSpace へのログインから間もなく UserConnected の値が 1 となってアラーム「WorkSpace-Login」のしきい値(0を超過)を超過していることがわかります。

    WorkSpace-LoginとUserConnectedメトリクス

    SNS トピックに設定している Gmail の Email アドレス宛にログイン検知のメールが届きました!

    ログイン通知が届きました


    ログアウトを検知する仕組みを作る

    CloudWatch アラームの作成

    ログアウトを検知する仕組みは、ログインを検知する仕組みの設定を少し変えれば出来てしまいます。
    最初の手順はログアウトを検知する場合も同じです。

    • CloudWatch コンソールより「すべてのアラーム」を選択し、「アラームの作成」をクリック。
    • 次に「メトリクスの選択」をクリック。
    • 検索バーに「WorkSpaces」と入力し、「WorkSpaces > ワークスペース ID 別」という候補を選択。
    • 「UserConnected」メトリクスにチェックを入れて、「メトリクスの選択」をクリック。

    メトリクスの項目はいじらずに、条件の項目でしきい値の種類を「静的」とし、アラーム条件を「以下」、しきい値を「0」として設定します。

    メトリクスと条件の指定②

    次のアクションの設定では、通知の項目の「削除」を選択して何も設定を行わずに「次へ」をクリックします。

    アラーム名の選択で、アラーム名を「WorkSpace-Logout」としました。入力を終えましたら「次へ」をクリックします。

    アラーム名をつける②

    プレビューを確認し、問題がなさそうであれば「アラームの作成」を選択し、CloudWatch アラームの作成を完了させます。


    CloudWatch Events ルールの作成

    こちらも同様にログインを検知する仕組みで作った CloudWatch Events ルールの設定を少し変えていきます。

    • CloudWatch Events のルールを作成します。「ルールの作成」をクリックします。
    • イベントソースで「イベントパターン」を選択し、ドロップダウンリストから「カスタムイベントパターン」を選択します。

    • カスタムイベントパターン

    {
      "source": [
        "aws.cloudwatch"
      ],
      "detail-type": [
        "CloudWatch Alarm State Change"
      ],
      "resources": [
        "arn:aws:cloudwatch:リージョン:AWSアカウントID:alarm:WorkSpace-Logout"
      ],
      "detail": {
        "state": {
          "value": [
            "ALARM"
          ]
        }
      }
    }


    ターゲットではドロップダウンリストから「SNS トピック」を選択し、送信先トピック名を選択します。
    そして、入力の設定をクリックし、「インプットトランスフォーマー」を選択します。

    • 入力パス
      {"Account":"$.account","MetricsWorkspaceId":"$.detail.configuration.metrics[0].metricStat.metric.dimensions.WorkspaceId","AlarmName":"$.detail.alarmName","Time":"$.time","Reason":"$.detail.state.reason"}

    • 入力テンプレート

      "WorkSpaceのログアウトを検知しました"
      "AWS Account ID : <Account> "
      "発生時間(GMT) : <Time>"
      "アラーム名  :  <AlarmName>"
      "対象 WorkSpace :  <MetricsWorkspaceId>"
      "理由 : <Reason>"


    最後にこのルールの名前を「WorkSpace-Logout-Event」として、「ルールの作成」をクリックします。 これで WorkSpace のログアウトを検知する仕組みも出来上がりました。

    ログアウトルールの名前


    WorkSpaces クライアントでログアウトしてみる

    WorkSpace からログアウトを行います。

    WorkSpaceからログアウトする

    CloudWatch より、WorkSpace からのログアウトから間もなく UserConnected の値が 0 となってアラーム「WorkSpace-Login」のしきい値(0以下)を超過していることがわかります。

    WorkSpace-LogoutとUserConnectedメトリクス

    SNS トピックに設定している Email アドレス宛にログアウト検知のメールが届きました!

    ログアウト通知が届きました

    参照