【新機能】WorkSpacesのログインイベントのトラッキングが可能になりました

2018.09.18

大栗です。

WorkSpacesでログインイベントのトラッキングが可能になりました。早速試してみます。

Amazon WorkSpaces now lets you track login events using Amazon CloudWatch Events

WorkSpacesのログインイベント

WorkSpacesでは今までCloudTrailを経由したCloudWatch Eventsでイベント通知が可能でした。しかし、CloudTrailの情報はWorkSpacesのAWS APIの呼び出し情報であるため、WorkSpacesを使用しているエンドユーザの利用状態については取得することができませんでした。

今回ログインイベントがCloudWatch Eventsでサポートされたので、各エンドユーザのログイン状況が分かるようになりました。ただし今回サポートされたイベントはログイン成功のみでパスワード誤りなどのログイン失敗は未サポートです。

イベント内容は以下の形式になります。detailの中では、アクセス元IPアドレスやWorkSpace IDなども取得できます。ユーザーIDが無い事にご注意ください。

{
  "version": "0",
  "id": "999cccaa-eaaa-0000-1111-123456789012",
  "detail-type": "WorkSpaces Access",
  "source": "aws.workspaces",
  "account": "123456789012",
  "time": "2018-08-30T00:45:28Z",
  "region": "us-east-1",
  "resources": [],
  "detail": {
    "clientIpAddress": "0.0.0.0",
    "actionType": "successfulLogin",
    "workspacesClientProductName": "WorkSpaces Desktop client",
    "loginTime": "2018-08-30T00:45:22.377Z",
    "clientPlatform": "Windows",
    "directoryId": "domain/d-000000000",
    "workspaceId": "ws-000000000"
  }
}

やってみる

以下のようにWorkSpacesのログインイベントからLambdaを起動してメールで送信してみます。

WorkSpacesの作成

まずはWorkSpacesを起動します。以下のエントリのようにWorkSpacesを作成します。

Amazon WorkSpacesのWeb AccessにWindows10が対応!だけじゃなくて日本語も対応!

SNSトピックの作成

WorkSpacesの起動を待っている間に他のものを準備します。SNSでメール通知を行うトピックを作成します。

SNSダッシュボードでトピックの作成をクリックします。

トピック名を入力してトピックの作成をクリックします。

サブスクリプションの作成をクリックします。

プロトコルをEmailにして、エンドポイントにメールアドレスを記述して、サブスクリプションの作成をクリックします。

確認のメールが届くのでConfirm subscriprionをクリックします。

メールの送信先の確認が取れました。

トピックのサブスクリプションも正常になります。

Lambdaファンクションの作成

次にLambdaを作成します。

以下の環境でLambdaを作成します。

  • ランタイム: Python 3.6
  • ハンドラ: lambda_function.lambda_handler

ファンクションのコードは以下になります。TopicArnには作成したSNSトピックのARNを記述します。

import json
import boto3
import pprint

print('Loading function')
sns = boto3.client('sns')

def lambda_handler(event, context):
    print("Received event: " + json.dumps(event, indent=2))
    request = {
        'TopicArn': 'arn:aws:sns:ap-northeast-1:123456789012:test-mail',
        'Message': json.dumps(event, indent=2),
        'Subject': 'WorkSpaces Access Notification Mail'
    }
     
    response = sns.publish(**request)
    pprint.pprint(response)
    
    return event['id']

Lambdaを実行するIAM RoleにはSNS:Publish権限を入れます。

CloudWatch Eventsの設定

CloudWatch Eventsを設定してWorkSpacesのログインイベントからLambdaを起動できるようにします。

CloudWatch Eventsのコンソールでルールの作成をクリックします。

イベントソースのサービス名にWorkSpaces、イベント対応にWorkSpaces Accessを設定します。ターゲットでは作成したLambdaファンクションを指定します。

名前と説明を記述してルールの作成をクリックします。

動作させる

まずWorkSpaces Clientsでアクセスしてみます。

普通にログインできます。

LambdaのログとなるCloudWatch Logsを確認するとログインイベントの内容が表示されます。macOSのHigh SierraからアクセスしているのでしているのでclientPlatformでOSXで、workspacesClientProductNameがWorkspaces Desktop Clientとなっています。

メール通知も来ています。

次にWeb Accessでログインしてみます。

Webブラウザからアクセスできます。

Web Accessの場合もCloudWatch Logsを確認します。今度はclientPlatformがWebでworkspacesClientProductNameがWorkspaces Web Clientとなっています。

メールでも通知が来ています。

さいごに

今回はログインのメール通知のみを行いましたが、応用するとWorkSpace IDを元にログインユーザが分かるので1日の初回アクセス時刻を業務開始時刻として登録したり、アクセス元IPアドレスを見て不正な場所からのアクセスで無いか場所やレピュテーションを確認する事もできます。

WorkSpacesはリモートワークなどで利用されやすいサービスです。利用者の勤怠管理やセキュリティ向上などに利用できるアップデートですのでうまい使い方を考えていくと良いでしょう。