【Alibaba Cloud】ActionTrailを触ってみる

アリババクラウドのパートナーのAPコミュニケーションズ様より、アリババクラウドについて第五弾のレポートをいただきましたので共有させていただきます。本編はこちらのサイトでご覧ください。

[techblogAPCについて（はじめにお読み下さい）](https://techblog.ap-com.co.jp/entry/2020/07/02/171931?utm_source=feed)

#はじめに
こんにちは、IaC技術推進部の山路です。前回の[Operation Orchestration Serviceの紹介記事](https://techblog.ap-com.co.jp/entry/2020/06/24/142215)の中で、 Alibaba Cloudを利用する時は複数のリージョンを利用することが多くなるだろう、と書かせていただきました。複数のリージョンを利用すれば、管理する対象のリソースは別々のリージョンに配置されるため、管理をする側としては大変です。特に各ユーザーの操作履歴を記録しておくことは、監査やセキュリティの面からも重要になるだけでなく、誤操作によるリソース削除などの問題が発生したときの調査に利用することもできます。Alibaba Cloudは各種リソースの管理に関するサービスを提供しており、その中にはユーザーの操作履歴を管理するものも含まれています。今回は、Alibaba Cloudのリソースの操作履歴を追跡できるActionTrailについて、その概要と利用方法を紹介いたします。

#ActionTrailとは
[ActionTrail](https://www.alibabacloud.com/help/ja/doc-detail/28804.htm)はAlibaba Cloudの提供するサービスの一つであり、Alibaba Cloudのリソースに対する操作履歴を記録する機能を提供します。この機能により、Alibaba Cloudのリソースに対する操作履歴を追跡することが可能になります。また各RAMユーザーの操作履歴を追跡できるので、コンプライアンス監査にも利用することが可能です。

ActionTrailの特徴としては、以下のような点が挙げられます。

- 簡単にサービスを利用開始できる：ActionTrailは「Trail」という単位でログの取得やログ出力先を指定するだけで利用可能となります。
- 監視対象範囲：ActionTrailは複数のリージョンにまたがるリソースをモニターすることができます。
- [OSS](https://www.alibabacloud.com/help/ja/product/31815.htm)や[Log Service](https://www.alibabacloud.com/help/ja/product/28958.htm)へのログ転送：ActionTrailは一定期間が経過すると操作ログが削除されてしまいますが、Alibaba Cloudの別サービスであるOSSやLog Serviceを利用することで、操作ログの長期保存やログ解析も可能になります。
- 無料で利用可能：ActionTrailを利用すること自体は無料で利用可能ですが、ログ出力先としてOSSやLog Serviceを利用する場合は、そちらを利用した分だけ課金が発生します。
一方でActionTrailにはいくつか利用制限があり、代表的なものとしては以下のようなものが挙げられます。

TrailとOSSとの紐づけ：1つのTrailは1つのOSSバケットのみ関連付けができます。
ログを確認できるまでの時間：ActionTrailでログを確認できるのは、イベント発生後10分経過してからになります。
取得するリソース種別に制限がある：ActionTrailはAlibaba Cloudのすべてのリソースに対応しているわけではなく、例えば[Cloud Storage Gateway](https://www.alibabacloud.com/help/ja/product/53923.htm)や[VPN Gateway](https://www.alibabacloud.com/help/ja/product/65234.htm)といったリソースは、本記事執筆時点では監視対象とすることはできません（対応しているリソース一覧は[こちら](https://www.alibabacloud.com/help/ja/doc-detail/28829.htm)から）。

#利用方法
ここからActionTrailの利用方法について紹介します。

#Trailの作成
まずはTrailの作成を行います。ActionTrailの画面に移動し、「Create Trail」を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/36484173-4eeb-1c3c-839e-ad37cfd6b04e.png)

以下がTrailの作成画面になります。

`Apply Trail to All Regions`では、リソース操作を追跡するリージョンを指定することができます。特定のリージョン内の操作を追跡したい場合は「No」を選択し、リージョンを指定することができます。

`Deliver Events`では、ActionTrailで追跡した結果をログとして別のリソースに出力するよう設定することができます。出力先として選択できるのはOSSかLog Serviceから選びますが、一度に両方のサービスを出力先として選択することも可能です。`SLS Logstore`はLog Serviceで利用するログの保存先を示します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/7b8a6279-dd59-d748-c178-7347f9fff0cd.png)

今回は全リージョンを対象に、すべてのイベントの操作ログを取得します。またOSSとLog Serviceを新規で作成し、両方に操作ログを転送するよう設定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/76a7d423-9d6f-9344-3506-e1d263adb84f.png)

Trailの作成が完了すると、ActionTrailは利用可能となります。`History Search`を見ると、以下のようにActionTrailやOSSの作成ログが確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/d8e1da45-8aab-c9d8-220e-b901d13c1245.png)

各ログの詳細についても確認することができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/7eac3a3e-b7df-5083-c938-6b3eb37d9f75.png)

