

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

# IAM 實體的許可界限
<a name="access_policies_boundaries"></a>

AWS 支援 IAM 實體 （使用者或角色） 的*許可界限*。許可界限是一種進階功能，可供您使用受管政策來設定以身分為基礎的政策可以授予 IAM 實體的最大許可。實體的許可界限可讓其只執行由身分類型政策和其許可界限同時允許的動作。

如需有關政策類型的詳細資訊，請參閱 [政策類型](access_policies.md#access_policy-types)。

**重要**  
對於已附加許可界限政策的 IAM 使用者或角色，請勿使用所含 `NotPrincipal` 政策元素具有 `Deny` 效果的資源型政策陳述式。無論在 `NotPrincipal` 元素中指定何值，具有 `Deny` 效果的 `NotPrincipal` 元素將始終拒絕任何已附加許可界限政策的 IAM 主體。這會造成部分本可存取資源的 IAM 使用者或角色失去存取權。我們建議您變更資源型政策陳述式，將條件運算子 [`ArnNotEquals`](reference_policies_elements_condition_operators.md#Conditions_ARN) 與 [`aws:PrincipalArn`](reference_policies_condition-keys.md#condition-keys-principalarn) 內容索引鍵搭配使用來限制存取，而不是使用 `NotPrincipal` 元素。如需有關 `NotPrincipal` 元素的資訊，請參閱 [AWS JSON 政策元素： NotPrincipal](reference_policies_elements_notprincipal.md)。

您可以使用 AWS 受管政策或客戶受管政策來設定 IAM 實體 （使用者或角色） 的界限。該政策限制使用者或角色的許可上限。

例如，假設名為 `Shirley` 的 IAM 使用者應允許僅管理 Amazon S3、Amazon CloudWatch 和 Amazon EC2。為了強行實施這個規則，您可以使用以下政策設定 `Shirley` 使用者的許可界限：

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:*",
                "cloudwatch:*",
                "ec2:*"
            ],
            "Resource": "*"
        }
    ]
}
```

------

當您使用政策來設定使用者的許可界限時，它會限制使用者的許可，但不自行提供許可。在這個範例中，該政策會將 `Shirley` 的最大許可設為 Amazon S3、CloudWatch 和 Amazon EC2 中的所有操作。Shirley 永遠無法在其他任何服務中執行操作，包括 IAM，即使許可政策允許她這麼做。例如，您可以將以下政策加入到 `Shirley` 使用者：

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": {
    "Effect": "Allow",
    "Action": "iam:CreateUser",
    "Resource": "*"
  }
}
```

------

這項政策允許在 IAM 中建立使用者。如果您將此許可政策連接到 `Shirley` 使用者，當 Shirley 嘗試建立使用者時，操作會失敗。失敗的原因是許可界限不允許 `iam:CreateUser` 操作。因為這兩項政策，Shirley 沒有許可在 AWS中執行任何操作。您必須新增不同的許可政策，才能允許其他服務 (例如 Amazon S3) 中的動作。或者，您可以更新許可界限，允許她在 IAM 中建立使用者。

## 評估含界限的有效許可
<a name="access_policies_boundaries-eval-logic"></a>

IAM 實體 (使用者或角色) 的許可界限會設定該實體可以擁有的最大許可。這可能改變該使用者或角色的有效許可。實體的有效許可，是指會影響使用者或角色的所有政策所授予的許可。在帳戶範圍內，以身分為基礎的政策、以資源為基礎的政策、許可界限、 AWS Organizations SCP 或工作階段政策，都可能會影響到實體的許可。如需有關不同政策類型的詳細資訊，請參閱 [中的政策和許可 AWS Identity and Access Management](access_policies.md)。

如果其中任何一種政策會明確拒絕存取操作，則請求將會遭拒。經由多種許可類型授予的許可將更為複雜。如需 如何 AWS 評估政策的詳細資訊，請參閱 [政策評估邏輯](reference_policies_evaluation-logic.md)。

**包含界限的以身分為基礎政策** – 以身分為基礎的政策可分為會連接至使用者、使用者群組或角色的內嵌或受管政策。以身分為基礎的政策可為實體授予許可，而許可界限會限制這些許可。有效的許可是兩種政策類型的交集。在這些政策的明確拒絕會覆寫允許。

