

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

# Amazon API Gateway 的安全性
<a name="security"></a>

的雲端安全性 AWS 是最高優先順序。身為 AWS 客戶，您可以受益於資料中心和網路架構，這些架構專為滿足最安全敏感組織的需求而建置。

安全性是 AWS 與您之間的共同責任。[共同責任模型](https://aws.amazon.com/compliance/shared-responsibility-model/)將其描述為雲端「的」**安全性和雲端「中」**的安全性：
+ **雲端的安全性** – AWS 負責保護在 AWS Cloud 中執行 AWS 服務的基礎設施。 AWS 也為您提供可安全使用的服務。在[AWS 合規計畫](https://aws.amazon.com/compliance/programs/)中，第三方稽核人員會定期測試和驗證我們安全的有效性。若要了解適用於 Amazon API Gateway 的合規計劃，請參閱[AWS 合規計劃範圍內的服務](https://aws.amazon.com/compliance/services-in-scope/)。
+ **雲端的安全性** – 您的責任取決於您使用 AWS 的服務。您也必須對其他因素負責，包括資料的機密性、您公司的要求和適用法律和法規。

本文件有助於您了解如何在使用 API Gateway 時套用共同責任模型。下列各主題將說明如何設定 API Gateway，以達成您的安全性與合規目標。您也會了解如何使用其他 AWS 服務來協助您監控和保護 API Gateway 資源。

如需詳細資訊，請參閱 [Amazon API Gateway 的安全概觀](https://d1.awsstatic.com/whitepapers/api-gateway-security.pdf)。

**Topics**
+ [Amazon API Gateway 的資料保護](data-protection.md)
+ [適用於 Amazon API Gateway 的 Identity and Access Management](security-iam.md)
+ [在 Amazon API Gateway 中進行記錄和監控](security-monitoring.md)
+ [Amazon API Gateway 的合規驗證](compliance-validation.md)
+ [Amazon API Gateway 中的復原功能](disaster-recovery-resiliency.md)
+ [Amazon API Gateway 的基礎設施安全性](infrastructure-security.md)
+ [Amazon API Gateway 的漏洞分析](vulnerability-analysis.md)
+ [Amazon API Gateway 的安全最佳實務](security-best-practices.md)

# Amazon API Gateway 的資料保護
<a name="data-protection"></a>

AWS [共同責任模型](https://aws.amazon.com/compliance/shared-responsibility-model/)適用於 Amazon API Gateway 的資料保護。如此模型所述，AWS 負責保護執行所有 AWS 雲端 的全球基礎設施。您負責維護在此基礎設施上託管內容的控制權。您也同時負責所使用 AWS 服務 的安全組態和管理任務。如需資料隱私權的詳細資訊，請參閱[資料隱私權常見問答集](https://aws.amazon.com/compliance/data-privacy-faq/)。如需有關歐洲資料保護的相關資訊，請參閱 *AWS 安全性部落格*上的 [AWS 共同的責任模型和 GDPR](https://aws.amazon.com/blogs/security/the-aws-shared-responsibility-model-and-gdpr/) 部落格文章。

基於資料保護目的，建議您使用 AWS IAM Identity Center 或 AWS Identity and Access Management (IAM) 保護 AWS 帳戶 憑證，並設定個人使用者。如此一來，每個使用者都只會獲得授與完成其任務所必須的許可。我們也建議您採用下列方式保護資料：
+ 每個帳戶均要使用多重要素驗證 (MFA)。
+ 使用 SSL/TLS 與 AWS 資源通訊。我們需要 TLS 1.2 並建議使用 TLS 1.3。
+ 使用 AWS CloudTrail 設定 API 和使用者活動日誌記錄。如需使用 CloudTrail 追蹤擷取 AWS 活動的相關資訊，請參閱「AWS CloudTrail 使用者指南」**中的[使用 CloudTrail 追蹤](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-trails.html)。
+ 使用 AWS 加密解決方案，以及 AWS 服務 內的所有預設安全控制項。
+ 使用進階的受管安全服務 (例如 Amazon Macie)，協助探索和保護儲存在 Amazon S3 的敏感資料。
+ 如果您在透過命令列介面或 API 存取 AWS 時，需要 FIPS 140-3 驗證的加密模組，請使用 FIPS 端點。如需有關 FIPS 和 FIPS 端點的更多相關資訊，請參閱[聯邦資訊處理標準 (FIPS) 140-3](https://aws.amazon.com/compliance/fips/)。

我們強烈建議您絕對不要將客戶的電子郵件地址等機密或敏感資訊，放在標籤或自由格式的文字欄位中，例如**名稱**欄位。這包含在您利用主控台、API、AWS CLI 或 AWS 軟體開發套件使用 API Gateway 或其他 AWS 服務 時。您在標籤或自由格式文字欄位中輸入的任何資料都可能用於計費或診斷日誌。如果您提供外部伺服器的 URL，我們強烈建議請勿在驗證您對該伺服器請求的 URL 中包含憑證資訊。

# Amazon API Gateway 的資料加密
<a name="data-protection-encryption"></a>

資料保護是指保護傳輸中的資料 (即資料往返於 API Gateway 時) 以及靜態資料 (即資料存放在 時AWS

## Amazon API Gateway 的靜態資料加密
<a name="data-protection-at-rest"></a>

如果您選擇為 REST API 啟用快取功能，就可以啟用快取加密。如需進一步了解，請參閱[API Gateway 中 REST API 的快取設定](api-gateway-caching.md)。

如需關於資料保護的詳細資訊，請參閱 *AWS 安全部落格*上的 [AWS 共同責任模型和歐盟《一般資料保護規範》(GDPR)](https://aws.amazon.com/blogs/security/the-aws-shared-responsibility-model-and-gdpr/) 部落格文章。

### 加密和解密憑證的私有金鑰
<a name="private-key"></a>

當您為私有 API 建立自訂網域名稱時，您的 ACM 憑證和私有金鑰會使用具有別名 **aws/acm** 的 AWS 受管 KMS 金鑰進行加密。您可以在 AWS KMS 主控台的 **AWS 受管金鑰**下，檢視具有此別名的金鑰 ID。

API Gateway 不會直接存取您的 ACM 資源。而是使用 AWS TLS Connection Manager 來保護和存取憑證的私有金鑰。當您使用 ACM 憑證為私有 API 建立 APIs Gateway 自訂網域名稱時，API Gateway 會為您的憑證與 AWS TLS Connection Manager 建立關聯。方法是針對具有字首 **aws/acm** 的 AWS 受管金鑰在 AWS KMS 中建立授權。授權是一種政策工具，允許 TLS Connection Manager 使用密碼編譯操作中的 KMS 金鑰。授權可讓承授者主體 (TLS Connection Manager) 呼叫 KMS 金鑰上指定的授予操作，以解密憑證的私有金鑰。TLS Connection Manager 接著會使用憑證和解密的 (純文字) 私有金鑰，與 API Gateway 服務的用戶端建立安全連線 (SSL/TLS 工作階段)。當憑證與私有 API 的 API Gateway 自訂網域名稱取消關聯時，授權即會失效。

如果您想要移除對 KMS 金鑰的存取權，建議您使用 AWS 管理主控台 或 AWS CLI 中的 `update-service` 命令，取代或刪除服務的憑證。

### API Gateway 的加密內容
<a name="encryption-context"></a>

[加密內容](https://docs.aws.amazon.com/kms/latest/developerguide/encrypt_context.html)是選用的一組鍵值對，其中包含有關您的私有金鑰可能用途的情境式內容資訊。AWS KMS 將加密內容與加密資料綁定，並將其用作其他驗證資料，以支援驗證加密。

當您的 TLS 金鑰與 API Gateway 和 TLS Connection Manager 搭配使用時，您的 API Gateway 服務名稱會包含在用來加密靜態金鑰的加密內容中。您可以透過檢視 CloudTrail 日誌中的加密內容，如下一節所示，或查看 ACM 主控台的**關聯的資源**標籤，以驗證憑證和私有金鑰所使用的 API Gateway 自訂網域名稱。

若要解密資料，則必須在請求中包含相同的加密內容。API Gateway 在所有的 AWS KMS 密碼編譯操作中使用相同的加密內容，其中金鑰為 `aws:apigateway:arn`，而值為 API Gateway `PrivateDomainName` 資源的 Amazon Resource Name (ARN)。

下列範例展示操作輸出中的加密內容，例如 `CreateGrant`。

```
"constraints": {
"encryptionContextEquals": {
"aws:acm:arn": "arn:aws:acm:us-west-2:859412291086:certificate/9177097a-f0ae-4be1-93b1-19f911ea4f88",
"aws:apigateway:arn": "arn:aws:apigateway:us-west-2:859412291086:/domainnames/denytest-part1.pdx.sahig.people.aws.dev+cbaeumzjhg"
}
},
"operations": [
"Decrypt"
],
"granteePrincipal": "tlsconnectionmanager.amazonaws.com"
```

## Amazon API Gateway 的傳輸中資料加密
<a name="data-protection-in-transit"></a>

使用 Amazon API Gateway 建立的 API 只會公開 HTTPS 端點。API Gateway 不支援未加密的 (HTTP) 端點。

API Gateway 會管理預設 `execute-api` 端點的憑證。如果您要設定自訂網域名稱，[請指定網域名稱的憑證](how-to-custom-domains.md#custom-domain-names-certificates)。最佳實務是不要[關聯憑證](https://docs.aws.amazon.com/acm/latest/userguide/troubleshooting-pinning.html)。

為了提高安全性，您可以選擇要為 API Gateway 自訂網域強制執行的最低 Transport Layer Security (TLS) 通訊協定版本。WebSocket API 與 HTTP API 僅支援 TLS 1.2 版。如需進一步了解，請參閱[在 API Gateway 中為您的自訂網域選擇安全政策](apigateway-custom-domain-tls-version.md)。

您也可以在帳戶中使用自訂 SSL 憑證來設定 Amazon CloudFront 分佈，並搭配區域 API 使用。接著，您可以根據安全與合規要求來使用 TLS 1.1 以上版本，為 CloudFront 分佈設定安全政策。

如需關於資料保護的詳細資訊，請參閱 *AWS 安全部落格*上的[在 API Gateway 中保護您的 REST API](rest-api-protect.md)及 [AWS 共同責任模型和歐盟《一般資料保護規範》(GDPR) ](https://aws.amazon.com/blogs/security/the-aws-shared-responsibility-model-and-gdpr/)部落格文章。

# 網際網路流量隱私權
<a name="security-traffic-privacy"></a>

使用 Amazon API Gateway 時，您可以建立只能從 Amazon Virtual Private Cloud (VPC) 存取的私有 REST API。VPC 會使用[界面 VPC 端點](https://docs.aws.amazon.com/vpc/latest/userguide/vpce-interface.html)，也就是您在 VPC 中建立的端點網路界面。您可以使用[資源政策](apigateway-private-api-create.md#apigateway-private-api-set-up-resource-policy)，允許或拒絕選定的 VPC 與 VPC 端點 (包括其他 AWS 帳戶) 存取您的 API。每個端點可用來存取多個私有 API。您也可以使用 Direct Connect 在內部部署網路與 Amazon VPC 之間建立連線，並經由該連線來存取您的私有 API。在所有情況下，進出您私有 API 的流量都會使用安全連線，且留在 Amazon 網路中，並與公有網際網路隔離。如需進一步了解，請參閱[API Gateway 中的私有 REST API](apigateway-private-apis.md)。

# 適用於 Amazon API Gateway 的 Identity and Access Management
<a name="security-iam"></a>

AWS Identity and Access Management (IAM) 是 AWS 服務 ，可協助管理員安全地控制對 AWS 資源的存取。IAM 管理員可以控制身分驗證** (已登入) 和授權** (具有許可) 來使用 API Gateway 資源。IAM 是您可以免費使用 AWS 服務 的 。

**Topics**
+ [目標對象](#security_iam_audience)
+ [使用身分驗證](#security_iam_authentication)
+ [使用政策管理存取權](#security_iam_access-manage)
+ [Amazon API Gateway 與 IAM 搭配運作的方式](security_iam_service-with-iam.md)
+ [Amazon API Gateway 身分型政策範例](security_iam_id-based-policy-examples.md)
+ [Amazon API Gateway 資源型政策範例](security_iam_resource-based-policy-examples.md)
+ [疑難排解 Amazon API Gateway 身分和存取](security_iam_troubleshoot.md)
+ [使用 API Gateway 的服務連結角色](using-service-linked-roles.md)

## 目標對象
<a name="security_iam_audience"></a>

使用方式 AWS Identity and Access Management (IAM) 會根據您的角色而有所不同：
+ **服務使用者** — 若無法存取某些功能，請向管理員申請所需許可 (請參閱 [疑難排解 Amazon API Gateway 身分和存取](security_iam_troubleshoot.md))
+ **服務管理員** — 負責設定使用者存取權並提交相關許可請求 (請參閱 [Amazon API Gateway 與 IAM 搭配運作的方式](security_iam_service-with-iam.md))
+ **IAM 管理員** — 撰寫政策以管理存取控制 (請參閱 [Amazon API Gateway 身分型政策範例](security_iam_id-based-policy-examples.md))

## 使用身分驗證
<a name="security_iam_authentication"></a>

身分驗證是您 AWS 使用身分憑證登入 的方式。您必須以 AWS 帳戶根使用者、IAM 使用者或擔任 IAM 角色身分進行身分驗證。

您可以使用身分來源的登入資料，例如 AWS IAM Identity Center (IAM Identity Center)、單一登入身分驗證或 Google/Facebook 登入資料，以聯合身分的形式登入。如需有關登入的詳細資訊，請參閱《AWS 登入 使用者指南》**中的[如何登入您的 AWS 帳戶](https://docs.aws.amazon.com/signin/latest/userguide/how-to-sign-in.html)。

對於程式設計存取， AWS 提供 SDK 和 CLI 以密碼編譯方式簽署請求。如需詳細資訊，請參閱《IAM 使用者指南》**中的 [API 請求的AWS 第 4 版簽署程序](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_sigv.html)。

### AWS 帳戶 根使用者
<a name="security_iam_authentication-rootuser"></a>

 當您建立 時 AWS 帳戶，您會從一個名為 AWS 帳戶 *theroot 使用者的*登入身分開始，該身分具有對所有 AWS 服務 和 資源的完整存取權。強烈建議不要使用根使用者來執行日常任務。有關需要根使用者憑證的任務，請參閱《IAM 使用者指南》**中的[需要根使用者憑證的任務](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-user.html#root-user-tasks)。

### IAM 使用者和群組
<a name="security_iam_authentication-iamuser"></a>

*IAM 使用者*[https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users.html](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users.html)是一種身分具備單人或應用程式的特定許可權。建議以臨時憑證取代具備長期憑證的 IAM 使用者。如需詳細資訊，請參閱《*IAM 使用者指南*》中的[要求人類使用者使用聯合身分提供者來 AWS 使用臨時憑證存取](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#bp-users-federation-idp) 。

[IAM 群組](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_groups.html)**會指定 IAM 使用者集合，使管理大量使用者的許可權更加輕鬆。如需詳細資訊，請參閱《IAM 使用者指南》**中的 [IAM 使用者的使用案例](https://docs.aws.amazon.com/IAM/latest/UserGuide/gs-identities-iam-users.html)。

### IAM 角色
<a name="security_iam_authentication-iamrole"></a>

*IAM 角色*[https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)的身分具有特定許可權，其可以提供臨時憑證。您可以透過[從使用者切換到 IAM 角色 （主控台） ](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-console.html)或呼叫 AWS CLI 或 AWS API 操作來擔任角色。如需詳細資訊，請參閱《IAM 使用者指南》**中的[擔任角色的方法](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_manage-assume.html)。

IAM 角色適用於聯合身分使用者存取、臨時 IAM 使用者許可、跨帳戶存取權與跨服務存取，以及在 Amazon EC2 執行的應用程式。如需詳細資訊，請參閱《*IAM 使用者指南*》中的 [IAM 中的快帳戶資源存取](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies-cross-account-resource-access.html)。

## 使用政策管理存取權
<a name="security_iam_access-manage"></a>

您可以透過建立政策並將其連接到身分或資源 AWS 來控制 AWS 中的存取。政策定義與身分或資源相關聯的許可。當委託人提出請求時 AWS ， 會評估這些政策。大多數政策會以 JSON 文件 AWS 形式存放在 中。如需進一步了解 JSON 政策文件，請參閱《*IAM 使用者指南*》中的 [JSON 政策概觀](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#access_policies-json)。

管理員會使用政策，透過定義哪些**主體**可在哪些**條件**下對哪些**資源**執行**動作**，以指定可存取的範圍。

預設情況下，使用者和角色沒有許可。IAM 管理員會建立 IAM 政策並將其新增至角色，供使用者後續擔任。IAM 政策定義動作的許可，無論採用何種方式執行。

### 身分型政策
<a name="security_iam_access-manage-id-based-policies"></a>

身分型政策是附加至身分 (使用者、使用者群組或角色) 的 JSON 許可政策文件。這類政策控制身分可對哪些資源執行哪些動作，以及適用的條件。如需了解如何建立身分型政策，請參閱《*IAM 使用者指南*》中的[透過客戶管理政策定義自訂 IAM 許可](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html)。

身分型政策可分為*內嵌政策* (直接內嵌於單一身分) 與*受管政策* (可附加至多個身分的獨立政策)。如需了解如何在受管政策及內嵌政策之間做選擇，請參閱《IAM 使用者指南》**中的[在受管政策與內嵌政策之間選擇](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies-choosing-managed-or-inline.html)。

### 資源型政策
<a name="security_iam_access-manage-resource-based-policies"></a>

資源型政策是附加到資源的 JSON 政策文件。範例包括 IAM *角色信任政策*與 Amazon S3 *儲存貯體政策*。在支援資源型政策的服務中，服務管理員可以使用它們來控制對特定資源的存取權限。您必須在資源型政策中[指定主體](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html)。

資源型政策是位於該服務中的內嵌政策。您無法在以資源為基礎的政策中使用來自 IAM 的 AWS 受管政策。

### 存取控制清單 (ACL)
<a name="security_iam_access-manage-acl"></a>

存取控制清單 (ACL) 可控制哪些主體 (帳戶成員、使用者或角色) 擁有存取某資源的許可。ACL 類似於資源型政策，但它們不使用 JSON 政策文件格式。

Amazon S3 AWS WAF和 Amazon VPC 是支援 ACLs的服務範例。如需進一步了解 ACL，請參閱《Amazon Simple Storage Service 開發人員指南》**中的[存取控制清單 (ACL) 概觀](https://docs.aws.amazon.com/AmazonS3/latest/userguide/acl-overview.html)。

### 其他政策類型
<a name="security_iam_access-manage-other-policies"></a>

AWS 支援其他政策類型，可設定更多常見政策類型授予的最大許可：
+ **許可界限** — 設定身分型政策可授與 IAM 實體的最大許可。如需詳細資訊，請參閱《 IAM 使用者指南》**中的 [IAM 實體許可界限](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_boundaries.html)。
+ **服務控制政策 (SCP)** — 為 AWS Organizations中的組織或組織單位指定最大許可。如需詳細資訊，請參閱《AWS Organizations 使用者指南》**中的[服務控制政策](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps.html)。
+ **資源控制政策 (RCP)** — 設定您帳戶中資源可用許可的上限。如需詳細資訊，請參閱《AWS Organizations 使用者指南》**中的[資源控制政策 (RCP)](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_rcps.html)。
+ **工作階段政策** — 在以程式設計方式為角色或聯合身分使用者建立臨時工作階段時，以參數形式傳遞的進階政策。如需詳細資訊，請參《*IAM 使用者指南*》中的[工作階段政策](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session)。

### 多種政策類型
<a name="security_iam_access-manage-multiple-policies"></a>

當多種類型的政策適用於請求時，產生的許可會更複雜而無法理解。若要了解如何 AWS 在涉及多個政策類型時決定是否允許請求，請參閱《*IAM 使用者指南*》中的[政策評估邏輯](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic.html)。

# Amazon API Gateway 與 IAM 搭配運作的方式
<a name="security_iam_service-with-iam"></a>

在您使用 IAM 來管理 API Gateway 的存取權之前，您應該了解提供哪些 IAM 功能與 API Gateway 搭配使用。若要全面了解 API Gateway 和其他 AWS 服務如何與 IAM 搭配使用，請參閱《IAM *使用者指南*》中的與 IAM [AWS 搭配使用的 服務](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-services-that-work-with-iam.html)。

**Topics**
+ [API Gateway 身分類型政策](#security_iam_service-with-iam-id-based-policies)
+ [API Gateway 資源類型政策](#security_iam_service-with-iam-resource-based-policies)
+ [根據 API Gateway 標籤授權](#security_iam_service-with-iam-tags)
+ [API Gateway IAM 角色](#security_iam_service-with-iam-roles)

## API Gateway 身分類型政策
<a name="security_iam_service-with-iam-id-based-policies"></a>

使用 IAM 身分型政策，您可以指定允許或拒絕的動作和資源，以及在何種條件下允許或拒絕動作。API Gateway 支援特定動作、資源和條件索引鍵。如需有關 API Gateway 特定動作、資源和條件索引鍵的詳細資訊，請參閱 [Amazon API Gateway Management 的動作、資源和條件索引鍵](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonapigatewaymanagement.html)和 [Amazon API Gateway Management V2 的動作、資源和條件索引鍵](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonapigatewaymanagementv2.html)。有關您在 JSON 政策中使用之所有元素的資訊，請參閱 *IAM 使用者指南*中的 [IAM JSON 政策元素參考](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements.html)。

下列範例顯示允許使用者僅建立或更新私有 REST API 的身分型政策。如需更多範例，請參閱 [Amazon API Gateway 身分型政策範例](security_iam_id-based-policy-examples.md)。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "ScopeToPrivateApis",
      "Effect": "Allow",
      "Action": [
        "apigateway:PATCH",
        "apigateway:POST",
        "apigateway:PUT"
      ],
      "Resource": [
        "arn:aws:apigateway:us-east-1::/restapis",
        "arn:aws:apigateway:us-east-1::/restapis/??????????"
      ],
      "Condition": {
        "ForAllValues:StringEqualsIfExists": {
          "apigateway:Request/EndpointType": "PRIVATE",
          "apigateway:Resource/EndpointType": "PRIVATE"
        }
      }
    },
    {
      "Sid": "AllowResourcePolicyUpdates",
      "Effect": "Allow",
      "Action": [
          "apigateway:UpdateRestApiPolicy"
      ],
      "Resource": [
          "arn:aws:apigateway:us-east-1::/restapis/*"
      ]
    }
  ]
}
```

------

### 動作
<a name="security_iam_service-with-iam-id-based-policies-actions"></a>

JSON 原則的 `Action` 元素描述您可以用來允許或拒絕原則中存取的動作。

API Gateway 中的政策動作會在動作之前使用下列字首：`apigateway:`。政策陳述式必須包含 `Action` 或 `NotAction` 元素。API Gateway 會定義自己的一組動作，描述您可以使用此服務執行的任務。



API 管理 `Action` 表達式具有格式 `apigateway:action`，其中*動作*是下列 API Gateway 動作之一：**GET**、**POST**、**PUT**、**DELETE**、**PATCH** (以更新資源)，或 **\$1** (此為前述所有動作)。

`Action` 表達式的一些範例包括：
+ **apigateway:\$1** 是所有 API Gateway 動作。
+ **apigateway:GET** 只有 API Gateway 中的 GET 動作。

若要在單一陳述式中指定多個動作，請用逗號分隔，如下所示：

```
"Action": [
      "apigateway:action1",
      "apigateway:action2"
```

有關用於特定 API Gateway 操作之 HTTP 動詞的資訊，請參閱 [Amazon API Gateway 第 1 版 API 參考](https://docs.aws.amazon.com/apigateway/api-reference/) (REST API) 和 [Amazon API Gateway 第 2 版 API 參考](https://docs.aws.amazon.com/apigatewayv2/latest/api-reference/api-reference.html) (WebSocket 和 HTTP API)。

如需詳細資訊，請參閱[Amazon API Gateway 身分型政策範例](security_iam_id-based-policy-examples.md)。

### Resources
<a name="security_iam_service-with-iam-id-based-policies-resources"></a>

管理員可以使用 AWS JSON 政策來指定誰可以存取內容。也就是說，哪個**主體**在什麼**條件**下可以對什麼**資源**執行哪些**動作**。

`Resource` JSON 政策元素可指定要套用動作的物件。最佳實務是使用其 [Amazon Resource Name (ARN)](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference-arns.html) 來指定資源。若動作不支援資源層級許可，使用萬用字元 (\$1) 表示該陳述式適用於所有資源。

```
"Resource": "*"
```



API Gateway 資源具有以下 ARN 格式：

```
arn:aws:apigateway:region::resource-path-specifier
```

例如，若要指定具有 ID *`api-id`* 及其子資源的 REST API，例如陳述式中的授權者，請使用下列 ARN：

```
"Resource": "arn:aws:apigateway:us-east-2::/restapis/api-id/*"
```

若要指定屬於特定帳戶的所有 REST API 和子資源，請使用萬用字元 (\$1)：

```
"Resource": "arn:aws:apigateway:us-east-2::/restapis/*"
```

若要查看 API Gateway 資源類型及其 ARN 的清單，請參閱[API Gateway Amazon Resource Name (ARN) 參考資料](arn-format-reference.md)。

### 條件索引鍵
<a name="security_iam_service-with-iam-id-based-policies-conditionkeys"></a>

管理員可以使用 AWS JSON 政策來指定誰可以存取內容。也就是說，哪個**主體**在什麼**條件**下可以對什麼**資源**執行哪些**動作**。

`Condition` 元素會根據定義的條件，指定陳述式的執行時機。您可以建立使用[條件運算子](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html)的條件運算式 (例如等於或小於)，來比對政策中的條件和請求中的值。若要查看所有 AWS 全域條件索引鍵，請參閱《*IAM 使用者指南*》中的[AWS 全域條件內容索引鍵](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html)。

API Gateway 會定義自己的一組條件金鑰，也支援使用一些全域條件金鑰。若要查看 API Gateway 條件索引鍵清單，請參閱*《IAM 使用者指南》*中的 [Amazon API Gateway 條件索引鍵](https://docs.aws.amazon.com/IAM/latest/UserGuide/list_manageamazonapigateway.html#manageamazonapigateway-policy-keys)。若要了解您可以搭配條件索引鍵使用哪些動作和資源，請參閱 [Amazon API Gateway 定義的動作](https://docs.aws.amazon.com/IAM/latest/UserGuide/list_manageamazonapigateway.html#amazonapigateway-actions-as-permissions)。

如需有關標記的資訊 (包括屬性型存取控制)，請參閱 [API Gateway 資源的標記](apigateway-tagging.md)。

### 範例
<a name="security_iam_service-with-iam-id-based-policies-examples"></a>



若要了解 API Gateway 身分型政策的範例，請參閱[Amazon API Gateway 身分型政策範例](security_iam_id-based-policy-examples.md)。

## API Gateway 資源類型政策
<a name="security_iam_service-with-iam-resource-based-policies"></a>

資源型政策是 JSON 政策文件，這些文件會指定指定的主體可對 API Gateway 資源以及在怎樣的條件下執行哪些動作。API Gateway 支援適用於 REST API 的資源型許可政策。您可以使用資源政策來控制誰可以叫用 REST API。如需詳細資訊，請參閱[使用 API Gateway 資源政策來控制對 REST API 的存取](apigateway-resource-policies.md)。

### 範例
<a name="security_iam_service-with-iam-resource-based-policies-examples"></a>

若要了解 API Gateway 資源型政策的範例，請參閱[API Gateway 資源政策範例](apigateway-resource-policies-examples.md)。

## 根據 API Gateway 標籤授權
<a name="security_iam_service-with-iam-tags"></a>

您可以將標籤連接到 API Gateway 資源，或是在請求中將標籤傳遞給 API Gateway。若要根據標籤控制存取，請使用 `apigateway:ResourceTag/key-name`、`aws:RequestTag/key-name` 或 `aws:TagKeys` 條件金鑰，在原則的[條件元素](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition.html)中，提供標籤資訊。如需標記 API Gateway 資源的詳細資訊，請參閱[使用標籤來控制對 API Gateway REST API 資源的存取](apigateway-tagging-iam-policy.md)。

若要了解身分型政策範例，以根據該資源上的標籤來限制存取資源，請參閱[使用標籤來控制對 API Gateway REST API 資源的存取](apigateway-tagging-iam-policy.md)。

## API Gateway IAM 角色
<a name="security_iam_service-with-iam-roles"></a>

[IAM 角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)是您 AWS 帳戶中具有特定許可的實體。

### 搭配 API Gateway 使用暫時登入資料
<a name="security_iam_service-with-iam-roles-tempcreds"></a>

您可以搭配聯合使用暫時憑證、擔任 IAM 角色，或是擔任跨帳戶角色。您可以透過呼叫 [AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html) 或 [GetFederationToken](https://docs.aws.amazon.com/STS/latest/APIReference/API_GetFederationToken.html) 等 AWS STS API 操作來取得臨時安全登入資料。

API Gateway 支援使用臨時登入資料。

### 服務連結角色
<a name="security_iam_service-with-iam-roles-service-linked"></a>

[服務連結角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_terms-and-concepts.html#iam-term-service-linked-role)可讓 AWS 服務存取其他服務中的資源，以代表您完成 動作。服務連結角色會顯示在您的 IAM 帳戶中，並由該服務所擁有。IAM 管理員可以檢視，但不能編輯服務連結角色的許可。

API Gateway 支援服務連結角色。如需關於建立或管理 API Gateway 服務連結角色的資訊，請參閱[使用 API Gateway 的服務連結角色](using-service-linked-roles.md)。

### 服務角色
<a name="security_iam_service-with-iam-roles-service"></a>

服務可代表您擔任[服務角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_terms-and-concepts.html#iam-term-service-role)。服務角色可讓服務存取其他服務中的資源，以代表您完成動作。服務角色會出現在您的 IAM 帳戶中，並由該帳戶擁有，因此管理員可以變更此角色的許可。不過，這樣可能會破壞此服務的功能。

API Gateway 支援服務角色。

# Amazon API Gateway 身分型政策範例
<a name="security_iam_id-based-policy-examples"></a>

預設情況下，IAM 使用者和角色沒有建立或修改 API Gateway 資源的許可。他們也無法使用 AWS 管理主控台 AWS CLI或 AWS SDKs 執行任務。IAM 管理員必須建立 IAM 政策，授予使用者和角色在指定資源上執行特定 API 作業的所需許可。管理員接著必須將這些政策連接至需要這些許可的 IAM 使用者或群組。

如需有關如何建立 IAM 政策的資訊，請參閱*《IAM 使用者指南》*中[在 JSON 索引標籤上建立政策](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html#access_policies_create-json-editor)。如需有關 API Gateway 特定動作、資源和條件索引鍵的資訊，請參閱 [Amazon API Gateway Management 的動作、資源和條件索引鍵](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonapigatewaymanagement.html)和 [Amazon API Gateway Management V2 的動作、資源和條件索引鍵](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonapigatewaymanagementv2.html)。

**Topics**
+ [政策最佳實務](#security_iam_service-with-iam-policy-best-practices)
+ [允許使用者檢視他們自己的許可](#security_iam_id-based-policy-examples-view-own-permissions)
+ [簡易讀取許可](#api-gateway-policy-example-apigateway-general)
+ [僅建立 REQUEST 或 JWT 授權者](#security_iam_id-based-policy-examples-v2-import)
+ [要求停用預設 `execute-api` 端點](#security_iam_id-based-policy-examples-v2-endpoint-status)
+ [允許使用者僅建立或更新私有 REST API](#security_iam_id-based-policy-examples-private-api)
+ [要求 API 路由具有授權](#security_iam_id-based-policy-examples-require-authorization)
+ [防止使用者建立或更新 VPC 連結](#security_iam_id-based-policy-examples-deny-vpc-link)
+ [使用路由規則的範例政策](#security_iam_id-based-policy-examples-routing-mode)

## 政策最佳實務
<a name="security_iam_service-with-iam-policy-best-practices"></a>

身分型政策會判斷您帳戶中的某個人員是否可以建立、存取或刪除 API Gateway 資源。這些動作可能會讓您的 AWS 帳戶產生費用。當您建立或編輯身分型政策時，請遵循下列準則及建議事項：
+ **開始使用 AWS 受管政策並邁向最低權限許可** – 若要開始將許可授予您的使用者和工作負載，請使用將許可授予許多常見使用案例的 *AWS 受管政策*。它們可在您的 中使用 AWS 帳戶。我們建議您定義特定於使用案例 AWS 的客戶受管政策，以進一步減少許可。如需更多資訊，請參閱《*IAM 使用者指南*》中的 [AWS 受管政策](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#aws-managed-policies)或[任務職能的AWS 受管政策](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_job-functions.html)。
+ **套用最低權限許可** – 設定 IAM 政策的許可時，請僅授予執行任務所需的許可。為實現此目的，您可以定義在特定條件下可以對特定資源採取的動作，這也稱為*最低權限許可*。如需使用 IAM 套用許可的更多相關資訊，請參閱《*IAM 使用者指南*》中的 [IAM 中的政策和許可](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html)。
+ **使用 IAM 政策中的條件進一步限制存取權** – 您可以將條件新增至政策，以限制動作和資源的存取。例如，您可以撰寫政策條件，指定必須使用 SSL 傳送所有請求。如果透過特定 等使用服務動作 AWS 服務，您也可以使用條件來授予其存取權 CloudFormation。如需詳細資訊，請參閱《*IAM 使用者指南*》中的 [IAM JSON 政策元素：條件](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition.html)。
+ **使用 IAM Access Analyzer 驗證 IAM 政策，確保許可安全且可正常運作** – IAM Access Analyzer 驗證新政策和現有政策，確保這些政策遵從 IAM 政策語言 (JSON) 和 IAM 最佳實務。IAM Access Analyzer 提供 100 多項政策檢查及切實可行的建議，可協助您撰寫安全且實用的政策。如需詳細資訊，請參閱《*IAM 使用者指南*》中的[使用 IAM Access Analyzer 驗證政策](https://docs.aws.amazon.com/IAM/latest/UserGuide/access-analyzer-policy-validation.html)。
+ **需要多重要素驗證 (MFA)** – 如果您的案例需要 IAM 使用者或 中的根使用者 AWS 帳戶，請開啟 MFA 以提高安全性。如需在呼叫 API 操作時請求 MFA，請將 MFA 條件新增至您的政策。如需詳細資訊，請參閱《*IAM 使用者指南*》中的[透過 MFA 的安全 API 存取](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_mfa_configure-api-require.html)。

如需 IAM 中最佳實務的相關資訊，請參閱《*IAM 使用者指南*》中的 [IAM 安全最佳實務](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)。

## 允許使用者檢視他們自己的許可
<a name="security_iam_id-based-policy-examples-view-own-permissions"></a>

此範例會示範如何建立政策，允許 IAM 使用者檢視附加到他們使用者身分的內嵌及受管政策。此政策包含在主控台或使用 或 AWS CLI AWS API 以程式設計方式完成此動作的許可。

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "ViewOwnUserInfo",
            "Effect": "Allow",
            "Action": [
                "iam:GetUserPolicy",
                "iam:ListGroupsForUser",
                "iam:ListAttachedUserPolicies",
                "iam:ListUserPolicies",
                "iam:GetUser"
            ],
            "Resource": ["arn:aws:iam::*:user/${aws:username}"]
        },
        {
            "Sid": "NavigateInConsole",
            "Effect": "Allow",
            "Action": [
                "iam:GetGroupPolicy",
                "iam:GetPolicyVersion",
                "iam:GetPolicy",
                "iam:ListAttachedGroupPolicies",
                "iam:ListGroupPolicies",
                "iam:ListPolicyVersions",
                "iam:ListPolicies",
                "iam:ListUsers"
            ],
            "Resource": "*"
        }
    ]
}
```

## 簡易讀取許可
<a name="api-gateway-policy-example-apigateway-general"></a>

此範例政策提供使用者許可，以取得在 us-east-1 `a123456789` AWS 區域中識別符 之 HTTP 或 WebSocket API 所有資源的相關資訊。資源 `arn:aws:apigateway:us-east-1::/apis/a123456789/*` 包括 API 的所有子資源，例如授權者和部署。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "apigateway:GET"
      ],
      "Resource": [
        "arn:aws:apigateway:us-east-1::/apis/a123456789/*"
      ]
    }
  ]
}
```

------

## 僅建立 REQUEST 或 JWT 授權者
<a name="security_iam_id-based-policy-examples-v2-import"></a>

此範例政策允許使用者僅使用 `REQUEST` 或 `JWT` 授權者建立 API，包括透過[匯入](https://docs.aws.amazon.com/apigatewayv2/latest/api-reference/apis.html#ImportApi)。在政策的 `Resource` 區段中，`arn:aws:apigateway:us-east-1::/apis/??????????` 要求資源最多有 10 個字元，其中排除 API 的子資源。本範例會在 `ForAllValues` 區段中使用 `Condition`，因為使用者可以透過匯入 API 來一次建立多個授權者。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "OnlyAllowSomeAuthorizerTypes",
      "Effect": "Allow",
      "Action": [
        "apigateway:PUT",
        "apigateway:POST",
        "apigateway:PATCH"
      ],
      "Resource": [
        "arn:aws:apigateway:us-east-1::/apis",
        "arn:aws:apigateway:us-east-1::/apis/??????????",
        "arn:aws:apigateway:us-east-1::/apis/*/authorizers",
        "arn:aws:apigateway:us-east-1::/apis/*/authorizers/*"
      ],
      "Condition": {
        "ForAllValues:StringEqualsIfExists": {
          "apigateway:Request/AuthorizerType": [
            "REQUEST",
            "JWT"
          ]
        }
      }
    }
  ]
}
```

------

## 要求停用預設 `execute-api` 端點
<a name="security_iam_id-based-policy-examples-v2-endpoint-status"></a>

 此範例政策允許使用者建立、更新或匯入 API，而且要求 `DisableExecuteApiEndpoint` 為 `true`。如果 `DisableExecuteApiEndpoint` 為 `true`，則用戶端無法使用預設 `execute-api` 端點來叫用 API。

我們使用 `BoolIfExists` 條件來處理呼叫以更新沒有填入 `DisableExecuteApiEndpoint` 條件索引鍵的 API。當使用者嘗試建立或匯入 API 時，一律會填入 `DisableExecuteApiEndpoint` 條件索引鍵。

由於 `apis/*` 資源也會擷取子資源 (例如授權者或方法)，所以我們明確地將其範圍設定為僅使用 `Deny` 陳述式的 API。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "DisableExecuteApiEndpoint",
      "Effect": "Allow",
      "Action": [
        "apigateway:PATCH",
        "apigateway:POST",
        "apigateway:PUT"
      ],
      "Resource": [
        "arn:aws:apigateway:us-east-1::/apis",
        "arn:aws:apigateway:us-east-1::/apis/*"
      ],
      "Condition": {
        "BoolIfExists": {
          "apigateway:Request/DisableExecuteApiEndpoint": true
        }
      }
    },
    {
      "Sid": "ScopeDownToJustApis",
      "Effect": "Deny",
      "Action": [
        "apigateway:PATCH",
        "apigateway:POST",
        "apigateway:PUT"
      ],
      "Resource": [
        "arn:aws:apigateway:us-east-1::/apis/*/*"
      ]
    }
  ]
}
```

------

## 允許使用者僅建立或更新私有 REST API
<a name="security_iam_id-based-policy-examples-private-api"></a>

此範例政策使用條件索引鍵，要求使用者僅建立 `PRIVATE` API，並禁止可能會將 API 從 `PRIVATE` 變更為其他類型 (例如 `REGIONAL`) 的更新。

我們使用 `ForAllValues` 以要求每個新增至 API 中的 `EndpointType` 都是 `PRIVATE`。我們使用資源條件索引鍵來允許任何 API 更新，只要它是 `PRIVATE`。條件索引鍵存在時才會套用 `ForAllValues`。

我們使用非窮盡比對器 (`?`) 來明確比對 API ID，以防止允許授權者等非 API 資源。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "ScopePutToPrivateApis",
            "Effect": "Allow",
            "Action": [
                "apigateway:PUT"
            ],
            "Resource": [
                "arn:aws:apigateway:us-east-1::/restapis",
                "arn:aws:apigateway:us-east-1::/restapis/??????????"
            ],
            "Condition": {
                "ForAllValues:StringEquals": {
                    "apigateway:Resource/EndpointType": "PRIVATE"
                }
            }
        },
        {
            "Sid": "ScopeToPrivateApis",
            "Effect": "Allow",
            "Action": [
                "apigateway:DELETE",
                "apigateway:PATCH",
                "apigateway:POST"
            ],
            "Resource": [
                "arn:aws:apigateway:us-east-1::/restapis",
                "arn:aws:apigateway:us-east-1::/restapis/??????????"
            ],
            "Condition": {
                "ForAllValues:StringEquals": {
                    "apigateway:Request/EndpointType": "PRIVATE",
                    "apigateway:Resource/EndpointType": "PRIVATE"
                }
            }
        },
        {
            "Sid": "AllowResourcePolicyUpdates",
            "Effect": "Allow",
            "Action": [
                "apigateway:UpdateRestApiPolicy"
            ],
            "Resource": [
                "arn:aws:apigateway:us-east-1::/restapis/*"
            ]
        }
    ]
}
```

------

## 要求 API 路由具有授權
<a name="security_iam_id-based-policy-examples-require-authorization"></a>

如果路由沒有授權，此政策會導致嘗試建立或更新路由 (包括透過[匯入](https://docs.aws.amazon.com/apigatewayv2/latest/api-reference/apis.html#ImportApi)) 失敗。如果金鑰不存在，例如沒有建立或更新路由時，則 `ForAnyValue` 會評估為 False。我們使用 `ForAnyValue`，因為可以透過匯入建立多個路由。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "AllowUpdatesOnApisAndRoutes",
      "Effect": "Allow",
      "Action": [
        "apigateway:POST",
        "apigateway:PATCH",
        "apigateway:PUT"
      ],
      "Resource": [
        "arn:aws:apigateway:us-east-1::/apis",
        "arn:aws:apigateway:us-east-1::/apis/??????????",
        "arn:aws:apigateway:us-east-1::/apis/*/routes",
        "arn:aws:apigateway:us-east-1::/apis/*/routes/*"
      ]
    },
    {
      "Sid": "DenyUnauthorizedRoutes",
      "Effect": "Deny",
      "Action": [
        "apigateway:POST",
        "apigateway:PATCH",
        "apigateway:PUT"
      ],
      "Resource": [
        "arn:aws:apigateway:us-east-1::/apis",
        "arn:aws:apigateway:us-east-1::/apis/*"
      ],
      "Condition": {
        "ForAnyValue:StringEqualsIgnoreCase": {
          "apigateway:Request/RouteAuthorizationType": "NONE"
        }
      }
    }
  ]
}
```

------

## 防止使用者建立或更新 VPC 連結
<a name="security_iam_id-based-policy-examples-deny-vpc-link"></a>

此政策可防止使用者建立或更新 VPC 連結。VPC 連結可以公開 Amazon VPC 內的資源給 VPC 以外的用戶端。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "DenyVPCLink",
      "Effect": "Deny",
      "Action": [
        "apigateway:POST",
        "apigateway:PUT",
        "apigateway:PATCH"
      ],
      "Resource": [
        "arn:aws:apigateway:us-east-1::/vpclinks",
        "arn:aws:apigateway:us-east-1::/vpclinks/*"
      ]
    }
  ]
}
```

------

## 使用路由規則的範例政策
<a name="security_iam_id-based-policy-examples-routing-mode"></a>

下列範例政策說明如何使用 RoutingRule 條件索引鍵，來控制使用者如何將流量從其自訂網域名稱路由至其 REST API。您可以使用這些範例，為使用者可制訂的路由規則建立更精細的政策。如需詳細資訊，請參閱[將 API 階段連線至 REST API 自訂網域名稱的路由規則](rest-api-routing-rules.md)。

### 防止使用者變更自訂網域名稱路由請求的方式
<a name="security_iam_id-based-policy-examples-routing-mode-1"></a>

此政策可防止使用者建立或更新 `BasePathMapping`、`ApiMapping` 或 `RoutingRule`。這些資源全都可能會變更自訂網域名稱將請求路由至 API 的方式。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "DenyAccessBasePathMappingsApiMappingsRoutingRules",
      "Effect": "Deny",
      "Action": "apigateway:*",
      "Resource": [
        "arn:aws:apigateway:us-east-1::/domainnames/example.com/basepathmappings/*",
        "arn:aws:apigateway:us-east-1::/domainnames/example.com/apimappings/*",
        "arn:aws:apigateway:us-east-1:111122223333:/domainnames/example.com/routingrules/*"
      ]
    }
  ]
}
```

------

### 允許使用者更新特定優先順序的路由規則
<a name="security_iam_id-based-policy-examples-routing-mode-2"></a>

此政策只允許使用者將路由規則更新為 1001 到 2000 之間的優先順序。您可以使用此規則將生產規則與較低優先順序的規則分開，然後允許使用者修改較低優先順序的規則，而不會影響生產規則。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "UpdatingRoutingRulePriorityBetween1001And2000",
      "Effect": "Allow",
      "Action": "apigateway:UpdateRoutingRule",
      "Resource": "arn:aws:apigateway:us-east-1:111122223333:/domainnames/example.com/routingrules/*",
      "Condition": {
        "NumericGreaterThanEquals": {
          "apigateway:Resource/Priority": 1001,
          "apigateway:Request/Priority": 1001
        },
       "NumericLessThanEquals": {
          "apigateway:Resource/Priority": 2000,
          "apigateway:Request/Priority": 2000
        } 
      }
    }
  ]
}
```

------

### 允許使用者更新特定基本路徑值的路由規則或基本路徑映射
<a name="security_iam_id-based-policy-examples-routing-mode-3"></a>

此政策只允許使用者更新開頭為 `orders` 的任何基本路徑的基本路徑映射，或更新與開頭為 `orders` 的基本路徑相符的路由規則。在此政策中，使用者可以更新 `orders/create` 或 `orders123` 的基本路徑映射或路由規則，但不能更新 `payment/orders`。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
      {
        "Sid": "AllowUpdateRoutingRuleUnderPathOrders",
        "Effect": "Allow",
        "Action": "apigateway:UpdateRoutingRule",
        "Resource": "arn:aws:apigateway:us-east-1:111122223333:/domainnames/example.com/routingrules/*",
        "Condition": {
            "ForAllValues:StringLike": {
                "apigateway:Request/ConditionBasePaths": ["orders*"],
                "apigateway:Resource/ConditionBasePaths": ["orders*"]
            },
            "Null":{
                 "apigateway:Request/ConditionBasePaths":"false",
                 "apigateway:Resource/ConditionBasePaths":"false"             
          }
        }
      }
  ]
}
```

------

### 允許使用者將路由模式更新為特定值
<a name="security_iam_id-based-policy-examples-routing-mode-4"></a>

此政策只允許使用者將路由模式更新為 `API_MAPPING_ONLY` 和 `ROUTING_RULE_THEN_API_MAPPING`。如需路由模式的詳細資訊，請參閱 [為您的自訂網域名稱設定路由模式](set-routing-mode.md)。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
        {
           "Sid": "AllowUpdateRoutingModeToAnythingWithApiMapping",
           "Effect": "Allow",
           "Action": ["apigateway:PATCH"],
           "Resource": "arn:aws:apigateway:us-east-1::/domainnames/example.com",
              "Condition": {
               "StringLike": {
                   "apigateway:Request/RoutingMode":"*API_MAPPING*"
               }
           }
       }
    ]
}
```

------

# Amazon API Gateway 資源型政策範例
<a name="security_iam_resource-based-policy-examples"></a>

如需資源型的政策範例，請參閱[API Gateway 資源政策範例](apigateway-resource-policies-examples.md)。

# 疑難排解 Amazon API Gateway 身分和存取
<a name="security_iam_troubleshoot"></a>

請使用以下資訊來協助您診斷和修正使用 API Gateway 和 IAM 時可能遇到的常見問題。

**Topics**
+ [我未獲授權，不得在 API Gateway 中執行動作](#security_iam_troubleshoot-no-permissions)
+ [我未獲得執行 iam:PassRole 的授權](#security_iam_troubleshoot-passrole)
+ [我想要允許 AWS 帳戶外的人員存取我的 API Gateway 資源](#security_iam_troubleshoot-cross-account-access)

## 我未獲授權，不得在 API Gateway 中執行動作
<a name="security_iam_troubleshoot-no-permissions"></a>

如果您收到錯誤，告知您未獲授權執行動作，您的政策必須更新，允許您執行動作。

下列範例錯誤會在`mateojackson` IAM 使用者嘗試使用主控台檢視一個虛構 `my-example-widget` 資源的詳細資訊，但卻無虛構 `apigateway:GetWidget` 許可時發生。

```
User: arn:aws:iam::123456789012:user/mateojackson is not authorized to perform: apigateway:GetWidget on resource: my-example-widget because no identity-based policy allows the GetWidget action 
```

在此情況下，必須更新 `mateojackson` 使用者的政策，允許使用 `apigateway:GetWidget` 動作存取 `my-example-widget` 資源。

如果您需要協助，請聯絡您的 AWS 管理員。您的管理員提供您的簽署憑證。

## 我未獲得執行 iam:PassRole 的授權
<a name="security_iam_troubleshoot-passrole"></a>

如果您收到錯誤，告知您無權執行 `iam:PassRole` 動作，您的政策必須更新，允許您將角色傳遞給 API Gateway。

有些 AWS 服務 可讓您將現有角色傳遞給該服務，而不是建立新的服務角色或服務連結角色。如需執行此作業，您必須擁有將角色傳遞至該服務的許可。

當名為 `marymajor` 的 IAM 使用者嘗試使用主控台在 API Gateway 中執行動作時，發生下列範例錯誤。但是，動作請求服務具備服務角色授予的許可。Mary 沒有將角色傳遞給服務的許可。

```
User: arn:aws:iam::123456789012:user/marymajor is not authorized to perform: iam:PassRole
```

在這種情況下，Mary 的政策必須更新，允許她執行 `iam:PassRole` 動作。

如果您需要協助，請聯絡您的 AWS 管理員。您的管理員提供您的簽署憑證。

## 我想要允許 AWS 帳戶外的人員存取我的 API Gateway 資源
<a name="security_iam_troubleshoot-cross-account-access"></a>

您可以建立一個角色，讓其他帳戶中的使用者或您組織外部的人員存取您的資源。您可以指定要允許哪些信任物件取得該角色。針對支援基於資源的政策或存取控制清單 (ACL) 的服務，您可以使用那些政策來授予人員存取您的資源的許可。

若要進一步了解，請參閱以下內容：
+ 若要了解 API Gateway 是否支援這些功能，請參閱 [Amazon API Gateway 與 IAM 搭配運作的方式](security_iam_service-with-iam.md)。
+ 若要了解如何 AWS 帳戶 在您擁有的 資源之間提供存取權，請參閱《[IAM 使用者指南》中的在您擁有 AWS 帳戶 的另一個 中提供存取權給](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_common-scenarios_aws-accounts.html) *IAM* 使用者。
+ 若要了解如何將資源的存取權提供給第三方 AWS 帳戶，請參閱《*IAM 使用者指南*》中的[將存取權提供給第三方 AWS 帳戶 擁有](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_common-scenarios_third-party.html)。
+ 如需了解如何透過聯合身分提供存取權，請參閱《*IAM 使用者指南*》中的[將存取權提供給在外部進行身分驗證的使用者 (聯合身分)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_common-scenarios_federated-users.html)。
+ 如需了解使用角色和資源型政策進行跨帳戶存取之間的差異，請參閱《IAM 使用者指南》**中的 [IAM 中的跨帳戶資源存取](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies-cross-account-resource-access.html)。

# 使用 API Gateway 的服務連結角色
<a name="using-service-linked-roles"></a>

Amazon API Gateway 使用 AWS Identity and Access Management (IAM)[ 服務連結角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_terms-and-concepts.html#iam-term-service-linked-role)。服務連結角色是直接連結至 API Gateway 的一種特殊 IAM 角色類型。服務連結角色由 API Gateway 預先定義，並包含該服務代表您呼叫其他 AWS 服務所需的所有許可。

服務連結角色可讓設定 API Gateway 更為簡單，因為您不必手動新增必要的許可。API Gateway 會定義其服務連結角色的許可，除非另外定義，否則只有 API Gateway 可擔任該角色。定義的許可包括信任政策和許可政策，並且該許可政策不能附加到任何其他 IAM 實體。

您必須先刪除相關的資源，才能刪除服務連結角色。這可保護您的 API Gateway 資源，避免您不小心移除資源的存取許可。

如需有關支援服務連結角色的其他服務的資訊，請參閱[可搭配 IAM 運作的AWS 服務](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-services-that-work-with-iam.html)，並尋找 **Service-Linked Role** (服務連結角色) 欄顯示為 **Yes** (是) 的服務。選擇具有連結的 **Yes (是)**，以檢視該服務的服務連結角色文件。

## API Gateway 的服務連結角色許可
<a name="slr-permissions"></a>

API Gateway 使用名為 **AWSServiceRoleForAPIGateway** 的服務連結角色 – 允許 API Gateway 代表您存取 Elastic Load Balancing、Amazon Data Firehose 和其他服務資源。

AWSServiceRoleForAPIGateway 服務連結角色信任下列服務擔任該角色：
+ `ops.apigateway.amazonaws.com`

角色許可政策允許 API Gateway 在指定資源上完成下列動作：

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "elasticloadbalancing:AddListenerCertificates",
                "elasticloadbalancing:RemoveListenerCertificates",
                "elasticloadbalancing:ModifyListener",
                "elasticloadbalancing:DescribeListeners",
                "elasticloadbalancing:DescribeLoadBalancers",
                "xray:PutTraceSegments",
                "xray:PutTelemetryRecords",
                "xray:GetSamplingTargets",
                "xray:GetSamplingRules",
                "logs:CreateLogDelivery",
                "logs:GetLogDelivery",
                "logs:UpdateLogDelivery",
                "logs:DeleteLogDelivery",
                "logs:ListLogDeliveries",
                "servicediscovery:DiscoverInstances"
            ],
            "Resource": [
                "*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "firehose:DescribeDeliveryStream",
                "firehose:PutRecord",
                "firehose:PutRecordBatch"
            ],
            "Resource": "arn:aws:firehose:*:*:deliverystream/amazon-apigateway-*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "acm:DescribeCertificate",
                "acm:GetCertificate"
            ],
            "Resource": "arn:aws:acm:*:*:certificate/*"
        },
        {
            "Effect": "Allow",
            "Action": "ec2:CreateNetworkInterfacePermission",
            "Resource": "arn:aws:ec2:*:*:network-interface/*"
        },
        {
            "Effect": "Allow",
            "Action": "ec2:CreateTags",
            "Resource": "arn:aws:ec2:*:*:network-interface/*",
            "Condition": {
                "ForAllValues:StringEquals": {
                    "aws:TagKeys": [
                        "Owner",
                        "VpcLinkId"
                    ]
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": [
                "ec2:ModifyNetworkInterfaceAttribute",
                "ec2:DeleteNetworkInterface",
                "ec2:AssignPrivateIpAddresses",
                "ec2:CreateNetworkInterface",
                "ec2:DeleteNetworkInterfacePermission",
                "ec2:DescribeNetworkInterfaces",
                "ec2:DescribeAvailabilityZones",
                "ec2:DescribeNetworkInterfaceAttribute",
                "ec2:DescribeVpcs",
                "ec2:DescribeNetworkInterfacePermissions",
                "ec2:UnassignPrivateIpAddresses",
                "ec2:DescribeSubnets",
                "ec2:DescribeRouteTables",
                "ec2:DescribeSecurityGroups"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": "servicediscovery:GetNamespace",
            "Resource": "arn:aws:servicediscovery:*:*:namespace/*"
        },
        {
            "Effect": "Allow",
            "Action": "servicediscovery:GetService",
            "Resource": "arn:aws:servicediscovery:*:*:service/*"
        }
    ]
}
```

------

您必須設定許可，IAM 實體 (如使用者、群組或角色) 才可建立、編輯或刪除服務連結角色。如需詳細資訊，請參閱《*IAM 使用者指南*》中的[服務連結角色許可](https://docs.aws.amazon.com/IAM/latest/UserGuide/using-service-linked-roles.html#service-linked-role-permissions)。

## 建立 API Gateway 的服務連結角色
<a name="create-slr"></a>

您不需要手動建立服務連結角色，當您在 、 或 AWS API 中建立 API AWS 管理主控台、自訂網域名稱 AWS CLI或 VPC 連結時，API Gateway 會為您建立服務連結角色。

若您刪除此服務連結角色，之後需要再次建立，您可以在帳戶中使用相同程序重新建立角色。當您建立 API、自訂網域名稱或 VPC 連結時，API Gateway 會再次為您建立服務連結角色。

## 編輯 API Gateway 的服務連結角色
<a name="edit-slr"></a>

API Gateway 不允許您編輯 AWSServiceRoleForAPIGateway 服務連結角色。因為可能有各種實體會參考服務連結角色，所以您無法在建立角色之後變更其名稱。然而，您可使用 IAM 來編輯角色描述。如需詳細資訊，請參閱《*IAM 使用者指南*》中的[編輯服務連結角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/using-service-linked-roles.html#edit-service-linked-role)。

## 刪除 API Gateway 的服務連結角色
<a name="delete-slr"></a>

若您不再使用需要服務連結角色的功能或服務，我們建議您刪除該角色。如此一來，您就沒有未主動監控或維護的未使用實體。然而，在手動刪除服務連結角色之前，您必須先清除資源。

**注意**  
如果 API Gateway 服務在您試圖刪除資源時正在使用該角色，刪除可能會失敗。若此情況發生，請等待數分鐘後並再次嘗試操作。

**刪除 AWSServiceRoleForAPIGateway 所使用的 API Gateway 資源**

1. 在以下網址開啟 API Gateway 主控台：[https://console.aws.amazon.com/apigateway/](https://console.aws.amazon.com/apigateway/)。

1. 瀏覽至使用服務連結角色的 API、自訂網域名稱或 VPC 連結。

1. 使用主控台刪除資源。

1. 重複此程序，刪除使用服務連結角色的所有 API、自訂網域名稱或 VPC 連結。

**使用 IAM 手動刪除服務連結角色**

使用 IAM 主控台 AWS CLI、 或 AWS API 來刪除 AWSServiceRoleForAPIGateway 服務連結角色。如需詳細資訊，請參閱 *IAM 使用者指南*中的[刪除服務連結角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/using-service-linked-roles.html#delete-service-linked-role)。

## API Gateway 服務連結角色的支援區域
<a name="slr-regions"></a>

API Gateway 在所有提供服務的區域中支援使用服務連結的角色。如需詳細資訊，請參閱 [AWS 服務端點](https://docs.aws.amazon.com/general/latest/gr/rande.html)。

## AWS 受管政策的 API Gateway 更新
<a name="security-iam-awsmanpol-updates"></a>



檢視自此服務開始追蹤這些變更以來，API Gateway AWS 受管政策更新的詳細資訊。如需有關此頁面變更的自動提醒，請訂閱 API Gateway [文件歷程記錄](history.md)頁面上的 RSS 摘要。


| 變更 | 描述 | 日期 | 
| --- | --- | --- | 
|  已新增 `acm:GetCertificate` 支援到 `AWSServiceRoleForAPIGateway` 政策。  |  所以此 `AWSServiceRoleForAPIGateway` 政策現在包含呼叫 ACM `GetCertificate` API 動作的許可。  | 2021 年 7 月 12 日 | 
|  API Gateway 開始追蹤變更  |  API Gateway 開始追蹤其 AWS 受管政策的變更。  | 2021 年 7 月 12 日 | 

# 在 Amazon API Gateway 中進行記錄和監控
<a name="security-monitoring"></a>

監控是維護 API Gateway 及您 AWS 解決方案之可靠性、可用性和效能的重要部分。您應該從 AWS 解決方案的所有部分收集監控資料，以便在發生多點失敗時，可更輕鬆地偵錯。AWS 提供多種工具，讓您可以監控 API Gateway 資源及回應潛在的事件：

**Amazon CloudWatch Logs**  
為了協助偵錯 API 請求執行或用戶端存取相關問題，您可以啟用 CloudWatch Logs 來記錄 API 呼叫。如需更多詳細資訊，請參閱 [在 API Gateway 中設定 REST API 的 CloudWatch 記錄功能](set-up-logging.md)。

**Amazon CloudWatch 警示**  
您可以使用 CloudWatch 警示觀察單一指標一段指定的時間。如果指標超過指定的閾值，則會傳送一則通知至 Amazon Simple Notification Service 主題或 AWS Auto Scaling 政策。當指標處於特定狀態時，CloudWatch 警示不會叫用動作。必須是狀態已變更並維持了所指定的時間長度，才會呼叫動作。如需更多詳細資訊，請參閱 [使用 Amazon CloudWatch 指標監控 REST API 執行](monitoring-cloudwatch.md)。

**Firehose 的存取記錄功能**  
為了協助偵錯 API 用戶端存取相關問題，您可以啟用 Firehose 以記錄 API 呼叫。如需更多詳細資訊，請參閱 [在 API Gateway 中記錄對 Amazon Data Firehose 的 REST API 呼叫](apigateway-logging-to-kinesis.md)。

**AWS CloudTrail**  
CloudTrail 會提供由使用者、角色或 AWS 服務在 API Gateway 中採取動作的紀錄。您可以利用 CloudTrail 所收集的資訊來判斷向 API Gateway 發出的請求，以及發出請求的 IP 地址、人員、時間和其他詳細資訊。如需更多詳細資訊，請參閱 [使用 記錄 Amazon API Gateway API 呼叫 AWS CloudTrail](cloudtrail.md)。

**AWS X-Ray**  
X-Ray 是一項 AWS 服務，可收集您應用程式提供請求的資料，並使用此資料建構服務地圖，藉以辨識應用程式的問題與最佳化的機會。如需更多詳細資訊，請參閱 [AWS X-Ray 使用 API Gateway REST APIs設定](apigateway-enabling-xray.md)。

**AWS Config**  
AWS Config 提供您帳戶中 AWS 資源組態的詳細檢視。您可以了解資源如相關聯，可以取得組態變更歷程記錄，並且了解關係和組態隨時間產生的變化。您可以使用 AWS Config 來定義評估資料合規性之資源組態的規則。AWS Config 規則代表您 API Gateway 資源的理想組態設定。如果資源違反規則並標示為不合規，AWS Config 可以使用 Amazon Simple Notification Service (Amazon SNS) 主題來提醒您。如需詳細資訊，請參閱[使用 監控 API Gateway API 組態 AWS Config](apigateway-config.md)。

# 使用 記錄 Amazon API Gateway API 呼叫 AWS CloudTrail
<a name="cloudtrail"></a>

與 [AWS CloudTrail](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-user-guide.html) 整合的 Amazon API Gateway 是一項服務，可提供由使用者、角色或 AWS 服務所採取之動作的記錄。CloudTrail 會將 API Gateway 服務的所有 REST API 呼叫擷取為事件。擷取的呼叫包括來自 API Gateway 主控台的呼叫，以及對 API Gateway 服務 API 的程式碼呼叫。您可以利用 CloudTrail 收集的資訊來判斷向 API Gateway 發出的請求，以及發出請求的 IP 位址、時間和其他詳細資訊。

**注意**  
[TestInvokeAuthorizer](https://docs.aws.amazon.com/cli/latest/reference/apigateway/test-invoke-authorizer.html) 和 [TestInvokeMethod](https://docs.aws.amazon.com/cli/latest/reference/apigateway/test-invoke-method.html) 不會在 CloudTrail 中記錄。

每一筆事件或日誌專案都會包含產生請求者的資訊。身分資訊可協助您判斷下列事項：
+ 該請求是使用根使用者還是使用者憑證提出。
+ 請求是否代表 IAM Identity Center 使用者提出。
+ 提出該請求時，是否使用了特定角色或聯合身分使用者的暫時安全憑證。
+ 該請求是否由另一項 AWS 服務服務提出。

當您建立帳戶 AWS 帳戶 時CloudTrail 會在 中處於作用中狀態，而且您會自動存取 CloudTrail **事件歷史記錄**。CloudTrail **事件歷史記錄**為 AWS 區域中過去 90 天記錄的管理事件，提供可檢視、可搜尋、可下載且不可變的記錄。如需詳細資訊，請參閱「AWS CloudTrail 使用者指南」**中的[使用 CloudTrail 事件歷史記錄](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/view-cloudtrail-events.html)。檢視**事件歷史記錄**不會產生 CloudTrail 費用。

如需 AWS 帳戶 過去 90 天內持續記錄的事件，請建立線索或 [CloudTrail Lake](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-lake.html) 事件資料存放區。

**CloudTrail 追蹤**  
*線索*能讓 CloudTrail 將日誌檔案交付至 Amazon S3 儲存貯體。使用 建立的所有線索 AWS 管理主控台 都是多區域。您可以使用 AWS CLI建立單一或多區域追蹤。建議您建立多區域追蹤，因為您擷取 AWS 區域 帳戶中所有 的活動。如果您建立單一區域追蹤，您只能檢視追蹤 AWS 區域中記錄的事件。如需追蹤的詳細資訊，請參閱《AWS CloudTrail 使用者指南》**中的[為您的 AWS 帳戶建立追蹤](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-create-and-update-a-trail.html)和[為組織建立追蹤](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/creating-trail-organization.html)。  
您可以透過建立追蹤，免費將持續管理事件的一個複本從 CloudTrail 傳遞至您的 Amazon S3 儲存貯體，但這樣做會產生 Amazon S3 儲存費用。如需 CloudTrail 定價的詳細資訊，請參閱 [AWS CloudTrail 定價](https://aws.amazon.com/cloudtrail/pricing/)。如需 Amazon S3 定價的相關資訊，請參閱 [Amazon S3 定價](https://aws.amazon.com/s3/pricing/)。

**CloudTrail Lake 事件資料存放區**  
*CloudTrail Lake* 讓您能夠對事件執行 SQL 型查詢。CloudTrail Lake 會將分列式 JSON 格式的現有事件轉換為 [Apache ORC](https://orc.apache.org/) 格式。ORC 是一種單欄式儲存格式，針對快速擷取資料進行了最佳化。系統會將事件彙總到*事件資料存放區*中，事件資料存放區是事件的不可變集合，其依據為您透過套用[進階事件選取器](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-lake-concepts.html#adv-event-selectors)選取的條件。套用於事件資料存放區的選取器控制哪些事件持續存在並可供您查詢。如需 CloudTrail Lake 的詳細資訊，請參閱*AWS CloudTrail 《 使用者指南*》中的[使用 AWS CloudTrail Lake](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-lake.html)。  
CloudTrail Lake 事件資料存放區和查詢會產生費用。建立事件資料存放區時，您可以選擇要用於事件資料存放區的[定價選項](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-lake-manage-costs.html#cloudtrail-lake-manage-costs-pricing-option)。此定價選項將決定擷取和儲存事件的成本，以及事件資料存放區的預設和最長保留期。如需 CloudTrail 定價的詳細資訊，請參閱 [AWS CloudTrail 定價](https://aws.amazon.com/cloudtrail/pricing/)。

## CloudTrail 中的 API Gateway 管理事件
<a name="cloudtrail-management-events"></a>

[管理事件](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/logging-management-events-with-cloudtrail.html#logging-management-events)提供有關在 資源上執行的管理操作的資訊 AWS 帳戶。這些也稱為控制平面操作。根據預設，CloudTrail 記錄管理事件。

Amazon API Gateway 會將所有 API Gateway 動作記錄為管理事件，但 [TestInvokeAuthorizer](https://docs.aws.amazon.com/cli/latest/reference/apigateway/test-invoke-authorizer.html) 和 [TestInvokeMethod](https://docs.aws.amazon.com/cli/latest/reference/apigateway/test-invoke-method.html) 除外。如需 API Gateway 記錄到 CloudTrail 的 Amazon API Gateway 動作清單，請參閱 [Amazon API Gateway API 參考](https://docs.aws.amazon.com/apigateway/latest/api/API_Operations.html)。

## API Gateway 事件範例
<a name="cloudtrail-event-examples"></a>

一個事件代表任何來源提出的單一請求，並包含請求 API 操作的相關資訊、操作的日期和時間、請求參數等。CloudTrail 日誌檔案不是公有 API 呼叫的已排序堆疊追蹤，因此事件不會以任何特定順序顯示。

以下範例說明 API Gateway `GetResource` 動作的 CloudTrail 事件：

```
{
    Records: [
        {
            eventVersion: "1.03",
            userIdentity: {
                type: "Root",
                principalId: "AKIAI44QH8DHBEXAMPLE",
                arn: "arn:aws:iam::123456789012:root",
                accountId: "123456789012",
                accessKeyId: "AKIAIOSFODNN7EXAMPLE",
                sessionContext: {
                    attributes: {
                        mfaAuthenticated: "false",
                        creationDate: "2015-06-16T23:37:58Z"
                    }
                }
            },
            eventTime: "2015-06-17T00:47:28Z",
            eventSource: "apigateway.amazonaws.com",
            eventName: "GetResource",
            awsRegion: "us-east-1",
            sourceIPAddress: "203.0.113.11",
            userAgent: "example-user-agent-string",
            requestParameters: {
                restApiId: "3rbEXAMPLE",
                resourceId: "5tfEXAMPLE",
                template: false
            },
            responseElements: null,
            requestID: "6d9c4bfc-148a-11e5-81b6-7577cEXAMPLE",
            eventID: "4d293154-a15b-4c33-9e0a-ff5eeEXAMPLE",
            readOnly: true,
            eventType: "AwsApiCall",
            recipientAccountId: "123456789012"
        },
        ... additional entries ...
    ]
}
```

如需有關 CloudTrail 記錄內容的資訊，請參閱《AWS CloudTrail 使用者指南》**中的 [CloudTrail record contents](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-event-reference-record-contents.html)。

# 使用 監控 API Gateway API 組態 AWS Config
<a name="apigateway-config"></a>

您可以使用 [AWS Config](https://aws.amazon.com/config/)，記錄對您的 API Gateway API 資源所做的組態變更，並根據資源變更傳送通知。保留 API Gateway 資源的組態變更歷史記錄很實用，可用於解決操作問題、稽核和合規使用案例。

AWS Config 可以追蹤下列項目的變更：
+ **API 階段組態**，例如：
  + 快取叢集設定
  + 調節設定
  + 存取日誌設定
  + 階段上使用中的部署設定
+ **API 組態**，例如：
  + 端點組態
  + version
  + 通訊協定
  + tags

此外， AWS Config 規則 此功能可讓您定義組態規則，並自動偵測、追蹤和提醒這些規則的違規情況。透過追蹤這些資源組態屬性的變更，您也可以為 API Gateway 資源撰寫變更觸發的 AWS Config 規則，並根據最佳實務測試資源組態。

您可以使用 AWS Config 主控台或 在 AWS Config 帳戶中啟用 AWS CLI。選取您要追蹤變更的資源類型。如果您先前已設定 AWS Config 記錄所有資源類型，則這些 API Gateway 資源會自動記錄在您的帳戶中。支援 中的 Amazon API Gateway AWS Config 適用於所有 AWS 公有區域和 AWS GovCloud (US)。如需受支援區域的完整清單，請參閱《 AWS 一般參考》中的 [Amazon API Gateway 端點和配額](https://docs.aws.amazon.com/general/latest/gr/apigateway.html)。

**Topics**
+ [支援的資源類型](#apigateway-config-resources-rules)
+ [設定 AWS Config](#apigateway-config-setup)
+ [設定 AWS Config 記錄 API Gateway 資源](#apigateway-config-configuring)
+ [在 AWS Config 主控台中檢視 API Gateway 組態詳細資訊](#apigateway-config-console)
+ [使用 AWS Config 規則評估 API Gateway 資源](#apigateway-config-rules)

## 支援的資源類型
<a name="apigateway-config-resources-rules"></a>

下列 API Gateway 資源類型與 整合， AWS Config 並記錄在[AWS Config 支援 AWS 的資源類型和資源關係](https://docs.aws.amazon.com/config/latest/developerguide/resource-config-reference.html)中：
+ `AWS::ApiGatewayV2::Api` (WebSocket 和 HTTP API)
+ `AWS::ApiGateway::RestApi` (REST API)
+ `AWS::ApiGatewayV2::Stage` (WebSocket 和 HTTP API 階段)
+ `AWS::ApiGateway::Stage` (REST API 階段)

如需 的詳細資訊 AWS Config，請參閱 [AWS Config 開發人員指南](https://docs.aws.amazon.com/config/latest/developerguide/)。如需定價資訊，請參閱[AWS Config 定價資訊頁面](https://aws.amazon.com/config/pricing/)。

**重要**  
如果您在部署 API 之後變更任何以下 API 屬性，則*必須*[重新部署](how-to-deploy-api.md) API 以傳播變更。否則，您會在 AWS Config 主控台中看到屬性變更，但先前的屬性設定仍然有效；API 的執行時間行為將保持不變。  
**`AWS::ApiGateway::RestApi`** – `binaryMediaTypes`, `minimumCompressionSize`, `apiKeySource`
**`AWS::ApiGatewayV2::Api`** – `apiKeySelectionExpression`

## 設定 AWS Config
<a name="apigateway-config-setup"></a>

若要最初設定 AWS Config，請參閱《 [AWS Config 開發人員指南](https://docs.aws.amazon.com/config/latest/developerguide/)》中的下列主題。
+ [AWS Config 使用主控台設定](https://docs.aws.amazon.com/config/latest/developerguide/gs-console.html)
+ [AWS Config 使用 設定 AWS CLI](https://docs.aws.amazon.com/config/latest/developerguide/gs-cli.html)

## 設定 AWS Config 記錄 API Gateway 資源
<a name="apigateway-config-configuring"></a>

根據預設， 會 AWS Config 記錄環境執行所在區域中探索的所有支援區域資源類型的組態變更。您可以自訂 AWS Config ，僅記錄特定資源類型的變更，或全域資源的變更。

若要了解區域資源與全域資源，並了解如何自訂您的 AWS Config 組態，請參閱[選取哪些資源 AWS Config 記錄](https://docs.aws.amazon.com/config/latest/developerguide/select-resources.html)。

## 在 AWS Config 主控台中檢視 API Gateway 組態詳細資訊
<a name="apigateway-config-console"></a>

您可以使用 AWS Config 主控台來尋找 API Gateway 資源，並取得其組態的目前和歷史詳細資訊。以下程序顯示如何尋找 API Gateway API 的相關資訊。

**在 AWS 組態主控台中尋找 API Gateway 資源**

1. 開啟 [AWS Config 主控台](https://console.aws.amazon.com/config)。

1. 選擇 **Resources (資源)**。

1. 在 **Resource (資源)** 清單頁面上，選擇 **Resources (資源)**。

1. 開啟 **Resource type (資源類型)** 功能表，捲動到 APIGateway 或 APIGatewayV2，然後選擇一或多個 API Gateway 資源類型。

1. 選擇 **Look up** (查閱)。

1. 在 AWS Config 顯示的資源清單中選擇資源 ID。 AWS Config 會顯示組態詳細資訊，以及所選資源的其他資訊。

1. 若要查看記錄組態的完整詳細資訊，請選擇 **View Details (檢視詳細資訊)**。

若要進一步了解如何尋找資源並檢視此頁面的資訊，請參閱《 AWS Config 開發人員指南》中的[檢視 AWS 資源組態和歷史記錄](https://docs.aws.amazon.com/config/latest/developerguide/view-manage-resource.html)。

## 使用 AWS Config 規則評估 API Gateway 資源
<a name="apigateway-config-rules"></a>

您可以建立 AWS Config 規則，其代表 API Gateway 資源的理想組態設定。您可以使用預先定義的[AWS Config 受管規則](https://docs.aws.amazon.com/config/latest/developerguide/managed-rules-by-aws-config.html)，或定義自訂規則。 AWS Config 會持續追蹤資源組態的變更，以判斷這些變更是否違反規則中的任何條件。 AWS Config 主控台會顯示規則和資源的合規狀態。

如果資源違反規則並標記為不合規， AWS Config 可以使用 [Amazon Simple Notification Service 開發人員指南](https://docs.aws.amazon.com/sns/latest/dg/) (Amazon SNS) 主題提醒您。如要透過程式設計方式使用這些 AWS Config 提醒中的資料，請使用 Amazon Simple Queue Service (Amazon SQS) 佇列做為 Amazon SNS 主題的通知端點。

若要進一步了解設定及使用規則，請參閱 [AWS Config 開發人員指南](https://docs.aws.amazon.com/config/latest/developerguide/)中的[使用規則評估資源](https://docs.aws.amazon.com/config/latest/developerguide/evaluate-config.html)。

# Amazon API Gateway 的合規驗證
<a name="compliance-validation"></a>

若要了解 AWS 服務 是否在特定合規計劃範圍內，請參閱[AWS 服務 合規計劃範圍內](https://aws.amazon.com/compliance/services-in-scope/)然後選擇您感興趣的合規計劃。如需一般資訊，請參閱[AWS 合規計劃](https://aws.amazon.com/compliance/programs/)。

您可以使用 下載第三方稽核報告 AWS Artifact。如需詳細資訊，請參閱[下載報告 in AWS Artifact](https://docs.aws.amazon.com/artifact/latest/ug/downloading-documents.html)

您使用 時的合規責任 AWS 服務 取決於資料的機密性、您公司的合規目標，以及適用的法律和法規。如需使用 時合規責任的詳細資訊 AWS 服務，請參閱 [AWS 安全文件](https://docs.aws.amazon.com/security/)。

# Amazon API Gateway 中的復原功能
<a name="disaster-recovery-resiliency"></a>

AWS 全球基礎設施是以 AWS 區域與可用區域為中心建置的。AWS區域提供多個分開且隔離的實際可用區域，並以低延遲、高輸送量和高度備援聯網功能相互連結。透過可用區域，您可以設計與操作的應用程式和資料庫，在可用區域之間自動容錯移轉而不會發生中斷。可用區域的可用性、容錯能力和擴展能力，均較單一或多個資料中心的傳統基礎設施還高。

API Gateway 屬於全受管區域服務，會在每個區域的多個可用區域中運作，並利用可用區域的備援將基礎設施故障率以最大幅度降低成一種可用性風險類別。API Gateway 旨在自動從可用區域的故障中復原。

如需 AWS 區域與可用區域的相關資訊，請參閱 [AWS 全球基礎設施](https://aws.amazon.com/about-aws/global-infrastructure/)。

為了防止您的 API 被太多的請求淹沒，API Gateway 會調節向您 API 提出的請求。具體而言，API Gateway 會對您帳戶中所有 API 的穩定狀態速率和請求提交爆增次數配置限制。您可以為您的 API 設定自訂調節。如需詳細資訊，請參閱 [調節對 REST API 的請求，以提高 API Gateway 的輸送量](api-gateway-request-throttling.md)。

您可以使用 Route 53 運作狀態檢查，控制從主要區域的 API Gateway API 到次要區域的 API Gateway API 的 DNS 備援。如需範例，請參閱[為 API Gateway API 設定 DNS 備援的自訂運作狀態檢查](dns-failover.md)。

# Amazon API Gateway 的基礎設施安全性
<a name="infrastructure-security"></a>

Amazon API Gateway 是受管服務，受到 AWS 全球網路安全的保護。如需 AWS 安全服務以及如何 AWS 保護基礎設施的資訊，請參閱[AWS 雲端安全](https://aws.amazon.com/security/)。若要使用基礎設施安全的最佳實務來設計您的 AWS 環境，請參閱*安全支柱 AWS Well-Architected Framework* 中的[基礎設施保護](https://docs.aws.amazon.com/wellarchitected/latest/security-pillar/infrastructure-protection.html)。

您可以使用 AWS 發佈的 API 呼叫，透過網路存取 API Gateway。使用者端必須支援下列專案：
+ Transport Layer Security (TLS)。我們需要 TLS 1.2 並建議使用 TLS 1.3。
+ 具備完美轉送私密(PFS)的密碼套件，例如 DHE (Ephemeral Diffie-Hellman)或 ECDHE (Elliptic Curve Ephemeral Diffie-Hellman)。現代系統(如 Java 7 和更新版本)大多會支援這些模式。

您可從任何網路位置呼叫這些 API 操作，而 API Gateway 確實可支援資源型存取政策，以供納入依來源 IP 地址為主的限制。您也可以使用資源型政策來控制從特定 Amazon Virtual Private Cloud (Amazon VPC) 的端點或特定 VPC 的存取。實際上，這只會隔離網路中特定 VPC 對指定 API Gateway 資源 AWS 的網路存取。

# Amazon API Gateway 的漏洞分析
<a name="vulnerability-analysis"></a>

組態和 IT 控制是 AWS 與身為我們客戶的您共同的責任。如需詳細資訊，請參閱 AWS [共同的責任模型](https://aws.amazon.com/compliance/shared-responsibility-model/)。

# Amazon API Gateway 的安全最佳實務
<a name="security-best-practices"></a>

在您開發和實作自己的安全政策時，可考慮使用 API Gateway 提供的多種安全功能。以下最佳實務為一般準則，並不代表完整的安全解決方案。這些最佳實務可能不適用或無法滿足您的環境需求，因此請將其視為實用建議就好，而不要當作是指示。

**實作最低權限存取**  
使用 IAM 政策來實作建立、讀取、更新或刪除 API Gateway API 的最低權限存取。如需進一步了解，請參閱[適用於 Amazon API Gateway 的 Identity and Access Management](security-iam.md)。API Gateway 提供數個選項來控制對您所建立 API 的存取。如需進一步了解，請參閱[在 API Gateway 中控制和管理對 REST API 的存取](apigateway-control-access-to-api.md)、[在 API Gateway 中控制和管理對 WebSocket API 的存取](apigateway-websocket-api-control-access.md)和[使用 API Gateway 中的 JWT 授權方來控制對 HTTP API 的存取](http-api-jwt-authorizer.md)。

**實作記錄**  
使用 CloudWatch Logs 或 Amazon Data Firehose 將請求記錄到您的 API。如需進一步了解，請參閱[在 API Gateway 中監控 REST API](rest-api-monitor.md)、[在 API Gateway 中設定 WebSocket API 的記錄](websocket-api-logging.md)和[在 API Gateway 中設定 HTTP API 的日誌](http-api-logging.md)。

**實作 Amazon CloudWatch 警示**  
您可以使用 CloudWatch 警示觀察單一指標一段指定的時間。如果指標超過指定的閾值，則會將通知傳送至 Amazon Simple Notification Service 主題或 AWS Auto Scaling 政策。當指標處於特定狀態時，CloudWatch 警示不會叫用動作。必須是狀態已變更並維持了所指定的時間長度，才會呼叫動作。如需詳細資訊，請參閱[使用 Amazon CloudWatch 指標監控 REST API 執行](monitoring-cloudwatch.md)。

**啟用 AWS CloudTrail**  
CloudTrail 提供由使用者、角色或 API Gateway 中的 AWS 服務所採取之動作的記錄。您可以利用 CloudTrail 所收集的資訊來判斷向 API Gateway 發出的請求，以及發出請求的 IP 地址、人員、時間和其他詳細資訊。如需詳細資訊，請參閱[使用 記錄 Amazon API Gateway API 呼叫 AWS CloudTrail](cloudtrail.md)。

**啟用 AWS Config**  
AWS Config 提供帳戶中 AWS 資源組態的詳細檢視。您可以了解資源如相關聯，可以取得組態變更歷程記錄，並且了解關係和組態隨時間產生的變化。您可以使用 AWS Config 來定義評估資源組態以進行資料合規的規則。 AWS Config 規則代表 API Gateway 資源的理想組態設定。如果資源違反規則並標記為不合規， AWS Config 可以使用 Amazon Simple Notification Service (Amazon SNS) 主題提醒您。如需詳細資訊，請參閱[使用 監控 API Gateway API 組態 AWS Config](apigateway-config.md)。

**使用 AWS Security Hub CSPM**  
透過使用 [AWS Security Hub CSPM](https://docs.aws.amazon.com/securityhub/latest/userguide/what-is-securityhub.html) 監視您 API Gateway 的使用狀況，因為它關係到安全最佳實務。Security Hub CSPM 使用*安全控制*來評估資源組態和*安全標準*，以協助您符合各種合規架構。如需使用 Security Hub CSPM 評估 API Gateway 資源的詳細資訊，請參閱*AWS Security Hub 《 使用者指南*》中的 [Amazon API Gateway 控制項](https://docs.aws.amazon.com/securityhub/latest/userguide/apigateway-controls.html)。