#OSS / Log Serviceの利用
続いてOSSを確認してみます。指定したOSSは以下の通り作成が完了しており、すでにいくつかファイルも格納されています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/d6cac477-fc2b-a441-9568-0e8e451766de.png)

操作ログはダウンロードすることで内容を見ることができます。ファイルはgzファイルとして圧縮されており、解凍するとJSON形式のファイルを確認することができます。

なお、OSSバケット内のフォルダ構成は`AliyunLogs/ActionTrail/<リージョン>/<yy>/<mm>/<dd>/<ログ>`となります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/056df59c-3828-6007-511c-aa7f0734f5db.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/8e2b6099-9839-05a9-8685-47097ef2f4ec.png)

ファイルを整形して見やすくすると、以下のような出力（ファイルの一部のみ抽出）が確認できます。以下は`DescribeTrails`というAPIの情報を取得しており、各リージョンに設定されているTrailの情報を取得したものになります。

```
[
    {
        "acsRegion": "ap-northeast-1",
        "additionalEventData": {
            "Scheme": "http"
        },
        "apiVersion": "2017-12-04",
        "eventId": "4C684641-75FC-490E-9676-CEF0196DC850",
        "eventName": "DescribeTrails",
        "eventSource": "actiontrail-openapi-share.ap-northeast-1.aliyuncs.com",
        "eventTime": "2020-06-29T01:16:54Z",
        "eventType": "ApiCall",
        "eventVersion": "1",
        "requestId": "4C684641-75FC-490E-9676-CEF0196DC850",
        "requestParameters": {
            "AcsProduct": "Actiontrail",
            " charset": "UTF-8",
            "AcceptLanguage": "en-US",
            "Region": "ap-northeast-1",
            "RequestId": "4C684641-75FC-490E-9676-CEF0196DC850",
            "RegionId": "ap-northeast-1",
            "IncludeShadowTrails": true,
            "HostId": "actiontrail-openapi-share.ap-northeast-1.aliyuncs.com",
            "AcsHost": "actiontrail-openapi-share.ap-northeast-1.aliyuncs.com"
        },
        "serviceName": "Actiontrail",
        "sourceIpAddress": "<IPアドレスを表示>",
        "userAgent": "Apache-HttpClient/4.5.7 (Java/1.8.0_152)",
        "userIdentity": {
            "accountId": "<IDを表示>",
            "principalId": "<IDを表示>",
            "sessionContext": {
                "attributes": {
                    "creationDate": "2020-06-29T01:16:54Z",
                    "mfaAuthenticated": "false"
                }
            },
            "type": "ram-user",
            "userName": "yamaji"
        }
    },
```

※参考リンク：

[Alibab Cloud - ActionTrail 追跡関連API: DescribeTrails](https://jp.alibabacloud.com/help/doc-detail/28842.htm?spm=a21mg.p38356.b99.28.24decf50y5BcP1)
出力ログには、機密情報が含まれることも多いため、OSSの[Server-Side Encryption](https://www.alibabacloud.com/help/ja/doc-detail/31871.html)機能を利用し、ファイルアップロード時に暗号化することが推奨されます。暗号化には、AES-256のほか、事前にKey Management Service（KMS）にマスターキーを保存しておくことで、それを利用することも可能です。

また、OSSバケット内にログがたまり続けることを防ぐには、OSSの[Lifecycle](https://jp.alibabacloud.com/help/doc-detail/31863.htm?spm=a21mg.p38356.b99.60.71b056c3blskOt)という機能を使い、一定期間が経過したらアーカイブバケットに転送することも可能です。簡単な使い方は、以前私が書いた[こちらの記事](https://techblog.ap-com.co.jp/entry/2020/06/16/123020)をご覧ください。

次にLog Serviceを見てみます。ActionTrailのデータはLog Service内のLogstoreに保存されます。Log Serviceは収集したログの分析や表示の機能を担い、操作したリソース毎の操作内容を確認したり、リソースの分布状況などを確認することができます。

Log Serviceの画面に移動し、Trail作成時に指定したProject名を指定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/a862ff22-6fd4-89bb-e952-aa858dc0391c.png)

Projectを指定すると、以下のような画面へ移動します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/3445d3b4-c72e-d09a-77f2-ebda58838db7.png)

Projectの左横メニューからDashboardを指定すると、以下のように利用しているリージョンやリソースの情報などがグラフで表示されます。Dashboardの構成はカスタマイズ可能です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/5ef10c4c-969b-fab9-e7ac-d5c4a3dd602f.png)

