AWS Organizations で多数の API コールを行っている、トップトーカーアカウントを特定したいです。
解決策
多数の API コールを行うアカウントを特定するには、Amazon CloudWatch Logs と CloudWatch メトリクスを両方使用するのがベストプラクティスです。
次の解決策では、Amazon Virtual Private Cloud (Amazon VPC) の DescribeVpcEndpoints API を使用します。
注: Amazon Elastic Compute Cloud (Amazon EC2) は、API リクエストをアカウントレベルでスロットリングします。また、パフォーマンスを向上させるために、Amazon EC2 は組織レベルでも API リクエストをスロットリングします。
CloudWatch Logs を使用してトップトーカーを特定する
トップトーカーを特定し、特定の期間におけるすべてのアカウントの API コールの合計数を集計するには、CloudWatch Logs を使用します。CloudWatch Logs ダッシュボードを作成するには、次の手順を実行します。
- 組織用に新しい AWS CloudTrail 証跡を作成するか、既存の証跡を変更し、その証跡を CloudWatch Logs に発行します。
注: CloudWatch Logs を [有効] に設定する必要があります。
- CloudWatch コンソールを開きます。
注: CloudWatch Logs の作成に使用したアカウントを使用してください。
- ナビゲーションペインで [ログ] を選択し、次に [Contributor Insights] を選択します。
- Contributor Insights のルールを作成し、[構文] を選択します。
- 各アカウントが行った API コールの数を取得するには、構文エディタに次のコードを入力します。
{
"AggregateOn": "Count",
"Contribution": {
"Filters": [
{
"Match": "$.eventName",
"In": [
"DescribeVpcEndpoints"
]
}
],
"Keys": [
"$.userIdentity.accountId",
"$.eventName"
]
},
"LogFormat": "JSON",
"Schema": {
"Name": "CloudWatchLogRule",
"Version": 1
},
"LogGroupARNs": [
"arn:aws:logs:us-west-2:account:log-group:aws-cloudtrail-logs-73008ace"
]
}
すべてのアカウントのすべての API コールの集計を取得するには、次のコードを入力します。
{
"AggregateOn": "Count",
"Contribution": {
"Filters": [
{
"Match": "$.eventName",
"In": [
"DescribeVpcEndpoints"
]
}
],
"Keys": [
"$.eventName"
]
},
"LogFormat": "JSON",
"Schema": {
"Name": "CloudWatchLogRule",
"Version": 1
},
"LogGroupARNs": [
"arn:aws:logs:us-west-2:account:log-group:aws-cloudtrail-logs-73008ace"
]
}
注: DescribeVpcEndpoints を実際の API コールに、arn:aws:logs:us-west-2:account:log-group:aws-cloudtrail-logs-73008ace をロググループの ARN に置き換えます。
- [アクション] を選択し、[ダッシュボードに追加] を選択します。
- 既存のダッシュボードを選択するか、新しいダッシュボードを作成します。
- [保存] を選択します。
次の CloudWatch Logs Insights クエリを実行しても、特定の期間におけるトップトーカーを特定できます。
fields @timestamp, @message, @logStream, @log
| filter eventName = 'DescribeVpcEndpoints'
| sort @timestamp desc
| stats count() by bin(1m)
注: DescribeVpcEndpoints を実際の API コールに置き換えます。
CloudWatch メトリクスを使用してトップトーカーを特定する
注: 設定が Metrics Insightsのクォータに準拠していることを確認してください。
API コールの最大クォータの 60% に達したときにアラートを発生させる CloudWatch アラームを作成するのがベストプラクティスです。
CloudWatch メトリクスダッシュボードを設定するには、次の手順を実行します。
- クロスアカウントオブザーバビリティを設定します。
- CloudWatch コンソールを開きます。
- [メトリクスを使用] を選択し、次に [すべてのメトリクス] タブを選択します。
- [ソース] を選択し、次のコードを入力します。
{
"metrics": [
[
{
"expression": "SELECT SUM(CallCount) FROM SCHEMA(\"AWS/Usage\", Class,Resource,Service,Type) WHERE Resource = 'DescribeVpcEndpoints'",
"label": "Query1",
"id": "q1",
"period": 60
}
]
],
"view": "timeSeries",
"stacked": false,
"region": "us-east-1",
"stat": "Average",
"period": 60,
"annotations": {
"horizontal": [
{
"label": "Org throttle",
"value": 225
}
]
}
}
注: DescribeVpcEndpoints を実際の API コールに、us-east-1 をお使いの AWS リージョンに、225 をお使いのアラームのクォータに置き換えます。
- [更新] を選択します。
- [アクション] を選択し、[ダッシュボードに追加] を選択します。
- 既存のダッシュボードを選択するか、新しいダッシュボードを作成します。CloudWatch Logs のデータがあるのと同じダッシュボードを使用することがベストプラクティスです。
- [保存] を選択します。
関連情報
Amazon CloudWatch で AWS CloudTrail を分析する
AWS PrivateLink のクォータ