Amazon Web Services ブログ
AWS CloudTrail と Amazon Athena による組織内の Amazon Connect API アクティビティの調査
マルチアカウント戦略に関する AWS のベストプラクティスに従い、お客様は製品、グループ、部門などに応じて、複数のアカウントとリージョンで Amazon Connect インスタンスを起動して維持しています。これにより、個々のビジネスオーナー、開発者、エンジニアなどは、各自の独立した Amazon Connect 環境に変更を加えることができます。このようなシナリオでは、 Amazon Connect 環境全体にわたるユーザーやリソースのアクティビティに関する調査を簡素化し、管理するための一元的な仕組みが必要です。
お客様がマルチアカウント環境で Amazon Connect パブリック API を追跡、記録、分析できるように、Amazon Connect は、すべてのパブリック Amazon Connect API 呼び出しを記録するサービスである AWS CloudTrail と統合されています。AWS CloudTrail を使用すると、お客様は AWS Organization 全体でログを収集し、一元化された Amazon Simple Storage Service (S3) バケットに送信できます。また、サーバーレスのインタラクティブ分析サービスである Amazon Athena には、一元化された Amazon Connect ログのクエリと分析を行う機能が備わっています。
このブログ記事では、複数の AWS アカウントとリージョンにわたる Amazon Connect インスタンスのアクティビティを記録、表示、クエリ、分析するために必要な手順について説明します。この情報により、Amazon Connect のセキュリティ状況を把握し、想定から逸脱したアクティビティを調査できます。
前提条件
このチュートリアルでは、次の前提条件を満たしている必要があります。
- Amazon Conenct パブリック API の基本的な理解
- AWS Organization の管理アカウントへのアクセス
- 組織の証跡を作成できること
チュートリアル
このチュートリアルでは、アカウントとリージョンを横断し、削除された Amazon Connect インスタンスを調査します。まず、組織全体で削除された Amazon Connect インスタンスの数を確認することから始めます。次に、削除を行ったユーザーを特定し、他のアクティビティを調べます。
まず、組織の証跡を作成します。組織の証跡を作成すると、組織全体の Amazon Connect パブリック API の履歴を記録し、CloudTrail ログを一元化された S3 バケットに送信します。次に、Amazon Athena を使用してこの一元化された S3 バケットにクエリを実行し、アカウントとリージョンを横断して Amazon Connect のアクティビティを分析します。図 1 は、このワークフローを図示したものです。
ステップ 1: 組織の証跡の設定
既存の組織の証跡がある場合、この演習でも既存の証跡を使用できます。既存の組織の証跡にアクセスできない場合は、以下の手順に従ってください。管理イベントを Amazon S3 に配信する場合、 1 つの配信は無料です。
- CloudTrail コンソールに移動します。左側のペインから証跡を選択し、右側のペインから証跡の作成を選択します。
- 証跡属性の選択ページで、cloudtrail-connect-example などの証跡名を指定します。組織内のすべてのアカウントで有効化のボックスにチェックを入れます。
- わかりやすくするために、ログファイルの SSE-KMS 暗号化は有効にしません。他のオプションはデフォルトのままにします。次へを選択します。
- ログイベントの選択ページですべてデフォルトのままにして、次へをクリックします。確認と作成ページで、証跡の作成を選択します。
- これで証跡が作成されました。S3 バケットの列のバケット名をメモしておきます。
ステップ 2: Athena テーブルの設定
- Athena コンソールに移動し、クエリエディタを選択します。Athena を使用して初めてログを記録する場合、以下のメッセージが表示されます。
- 設定を編集を開き、クエリ結果の場所の S3 バケットを設定します。
- 組織 ID を確認するため、AWS Organizations のコンソールにアクセスします。左側のパネルの 組織 ID をコピーします。
- Athena コンソールに戻り、クエリエディタを開きます。右側のペインのクエリエディタにクエリを入力し、実行することができます。
- 以下のクエリを使用して、結果をクエリするためのテーブルを作成します。S3 バケット名 (ステップ 1 でメモしたもの) と組織 ID (o-xxxxxxxxxx) は置き換えてください。
CREATE EXTERNAL TABLE cloudtrail_logs (
eventversion STRING,
useridentity STRUCT<
type:STRING,
principalid:STRING,
arn:STRING,
accountid:STRING,
invokedby:STRING,
accesskeyid:STRING,
userName:STRING,
sessioncontext:STRUCT<
attributes:STRUCT<
mfaauthenticated:STRING,
creationdate:STRING>,
sessionissuer:STRUCT<
type:STRING,
principalId:STRING,
arn:STRING,
accountId:STRING,
userName:STRING>,
ec2RoleDelivery:string,
webIdFederationData:map<string,string>
>
>,
eventtime STRING,
eventsource STRING,
eventname STRING,
awsregion STRING,
sourceipaddress STRING,
useragent STRING,
errorcode STRING,
errormessage STRING,
requestparameters STRING,
responseelements STRING,
additionaleventdata STRING,
requestid STRING,
eventid STRING,
resources ARRAY<STRUCT<
arn:STRING,
accountid:STRING,
type:STRING>>,
eventtype STRING,
apiversion STRING,
readonly STRING,
recipientaccountid STRING,
serviceeventdetails STRING,
sharedeventid STRING,
vpcendpointid STRING,
tlsDetails struct<
tlsVersion:string,
cipherSuite:string,
clientProvidedHostHeader:string>
)
ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe'
STORED AS INPUTFORMAT 'com.amazon.emr.cloudtrail.CloudTrailInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION 's3://ENTERNAMEOFS3BUCKET/AWSLogs/ENTERORGID/';
- 左側のテーブルとビューのパネルに cloudtrail_logs というテーブルが作成されました。
- 次に、テーブルに追加する必要があります。そのため、クエリエディターでプラス (+) 記号を選択して、次のクエリ用に新しいタブを作成します。
ALTER TABLE cloudtrail_logs SET
LOCATION 's3://ENTERNAMEOFS3BUCKET/AWSLogs/ENTERORGID/'
ステップ 3: 複数のアカウントとリージョンにわたる Amazon Connect アクティビティの調査
Amazon Connect のアクティビティをシミュレートするため、複数のアカウントとリージョンで Amazon Connect インスタンスを作成し、後でそれらのインスタンスを削除します。CloudTrail レコードが表示されるまで数分待ってから、次のクエリを新しいタブに入力してください。
- アカウントとリージョン全体で削除されたインスタンスの数を確認するには、Athena コンソールに移動して以下のクエリを実行します。
SELECT eventName, count(eventName) AS NumberOfDeletedInstances, recipientaccountid, awsRegion
FROM cloudtrail_logs
Where eventname = 'DeleteInstance' AND eventsource = 'connect.amazonaws.com'
GROUP BY eventName, recipientaccountid, awsRegion
- これらのインスタンスを削除したユーザーを特定するには、以下のクエリを実行します。
useridentity.arn
をコピーしておきます。
SELECT
useridentity.arn,
recipientaccountid,
sourceipaddress,
eventtime,
awsRegion,
eventName,
requestParameters
FROM cloudtrail_logs
Where eventname = 'DeleteInstance' AND eventsource = 'connect.amazonaws.com'
- これらの削除を行ったユーザーのアクティビティを確認するには、以下のクエリを実行します。
SELECT
eventName,
recipientaccountid,
sourceipaddress,
eventtime,
awsRegion
FROM cloudtrail_logs
Where useridentity.arn = 'ENTERTHEUSERARN' AND eventsource = 'connect.amazonaws.com'
上記の例の手順で、アカウント・リージョン全体の Amazon Connect に関する CloudTrail ログをクエリできました。Amazon Connect のログファイルのエントリの詳細については、AWS CloudTrail ドキュメントの「AWS CloudTrail を使用して Amazon Connect API 呼び出しをログ記録する」をご覧ください。
クリーンアップ
検証の為だけにブログの手順に従っていた場合は、請求が継続しないようにアカウントをクリーンアップしてください。そうでない場合は、クリーンアップを実行しないでください。クリーンアップするには、以下の手順に従ってください。
- この演習の一環として CloudTrail の組織の証跡を作成した場合は、 CloudTrail コンソールに移動し、作成した証跡を選択して削除を選択します。
- S3 コンソールに移動します。すべてのアカウントの CloudTrail ログを保存するために作成した S3 バケットを削除します。
結論
このブログ記事では、組織の証跡を使用して複数のアカウントとリージョンにわたる Amazon Connect に関するアクティビティをクエリする方法を紹介しました。Amazon Connect の詳細については、Amazon Connect のドキュメントをご覧ください。
著者について
翻訳はテクニカルアカウントマネージャー高橋が担当しました。原文はこちらです。