

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

# AWS 強制執行程式碼邏輯如何評估允許或拒絕存取的請求
<a name="reference_policies_evaluation-logic_policy-eval-denyallow"></a>

 AWS 強制執行程式碼會決定是否 AWS 應該允許或拒絕傳送至 的請求。 會 AWS 評估適用於請求內容的所有政策。以下是 AWS 政策評估邏輯的摘要。
+ 根據預設，所有的要求會一律拒絕 ( AWS 帳戶根使用者提出的要求例外，該使用者具有完整存取權)。
+ 允許以下評估邏輯後，請求必須得到某個政策或一組政策的明確允許。
+ 明確拒絕會覆寫明確允許。

政策評估可能會因請求是在單一帳戶內還是跨帳戶而有所不同。如需有關如何為單一帳戶內的 IAM 角色或使用者作出政策評估決策的詳細資訊，請參閱[單一帳戶中請求的政策評估](reference_policies_evaluation-logic_policy-eval-basics.md)。如需有關如何針對跨帳戶請求作出政策評估決策的詳細資訊，請參閱[跨帳戶政策評估邏輯](reference_policies_evaluation-logic-cross-account.md)。
+ **拒絕評估** – 根據預設，所有的請求一律拒絕。這稱為[隱含拒絕](reference_policies_evaluation-logic_AccessPolicyLanguage_Interplay.md)。 AWS 強制執行程式碼會評估帳戶內套用至請求的所有政策。這些包括 AWS Organizations SCPs和 RCPs、資源型政策、身分型政策、IAM 許可界限和工作階段政策。在所有這些政策中，強制執行程式碼會尋找套用到請求的 `Deny` 陳述式。此稱為[明確拒絕](reference_policies_evaluation-logic_AccessPolicyLanguage_Interplay.md)。如果強制執行程式碼找到一個適用的明確拒絕，則強制執行程式碼會傳回**拒絕**這一最後決定。如果沒有明確拒絕，該強制執行程式碼評估會持續執行。
+ **AWS Organizations RCPs** – 強制執行程式碼會評估套用至請求 AWS Organizations 的資源控制政策 (RCPs)。RCP 適用於 RCP 所連接的帳戶資源。如果強制執行程式碼在 RCP 中找不到任何適用的 `Allow` 陳述式，則強制執行程式碼會傳回**拒絕**這一最終決定。請注意，啟用 RCP 時，會自動建立名為 AWS 的 `RCPFullAWSAccess` 受管政策並連接到組織中的每個實體，包括根實體、每個 OU 以及 AWS 帳戶 。`RCPFullAWSAccess` 無法分離，因此始終會有 `Allow` 陳述式。如果 RCP 不存在，或 RCP 允許請求的動作，強制執行程式碼評估就會繼續執行。
+ **AWS Organizations SCPs** – 強制執行程式碼會評估套用至請求 AWS Organizations 的服務控制政策 (SCPs)。SCP 會套用至連接 SCP 的帳戶之主體。如果強制執行程式碼在 SCP 中找不到任何適用的 `Allow` 陳述式，則強制執行程式碼會傳回**拒絕**這一最終決定。如果 SCP 不存在，或是 SCP 允許請求動作，強制執行程式碼評估就會繼續執行。
+ **資源型政策** – 在同一帳戶內，資源型政策會根據存取資源的主體類型以及資源型政策中允許的主體，以不同的方式影響政策評估。根據主體類型，資源型政策中的 `Allow` 可能會導致 `Allow` 的最終決定，即使身分型識別政策、許可界限或工作階段政策中有隱含拒絕。

  針對大部分資源，您只需要在身分型政策或資源型政策中對主體提供明確 `Allow`，即可授予存取權。[IAM 角色信任政策](access_policies-cross-account-resource-access.md#access_policies-cross-account-delegating-resource-based-policies)和 [KMS 金鑰政策](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html)是此邏輯的例外，因為這些政策必須明確允許存取[主體](reference_policies_elements_principal.md)。對於 IAM 和 AWS KMS 以外的服務，資源型政策可能也需要在同一帳戶內具有明確的 `Allow` 陳述式才能授予存取權。如需詳細資訊，請參閱適用於您所使用之特定服務的文件。

  對於單一帳戶政策評估請求，如果指定的主體是 IAM 使用者、IAM 角色或工作階段主體，資源型政策邏輯會與其他政策類型有所不同。工作階段主體包括 [IAM 角色工作階段](reference_policies_elements_principal.md#principal-role-session)或 [AWS STS 聯合身分使用者主體](reference_policies_elements_principal.md#sts-session-principals)。如果資源型政策直接將許可授予 IAM 使用者或提出要求的工作階段主體，則身分識別型政策、許可界限或工作階段政策中的隱含拒絕不會影響最終決定。
  + **IAM 角色** – 將許可授予 IAM 角色 ARN 的資源型政策受限於許可界限或工作階段政策中隱含拒絕的限制。您可以在主體元素或 `aws:PrincipalArn` 條件索引鍵中指定角色 ARN。在這兩種情況下，發出請求的主體是 **IAM 角色工作階段**。

    許可界限和工作階段政策不會限制在主體元素中使用 `aws:PrincipalArn` 條件索引鍵與萬用字元 (\*) 所授予的許可，除非身分型政策包含明確拒絕。如需詳細資訊，請參閱[IAM 角色主體](reference_policies_elements_principal.md#principal-roles)。

    **角色 ARN 範例**

    ```
    arn:aws:iam::111122223333:role/examplerole
    ```
  + **IAM 角色工作階段** – 在同一帳戶內，將許可授予 IAM 角色工作階段 ARN 的資源型政策直接授予許可給擔任的角色工作階段。直接授予工作階段的許可不會受到身分識別型政策、許可界限或工作階段政策中隱含拒絕的限制。當您擔任角色並提出要求時，提出要求的主體是 IAM 角色工作階段 ARN，而不是角色本身的 ARN。如需詳細資訊，請參閱[角色工作階段主體](reference_policies_elements_principal.md#principal-role-session)。

    **角色工作階段 ARN 範例**

    ```
    arn:aws:sts::111122223333:assumed-role/examplerole/examplerolesessionname
    ```
  + **IAM 使用者** – 在同一帳戶內，將許可授予 IAM 使用者 ARN (非聯合身分使用者工作階段) 的資源型政策不受身分識別型政策或許可界限中隱含拒絕的限制。

    **IAM 使用者 ARN 範例**

    ```
    arn:aws:iam::111122223333:user/exampleuser
    ```
  + **AWS STS 聯合身分使用者主體** – 聯合身分使用者工作階段是透過呼叫 建立的工作階段[`GetFederationToken`](id_credentials_temp_request.md#api_getfederationtoken)。當聯合身分使用者提出要求時，提出要求的主體是聯合身分使用者 ARN，而不是聯合身分 IAM 使用者的 ARN。在相同的帳戶中，授予許可給聯合身分使用者 ARN 的資源型政策會直接將許可授予工作階段。直接授予工作階段的許可不會受到身分識別型政策、許可界限或工作階段政策中隱含拒絕的限制。

    但是，如果資源型政策向聯合身分 IAM 使用者 ARN 授予許可，則聯合身分使用者在工作階段期間提出的要求會受到許可界限或工作階段政策中隱含拒絕的限制。

    **聯合身分使用者工作階段 ARN 範例**

    ```
    arn:aws:sts::111122223333:federated-user/exampleuser
    ```
+ **身分型政策**：強制執行程式碼會檢查主體的身分型政策。若為 IAM 使用者，這些政策會包含使用者政策，以及使用者所屬群組的政策。如果沒有任何身分型政策或其中的任何陳述式允許請求的動作，則表示請求已遭隱含拒絕，且強制執行程式碼會傳回**拒絕**這一最終決定。如果任何適用的身分型政策中有任一陳述式允許請求的動作，則程式碼評估會繼續執行。
+ **IAM 許可界限**：強制執行程式碼會檢查主體所使用的 IAM 實體是否有許可界限。如果用來設定許可界限的政策不允許該請求動作，則表示請求已遭隱含拒絕。強制執行程式碼傳回**拒絕**的最後決定。如果許可界限不存在，或是許可界限允許請求的動作，程式碼評估就會繼續執行。
+ **工作階段政策**：強制執行程式碼會檢查主體是否為工作階段主體。工作階段主體包括 IAM 角色工作階段或 AWS STS 聯合身分使用者工作階段。如果主體不是工作階段主體，則強制執行程式碼會傳回**允許**的最終決定。

  對於工作階段主體，強制執行程式碼會檢查工作階段政策是否已在請求中傳遞。您可以在使用 AWS CLI 或 AWS API 取得角色或 AWS STS 聯合身分使用者主體的臨時登入資料時，傳遞工作階段政策。如果未傳遞工作階段政策，則會建立預設工作階段政策，且強制執行程式碼會傳回**允許**這一最終決定。
  + 如果工作階段政策存在，且不允許該要求動作，則表示要求已遭隱含拒絕。強制執行程式碼傳回**拒絕**的最後決定。
  + 強制執行程式碼會檢查主體是否為角色工作階段。如果主體是角色工作階段，則請求將為**已允許**。否則，會隱含拒絕請求，強制執行程式碼會傳回**拒絕**這一最終決定。
  + 如果有工作階段政策，且政策允許該要求動作，則強制執行程式碼會傳回**允許**的最終決定。