

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 目標資源上 Application Auto Scaling API 呼叫的許可驗證
<a name="security_iam_permission_validation"></a>

向 Application Auto Scaling API 動作提出授權請求需要 API 發起人具有存取目標服務和 CloudWatch 中 AWS 資源的許可。在繼續處理與目標服務和 CloudWatch 相關聯的請求之前，Application Auto Scaling 會先驗證請求的許可。為了這樣做，我們發出一系列呼叫來驗證目標資源上的 IAM 許可。傳回的回應由 Application Auto Scaling 讀取。如果 IAM 許可不允許指定的動作，則 Application Auto Scaling 的請求會失敗，並傳回錯誤給使用者，其中包含缺少許可的相關資訊。這可確保使用者想要部署的擴展組態如預期般運作，並於請求失敗時傳回有用的錯誤。

為了示範運作過程，以下資訊提供有關 Application Auto Scaling 如何對 Aurora 和 CloudWatch 執行許可驗證的詳細資訊。

當使用者對 Aurora 資料庫叢集呼叫 `RegisterScalableTarget` API 時，Application Auto Scaling 會執行下列所有檢查，以確認使用者具有必要的許可 (以粗體顯示)。
+ **rds:CreateDBInstance**：為了判斷使用者是否具有此許可，我們對 `CreateDBInstance` API 操作傳送請求，嘗試在使用者指定的 Aurora 資料庫叢集中以無效參數 (空的執行個體 ID) 建立資料庫執行個體。對於獲授權的使用者，API 在稽核請求後會傳回 `InvalidParameterValue` 錯誤碼回應。但是，對於未經授權的使用者，我們會遇到 `AccessDenied` 錯誤，且 Application Auto Scaling 請求會失敗，並將 `ValidationException` 錯誤傳給使用者，其中列出缺少的許可。
+ **rds:DeleteDBInstance**：我們將空的執行個體 ID 傳送給 `DeleteDBInstance` API 操作。對於獲授權的使用者，此請求會導致 `InvalidParameterValue` 錯誤。對於未經授權的使用者，則會導致 `AccessDenied` 並傳送驗證例外給使用者（與第一個項目符號所述的處理相同）。
+ **rds:AddTagsToResource**：因為 `AddTagsToResource` API 操作需要 Amazon Resource Name (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**：我們使用篩選條件來呼叫 `DescribeDBInstances` API，該`db-cluster-id`篩選條件會篩選使用者提供的叢集名稱，以註冊可擴展的目標。對於獲授權的使用者，我們獲准描述資料庫叢集中的所有資料庫執行個體。對於未經授權的使用者，此呼叫會導致 `AccessDenied` 並傳送驗證例外給使用者。
+ **cloudwatch:PutMetricAlarm**：我們呼叫 `PutMetricAlarm` API 且不帶任何參數。因為缺少警示名稱，對於獲授權的使用者，此請求會導致 `ValidationError`。對於未經授權的使用者，則會導致 `AccessDenied` 並傳送驗證例外給使用者。
+ **cloudwatch:DescribeAlarms**：我們呼叫 `DescribeAlarms` API，並將記錄數上限值設為 1。對於獲授權的使用者，我們預期回應中有一個警示的資訊。對於未經授權的使用者，此呼叫會導致 `AccessDenied` 並傳送驗證例外給使用者。
+ **cloudwatch:DeleteAlarms**：類似於上方的 `PutMetricAlarm`，我們不提供參數給 `DeleteAlarms` 請求。因為請求中缺少警示名稱，對於獲授權的使用者，此呼叫會失敗並傳回 `ValidationError`。對於未經授權的使用者，則會導致 `AccessDenied` 並傳送驗證例外給使用者。

發生上述任何一個驗證例外都會記錄下來。您可以採取步驟，使用 手動識別哪些呼叫驗證失敗 AWS CloudTrail。如需詳細資訊，請參閱[「AWS CloudTrail 使用者指南」](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-user-guide.html)。

**注意**  
如果您使用 CloudTrail 收到有關 Application Auto Scaling 事件的提醒，則這些提醒會包含預設情況下用於驗證使用者許可的 Application Auto Scaling 呼叫。要篩選出這些提醒，請使用 `invokedBy` 欄位，該欄位會包含進行這些驗證檢查的 `application-autoscaling.amazonaws.com`。