はじめに
Microsoft365の監査ログですが、保存期間は90日しかなく、S3への長期保存のために手動操作以外から取得できる方法を探していました。
PowerShellを使えばCLIで取得できるため、AWSからの自動取得の前段階として、Cloud9から取得する方法を備忘録として記事にします。
まとめ
- LinuxだとPowerShellに以下のモジュールのインストールが必要
- ExchangeOnlineManagement
- PSWSMan
- OSはUbuntu
- Amazon Linuxだと、上記モジュールがうまく入らない・・・?
- MS社公式のDockerイメージを使うと、とても楽
- Amazon Linux上でも動く
やったこと
Cloud9のEC2インスタンスに直接PowerShellを入れる方法と、PowerShellインストール済みのDockerイメージを使う方法の2つを記載します。
方法1:EC2に直接インストール
Cloud9作成
PlatformでUbuntuを選択する点に注意するだけで、性能は最低のもので問題ありませんでした。
PSインストール
以下のサイトを参考にしました。
まずはインストーラパッケージをダウンロードします。
$ wget https://github.com/PowerShell/PowerShell/releases/download/v7.0.11/powershell-lts_7.0.11-1.ubuntu.18.04_amd64.deb
次のコマンドを実行するとエラーになりますが、公式によると問題ないそうです。
dpkg -i
コマンドが依存関係が満たされずに失敗する場合は、その次のコマンドapt-get install -f
によって、これらの問題が解決され、PowerShell パッケージの構成が完了します。
# エラーになってもよい
$ sudo dpkg -i powershell-lts_7.0.11-1.ubuntu.18.04_amd64.deb
# これを動かせば問題ないとのこと
$ sudo apt-get install -f
# 試しに実行
$ sudo pwsh
PS> Get-TimeZone
PS> exit
EXO V2 モジュールのインストール
PSWSManのインストール
以下の公式にあるコマンドを実行しました、
$ sudo pwsh
PS> Install-Module -Name PSWSMan
# メッセージが出てくるので、念のためpwshを出て再度起動
PS> Install-WSMan
WARNING: WSMan libs have been installed, please restart your PowerShell session to enable it in PowerShell
PS> exit
$ sudo pwsh
ExchangeOnlineManagementのインストール
以下では、「PowerShellGetをインストールする」とありますが、Windowsのみ必要なようですので、今回はやっていません。
ExchangeOnlineManagementだけインストールします。
PS> Install-Module -Name ExchangeOnlineManagement
実行
認証の仕方は色々ありますが、Cloud9を表示しているブラウザでMS365の認証が出来る方法を取りました。
PS> Import-Module ExchangeOnlineManagement
PS> Connect-ExchangeOnline -Device
(略)
To sign in, use a web browser to open the page https://microsoft.com/devicelogin and enter the code XXXXXXXXXX to authenticate.
https://microsoft.com/devicelogin
にアクセスすると、以下の画面が出てきます。
コードを入力すると、アカウントを選択します。
許可するために「続行」をクリックします。
以下の画面が出てきたら、PowerShell側で準備が開始されます。色々ダウンロードするらしく、1分ほどかかりました。
終わったら、試しに監査ログを取得します。
PS> Search-UnifiedAuditLog -StartDate 6/1/2022 -EndDate 6/2/2022
認証方法も複数ありますので、用途に応じて使い分けることが可能です。
切断するときは以下で。-Confirm:$false
で確認なしで切断できます。
PS> Disconnect-ExchangeOnline -Confirm:$false
方法2:公式のDockerイメージを使用
Amazon Linux上でもDockerのコンテナで動かせば同じことが可能です。
公式でPowerShellインストール済みのUbuntuのイメージがありますのでそれを使います。
# 停止時に削除する方法で起動
$ docker run --rm -it mcr.microsoft.com/powershell:lts-7.2-ubuntu-20.04
# モジュールのインストール
PS /> Install-Module -Name ExchangeOnlineManagement
PS /> Install-Module -Name PSWSMan
# 再起動を促すメッセージが表示されたけど、大丈夫の模様
PS /> Install-WSMan
後は方法1の実行と同様に認証します。
PS /> Connect-ExchangeOnline -Device
PS /> Search-UnifiedAuditLog -StartDate 6/1/2022 -EndDate 6/2/2022
片づけるのも、ダウンロードしたイメージを削除するだけなので簡単でした。
PS /> exit
# 対象のイメージIDを確認
$ docker images | grep powershell
# 削除
$ docker rmi <対象イメージのID>
おわりに
今回はMicrosoft365の監査ログをCloud9(EC2)から取得する方法を記載しました。
AWSから取得できれば、S3において長期保存したり、Athenaで検索しやすくしたりできるかと考えています。
自動で取得できるよう調べ続ける予定なので、また記事に出来ることがあったら起こそうと思います。