![\[評估以身分為基礎的政策及許可界限\]](http://docs.aws.amazon.com/zh_tw/IAM/latest/UserGuide/images/permissions_boundary.png)


**以資源為基礎的政策** – 以資源為基礎的政策會控制指定主體如何存取資源，即政策連接至其中的資源。

*適用於 IAM 使用者的資源型政策*  
在同一帳戶中，授予許可給 IAM 使用者 ARN （非 AWS STS 聯合身分使用者主體工作階段） 的資源型政策不受身分型政策或許可界限中的隱含拒絕的限制。  

![\[評估以資源為基礎的政策、許可界限和以身分為基礎的政策\]](http://docs.aws.amazon.com/zh_tw/IAM/latest/UserGuide/images/EffectivePermissions-rbp-boundary-id.png)


*適用於 IAM 角色的資源型政策*  
**IAM 角色** – 將許可授予 IAM 角色 ARN 的資源型政策受限於許可界限或工作階段政策中隱含拒絕的限制。  
**IAM 角色工作階段** – 在同一帳戶內，將許可授予 IAM 角色工作階段 ARN 的資源型政策會直接授予許可給擔任角色工作階段。直接授予工作階段的許可不會受到身分識別型政策、許可界限或工作階段政策中隱含拒絕的限制。當您擔任角色並提出要求時，提出要求的主體是 IAM 角色工作階段 ARN，而不是角色本身的 ARN。

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

**AWS Organizations SCPs** – SCPs會套用至整個 AWS 帳戶。它們會限制由該帳戶內主體所提出各個請求的許可。IAM 實體 (使用者或角色) 可以提出一個要求，而這個要求會受到 SCP、許可邊界及身分類型政策的影響。在這種情況下，只有當所有三種政策類型允許時才允許該要求。有效許可是所有三種政策類型的交集。所有這類政策中的明確拒絕都會覆寫該允許。

![\[SCP 評估、許可界限及以身分為基礎的政策\]](http://docs.aws.amazon.com/zh_tw/IAM/latest/UserGuide/images/EffectivePermissions-scp-boundary-id.png)


您可以了解[您的帳戶是否為 AWS Organizations中組織的成員](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_org_details.html#orgs_view_account)。組織成員可能會受到 SCP 影響。若要使用 AWS CLI 命令或 AWS API 操作檢視此資料，您必須擁有 AWS Organizations 實體 `organizations:DescribeOrganization`動作的許可。您必須擁有其他許可，才能在 AWS Organizations 主控台中執行 操作。若要了解 SCP 是否拒絕存取特定請求，或變更您的有效許可，請聯絡您的 AWS Organizations 管理員。

**工作階段政策** – 工作階段政策是一種進階政策，您可以在透過編寫程式的方式建立角色或聯合身分使用者的暫時工作階段時，做為參數傳遞。工作階段的許可，該工作階段的來源是建立該工作階段時所使用的 IAM 實體 (使用者或角色) 或工作階段政策。實體的以身分為基礎的政策，會受到工作階段政策及許可界限所限制。這組政策類型的有效許可是所有三種政策類型的交集。所有這類政策中的明確拒絕都會覆寫該允許。如需有關工作階段政策的詳細資訊，請參閱[工作階段政策](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session)。

![\[評估工作階段政策、許可界限和以身分為基礎的政策\]](http://docs.aws.amazon.com/zh_tw/IAM/latest/UserGuide/images/EffectivePermissions-session-boundary-id.png)


## 使用許可界限委派責任給他人
<a name="access_policies_boundaries-delegate"></a>

您可以使用許可界限來委派許可管理任務 (像是使用者建立) 給您的帳戶中的 IAM 使用者。這允許其他人在特定許可界限內代替您執行任務。

例如，假設 María 是 X-Company 的管理員 AWS 帳戶。她想要委派使用者建立責任給 Zhang。不過，她必須確保 Zhang 建立的使用者遵守下列公司規則：
+ 使用者不能使用 IAM 建立或管理使用者、群組、角色或政策。
+ 使用者被拒絕存取 Amazon S3 `logs` 儲存貯體，且無法存取 `i-1234567890abcdef0` Amazon EC2 執行個體。
+ 使用者無法移除自己的界限政策。

為了強制執行這些規則，María 完成以下任務，其包含以下詳細資訊：

1. María 建立 `XCompanyBoundaries` 受管政策以針對帳戶中所有的新的使用者，當成許可界限使用。

1. María 建立 `DelegatedUserBoundary` 受管政策，並將其指派為 Zhang 的許可界限。Maria 記下其管理員 使用者的 ARN，並在防止 Zhang 存取的政策中使用此 ARN。

1. María 建立 `DelegatedUserPermissions` 受管政策，並將其連接為 Zhang 的許可政策。

1. María 告訴 Zhang 有關他的新責任和限制。

**任務 1：**María 必須先建立受管政策來定義新使用者的界限。María 將允許 Zhang 提供使用者所需的許可政策，但她希望這些使用者受到限制。為了執行此操作，她建立以下客戶受管政策，名稱為 `XCompanyBoundaries`。此政策會執行下列動作：
+ 可讓使用者完整存取數個服務
+ 允許在 IAM 主控台中限制自行管理存取。這表示他們可以在登入主控台之後變更密碼。也無法設定其初始密碼。若要允許此操作，請將 `"*LoginProfile"` 動作加入 `AllowManageOwnPasswordAndAccessKeys` 陳述式。
+ 拒絕對 Amazon S3 日誌儲存貯體或 `i-1234567890abcdef0` Amazon EC2 執行個體的存取權限

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "ServiceBoundaries",
            "Effect": "Allow",
            "Action": [
                "s3:*",
                "cloudwatch:*",
                "ec2:*",
                "dynamodb:*"
            ],
            "Resource": "*"
        },
        {
            "Sid": "AllowIAMConsoleForCredentials",
            "Effect": "Allow",
            "Action": [
                "iam:ListUsers",
                "iam:GetAccountPasswordPolicy"
            ],
            "Resource": "*"
        },
        {
            "Sid": "AllowManageOwnPasswordAndAccessKeys",
            "Effect": "Allow",
            "Action": [
                "iam:*AccessKey*",
                "iam:ChangePassword",
                "iam:GetUser",
                "iam:*ServiceSpecificCredential*",
                "iam:*SigningCertificate*"
            ],
            "Resource": ["arn:aws:iam::*:user/${aws:username}"]
        },
        {
            "Sid": "DenyS3Logs",
            "Effect": "Deny",
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::logs",
                "arn:aws:s3:::logs/*"
            ]
        },
        {
            "Sid": "DenyEC2Production",
            "Effect": "Deny",
            "Action": "ec2:*",
            "Resource": "arn:aws:ec2:*:*:instance/i-1234567890abcdef0"
        }
    ]
}
```

------

每個陳述式提供不同的用途：

1. 此政策的 `ServiceBoundaries`陳述式允許完整存取指定的 AWS 服務。這表示新使用者在這些服務的動作，僅受限於連接到使用者的許可政策。

1. `AllowIAMConsoleForCredentials` 陳述式允許列出所有 IAM 使用者的存取權。這個存取權是導覽 AWS 管理主控台中 **Users (使用者)** 頁面的必要條件。它也允許檢視帳戶的密碼要求，而這是變更您自身密碼時的必要程序。

1. `AllowManageOwnPasswordAndAccessKeys` 陳述式允許使用者僅管理自己的主控台密碼和程式設計存取金鑰。如果 Zhang 或另一個管理員為新使用者指派包含完整 IAM 存取的許可政策，這就顯得非常重要。在這種情況下，該使用者可能會變更自己的或其他使用者的許可。此陳述式可避免此種情況發生。

1. `DenyS3Logs` 陳述式明確拒絕存取 `logs` 儲存貯體。

1. `DenyEC2Production` 陳述式明確拒絕存取 `i-1234567890abcdef0` 執行個體。

** 任務 2：**María 想要允許 Zhang 建立所有 X-Company 使用者，但只允許 `XCompanyBoundaries` 許可界限。她建立以下客戶受管政策，名稱為 `DelegatedUserBoundary`。此政策定義 Zhang 可以擁有的許可上限。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "CreateOrChangeOnlyWithBoundary",
            "Effect": "Allow",
            "Action": [
                "iam:AttachUserPolicy",
                "iam:CreateUser",
                "iam:DeleteUserPolicy",
                "iam:DetachUserPolicy",
                "iam:PutUserPermissionsBoundary",
                "iam:PutUserPolicy"
            ],
            "Resource": "*",
            "Condition": {
               "StringEquals": {
                 "iam:PermissionsBoundary": "arn:aws:iam::123456789012:policy/XCompanyBoundaries"
                }
            }
        },
        {
            "Sid": "CloudWatchAndOtherIAMTasks",
            "Effect": "Allow",
            "Action": [
              "cloudwatch:*",
              "iam:CreateAccessKey",
              "iam:CreateGroup",
              "iam:CreateLoginProfile",
              "iam:CreatePolicy",
              "iam:DeleteGroup",
              "iam:DeletePolicy",
              "iam:DeletePolicyVersion",
              "iam:DeleteUser",
              "iam:GetAccountPasswordPolicy",
              "iam:GetGroup",
              "iam:GetLoginProfile",
              "iam:GetPolicy",
              "iam:GetPolicyVersion",
              "iam:GetRolePolicy",
              "iam:GetUser",
              "iam:GetUserPolicy",
              "iam:ListAccessKeys",
              "iam:ListAttachedRolePolicies",
              "iam:ListAttachedUserPolicies",
              "iam:ListEntitiesForPolicy",
              "iam:ListGroups",
              "iam:ListGroupsForUser",
              "iam:ListMFADevices",
              "iam:ListPolicies",
              "iam:ListPolicyVersions",
              "iam:ListRolePolicies",
              "iam:ListSSHPublicKeys",
              "iam:ListServiceSpecificCredentials",
              "iam:ListSigningCertificates",
              "iam:ListUserPolicies",
              "iam:ListUsers",
              "iam:SetDefaultPolicyVersion",
              "iam:SimulateCustomPolicy",
              "iam:SimulatePrincipalPolicy",
              "iam:UpdateGroup",
              "iam:UpdateLoginProfile",
              "iam:UpdateUser"
            ],
            "NotResource": "arn:aws:iam::123456789012:user/Maria"
        },
        {
            "Sid": "NoBoundaryPolicyEdit",
            "Effect": "Deny",
            "Action": [
                "iam:CreatePolicyVersion",
                "iam:DeletePolicy",
                "iam:DeletePolicyVersion",
                "iam:SetDefaultPolicyVersion"
            ],
            "Resource": [
                "arn:aws:iam::123456789012:policy/XCompanyBoundaries",
                "arn:aws:iam::123456789012:policy/DelegatedUserBoundary"
            ]
        },
        {
            "Sid": "NoBoundaryUserDelete",
            "Effect": "Deny",
            "Action": "iam:DeleteUserPermissionsBoundary",
            "Resource": "*"
        }
    ]
}
```

------

每個陳述式提供不同的用途：

1. `CreateOrChangeOnlyWithBoundary` 陳述式允許 Zhang 建立 IAM 使用者，但前提是他須使用 `XCompanyBoundaries` 政策來設定許可界限。此陳述式也可讓他為現有的使用者設定許可界限，但只能使用該相同政策。最後，此陳述式讓 Zhang 管理具此許可界限設定之使用者的許可政策。

1. `CloudWatchAndOtherIAMTasks` 陳述式允許 Zhang 完成其他使用者、群組和政策管理任務。其有權重設密碼，並為 `NotResource` 政策元素中未列出的任何 IAM 使用者建立存取金鑰。這可讓 Zhang 協助使用者解決登入問題。

1. `NoBoundaryPolicyEdit` 陳述式拒絕 Zhang 存取更新 `XCompanyBoundaries` 政策。他不被允許變更任何用於設定他自己或其他使用者的許可界限的政策。

1. `NoBoundaryUserDelete` 陳述式拒絕讓 Zhang 存取刪除他自己或其他使用者的許可界限。

然後，María 針對 `Zhang` 使用者將 `DelegatedUserBoundary` 政策[分派許可界限](id_users_change-permissions.md#users_change_permissions-set-boundary-console)。

**任務 3：**由於許可界限限制許可上限，但不自行授予存取權，因此 Maria 必須為 Zhang 建立許可政策。她建立以下政策，名稱為 `DelegatedUserPermissions`。此政策定義在已定義的界限內，Zhang 可以執行的操作。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "IAM",
            "Effect": "Allow",
            "Action": "iam:*",
            "Resource": "*"
        },
        {
            "Sid": "CloudWatchLimited",
            "Effect": "Allow",
            "Action": [
                "cloudwatch:GetDashboard",
                "cloudwatch:GetMetricData",
                "cloudwatch:ListDashboards",
                "cloudwatch:GetMetricStatistics",
                "cloudwatch:ListMetrics"
            ],
            "Resource": "*"
        },
        {
            "Sid": "S3BucketContents",
            "Effect": "Allow",
            "Action": "s3:ListBucket",
            "Resource": "arn:aws:s3:::ZhangBucket"
        }
    ]
}
```

------

每個陳述式提供不同的用途：

1. 此政策的 `IAM` 陳述式允許 Zhang 完整存取 IAM。不過，由於他的許可界限僅允許部分的 IAM 操作，他的有效 IAM 許可僅受限於他的許可界限。

1. `CloudWatchLimited` 陳述式允許 Zhang 在 CloudWatch 中執行五個動作。他的許可界限允許 CloudWatch 中的所有動作，因此他的有效 CloudWatch 許可僅受限於他的許可政策。

1. `S3BucketContents` 陳述式允許 Zhang 列出 `ZhangBucket` Amazon S3 儲存貯體。不過，他的許可界限不允許任何 Amazon S3 動作，因此他無法執行任何 S3 操作，無論他是否有許可政策。
**注意**  
Zhang 的政策允許其建立一個使用者，此使用者可存取 Zhang 無法存取的 Amazon S3 資源。透過委派這些管理動作，Maria 利用 Amazon S3 存取權以有效方式信任了 Zhang。

接著，María 將 `DelegatedUserPermissions` 政策連接為 `Zhang` 使用者的許可政策。

** 任務 4：**她提供 Zhang 有關建立新使用者的指示。她通知他可以建立具備所需的任何許可的新使用者，但他必須將 `XCompanyBoundaries` 政策指派給他們做為許可界限。

Zhang 完成下列任務：

1. Zhang 使用 建立使用者 AWS 管理主控台。他輸入使用者名稱 `Nikhil`，並啟用該使用者的主控台存取權。他清除了 **Requires password reset** (需要重設密碼) 旁的核取方塊，因為上述政策只允許使用者在登入 IAM 主控台後變更密碼。

1. 在 **Set permissions (設定許可)** 頁面上，Zhang 選擇 **IAMFullAccess** 和 **AmazonS3ReadOnlyAccess** 許可政策，允許 Nikhil 執行他的工作。

1. Zhang 忘了 María 的指示，略過 **Set permissions boundary (設定許可界限)** 區段。

1. Zhang 檢閱使用者詳細資訊，然後選擇 **Create user (建立使用者)**。

   操作失敗，存取遭拒。Zhang 的 `DelegatedUserBoundary` 許可界限要求他所建立的任何使用者都將 `XCompanyBoundaries` 政策當做許可界限來使用。

1. Zhang 返回到之前的頁面。在 **Set permissions boundary (設定許可界限)** 區段中，他選擇了 `XCompanyBoundaries` 政策。

1. Zhang 檢閱使用者詳細資訊，然後選擇 **Create user (建立使用者)**。

   使用者已建立。

當 Nikhil 登入時，即有權存取 IAM 和 Amazon S3，除了許可界限拒絕的那些操作之外。例如，他可以在 IAM 變更自己的密碼，但無法建立其他使用者或編輯他的政策。Nikhil 只有 Amazon S3 的讀取存取權。

如果有人將資源類型政策新增至 `logs` 儲存貯體，而讓 Nikhil 在儲存貯體中放入物件，則他仍然無法存取該儲存貯體。原因在於對 `logs` 儲存貯體執行的任何動作，均會受到其許可界限的明確拒絕。任何政策類型中的明確拒絕，都會導致請求遭到拒絕。不過，如果 Secrets Manager 秘密連接的以資源為基礎的政策允許 Nikhil 執行 – `secretsmanager:GetSecretValue`動作，則 Nikhil 可以擷取和解密該秘密。原因在於這項許可界限並未明確拒絕上述 Secrets Manager 操作，而且許可界限的隱含拒絕不會限制資源類型政策。