ターゲットリソースでの Application Auto Scaling API コールに対するアクセス許可の検証
Application Auto Scaling API アクションに対して認可されたリクエストを実行するには、API の呼び出し元が、ターゲットサービスと CloudWatch 内の AWS リソースにアクセスする許可を持っている必要があります。Application Auto Scaling は、リクエストを続行する前に、ターゲットサービスと CloudWatch の両方に関連付けられているリクエストに対する許可を検証します。これを行うには、一連のコールを発行してターゲットリソースに対する IAM 許可を検証します。レスポンスが返されると、Application Auto Scaling がそのレスポンスを読み取ります。IAM 許可が所定のアクションが許可しない場合、Application Auto Scaling はリクエストを失敗させ、欠落している許可に関する情報が含まれたエラーをユーザーに返します。これは、ユーザーがデプロイするスケーリング設定が意図したとおりに機能することと、リクエストが失敗した場合に有用なエラーが返されることを確実にします。
以下の情報は、この仕組みの例として、Application Auto Scaling が Aurora と CloudWatch で許可の検証を実行する方法を詳しく説明します。
ユーザーが Aurora DB クラスターに対して RegisterScalableTarget
API を呼び出すと、Application Auto Scaling は以下のすべてのチェックを実行してユーザーに必要なアクセス許可 (太字) があることを確認します。
-
rds:CreateDBInstance: ユーザーにこの許可があるかどうかを判断するため、
CreateDBInstance
API オペレーションにリクエストを送信して、ユーザーが指定した Aurora DB クラスターで無効なパラメータ (空のインスタンス ID) を使った DB インスタンスの作成を試みます。許可があるユーザーの場合、API は、リクエストを監査した後でInvalidParameterValue
エラーコードレスポンスを返します。しかし、許可がないユーザーの場合は、AccessDenied
エラーが発生し、欠落している許可がリストされた、ユーザーへのValidationException
エラーを伴って Application Auto Scaling リクエストが失敗します。 -
rds:DeleteDBInstance:
DeleteDBInstance
API オペレーションに空のインスタンス ID を送信します。許可があるユーザーの場合、このリクエストの結果はInvalidParameterValue
エラーになります。許可がないユーザーの場合は、結果がAccessDenied
になり、ユーザーに検証例外が送信されます (最初の箇条書きで説明されているものと同じ対応)。 -
rds:AddTagsToResource:
AddTagsToResource
API オペレーションには Amazon リソースネーム (ARN) が必要であるため、無効なアカウント ID (12345) とダミーインスタンス ID (non-existing-db) を使用した「ダミー」リソースを指定して ARN (arn:aws:rds:us-east-1:12345:db:non-existing-db
) を作成する必要があります。許可があるユーザーの場合、このリクエストの結果はInvalidParameterValue
エラーになります。許可がないユーザーの場合は、結果がAccessDenied
になり、ユーザーに検証例外が送信されます -
rds:DescribeDBClusters: 自動スケーリングに登録されているリソースのクラスター名を記述します。許可があるユーザーの場合、有効な記述結果が得られます。許可がないユーザーの場合は、結果が
AccessDenied
になり、ユーザーに検証例外が送信されます -
rds:DescribeDBInstances: スケーラブルターゲットを登録するためにユーザーが提供したクラスター名をフィルタリングする
db-cluster-id
フィルターを使って、DescribeDBInstances
API を呼び出します。許可があるユーザーの場合、DB クラスター内のすべての DB インスタンスを記述することが許可されます。許可がないユーザーの場合は、この呼び出しの結果がAccessDenied
になり、ユーザーに検証例外が送信されます -
cloudwatch:PutMetricAlarm: パラメータなしで
PutMetricAlarm
API を呼び出します。アラーム名が欠落しているため、リクエストの結果は、許可があるユーザーに対するValidationError
になります。許可がないユーザーの場合は、結果がAccessDenied
になり、ユーザーに検証例外が送信されます -
cloudwatch:DescribeAlarms: 最大レコード数の値を 1 に設定して
DescribeAlarms
API を呼び出します。許可があるユーザーの場合、レスポンスに 1 つのアラームに関する情報があることを期待できます。許可がないユーザーの場合は、この呼び出しの結果がAccessDenied
になり、ユーザーに検証例外が送信されます -
cloudwatch:DeleteAlarms: 上記の
PutMetricAlarm
と同じく、DeleteAlarms
リクエストにパラメータを指定しません。リクエストにアラーム名がないため、この呼び出しは、許可があるユーザーに対するValidationError
を伴って失敗します。許可がないユーザーの場合は、結果がAccessDenied
になり、ユーザーに検証例外が送信されます
これらの検証例外は、そのうちのどれかが発生するたびにログに記録されます。AWS CloudTrail を使用して、どのコールが検証に失敗したかを手動で特定する手順を実行できます。詳細については、AWS CloudTrail ユーザーガイドを参照してください。
注記
CloudTrail を使用して Application Auto Scaling イベントのアラートを受信した場合、これらのアラートには、ユーザーアクセス許可を検証するための Application Auto Scaling に対するコールがデフォルトで含まれています。これらのアラートを除外する場合は、これらの検証チェックのための application-autoscaling.amazonaws.com
が含まれている invokedBy
フィールドを使用します。