Project配下の`Search & Analysis`を選択すると、操作ログの発生日時と各ログの詳細を確認することができます。また操作ログのグラフを表示することも可能で、各チャートやテーブルなどを表示することが可能です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/1c7f5e61-7ffc-c2d4-b8d4-bd6951089463.png)

Log Serviceは多くの機能を備えており、ここで全てを紹介することはできませんが、ActionTrailに関連した機能としては、例えば[CloudMonitor](https://jp.alibabacloud.com/help/doc-detail/57665.htm)と連携してアラート通知を飛ばすことも可能です。

#Single Account / Multi Accountについて
ActionTrailを利用する際、Single-Account TrailかMulti-Account Trailのどちらかを選択する必要があります。

Single-Account Trailは、一つのアカウントに紐づける形でActionTrailを利用し、追跡対象は紐づけた単一のアカウントが操作したものとなります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/b7a79ae4-b7c8-eaa9-bc59-4d8b7eab5be1.png)

※[公式ドキュメント](https://www.alibabacloud.com/help/ja/doc-detail/163264.htm)より

一方Multi-Account Trailは、エンタープライズ向けの機能で、[Resource Management](https://www.alibabacloud.com/help/ja/doc-detail/94475.htm)機能を利用し、Master AccountとMember Accountというものを用意します。Master AccountはActionTrailの管理アカウントとして設定や操作権限などを持ち、監視対象のアカウントはMember Accountとして[Resource Directory](https://www.alibabacloud.com/help/ja/doc-detail/111215.htm)に追加します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/31732d33-79ba-b11a-b0f5-af65f001d3f2.png)

※[公式ドキュメント](https://www.alibabacloud.com/help/ja/doc-detail/160614.htm)より

この時注意したいこととして、というより私が勘違いをしていたことなのですが、ここでのアカウントというのは**RAM**ユーザーのことではなく、**Alibaba Cloud**アカウント（プライマリアカウント）を指しているという点です。

ActionTrailのSingle-Account Trailを作成した場合、単一のAlibaba Cloudアカウントと、利用している全てのRAMユーザーに関する操作履歴が記録されます。なので、組織やプロジェクト内でアカウントは一つだけ利用し、RAMユーザーを複数利用している場合は、Single-Account Trailを利用すれば、メンバーの操作履歴は記録されます。

また、監視対象のRAMユーザーを指定することはできず、全てのRAMユーザーに関する操作履歴が記録されます。

なお、Single-Account Trailを複数利用し、一つのアカウントの下に複数のTrailを作成することもできます。そうすることで、異なるOSSに異なる操作ログを送信・保存することができ、それによって複数リージョンでのコンプライアンス監査や操作ログのバックアップに利用することが可能となります。

※参考ドキュメント：

- [Alibaba Cloud - ActionTrail: Single-account trail overview](https://www.alibabacloud.com/help/ja/doc-detail/163264.htm)

- [Alibaba Cloud - ActionTrail: Multi-account trail overview](https://www.alibabacloud.com/help/ja/doc-detail/160614.htm)

- [Alibaba Cloud - Resource Access Management](https://www.alibabacloud.com/help/ja/product/28625.htm)


*アリババクラウドは日本に２つのデータセンターを有し、世界で60を超えるアベラビリティーゾーンを有するアジア太平洋地域No.1(2019ガートナー)のクラウドインフラ事業者です。
アリババクラウドの詳細は、こちらからご覧ください。
[アリババクラウドジャパン公式ページ](https://www.alibabacloud.com/ja)*