

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

# 單一帳戶中請求的政策評估
<a name="reference_policies_evaluation-logic_policy-eval-basics"></a>

## IAM 角色的政策評估
<a name="policy-eval-basics-single-account-role"></a>

下列流程圖詳細說明如何針對單一帳戶內的 IAM 角色作出政策評估決策。

![\[單一帳戶內 IAM 角色的評估流程圖\]](http://docs.aws.amazon.com/zh_tw/IAM/latest/UserGuide/images/PolicyEvaluationSingleAccountRole.png)


## IAM 使用者的政策評估
<a name="policy-eval-basics-single-account-user"></a>

下列流程圖詳細說明如何針對單一帳戶內的 IAM 使用者作出政策評估決策。

![\[單一帳戶內 IAM 使用者的評估流程圖\]](http://docs.aws.amazon.com/zh_tw/IAM/latest/UserGuide/images/PolicyevaluationSingleAccountUser.png)


## 以身分為基礎和以資源為基礎的政策的範例
<a name="reference_policies_evaluation-logic_policies_evaluation_example"></a>

最常見的政策類型是以身分為基礎的政策和以資源為基礎的政策。請求存取資源時， 會針對同一帳戶內**至少一個允許** AWS ，評估政策授予的所有許可。所有政策中的明確拒絕都會覆寫該允許。

**重要**  
如果在相同帳戶中，身分型政策和資源型政策中的任意一項政策允許請求而另一項不允許，則請求仍將被允許。

假設 Carlos 有使用者名稱 `carlossalazar`，他嘗試儲存檔案到 `amzn-s3-demo-bucket-carlossalazar-logs` Amazon S3 儲存貯體。

另外，也假設以下政策已連接到 `carlossalazar` IAM 使用者。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowS3ListRead",
            "Effect": "Allow",
            "Action": [
                "s3:GetBucketLocation",
                "s3:GetAccountPublicAccessBlock",
                "s3:ListAccessPoints",
                "s3:ListAllMyBuckets"
            ],
            "Resource": "arn:aws:s3:::*"
        },
        {
            "Sid": "AllowS3Self",
            "Effect": "Allow",
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket-carlossalazar/*",
                "arn:aws:s3:::amzn-s3-demo-bucket-carlossalazar"
            ]
        },
        {
            "Sid": "DenyS3Logs",
            "Effect": "Deny",
            "Action": "s3:*",
            "Resource": "arn:aws:s3:::*log*"
        }
    ]
}
```

------

此政策中的 `AllowS3ListRead` 陳述式允許 Carlos 檢視帳戶中的所有儲存貯體的清單。`AllowS3Self` 陳述式允許 Carlos 完整存取名稱和他的使用者名稱完全相同的儲存貯體。`DenyS3Logs` 陳述式拒絕 Carlos 存取名稱中包含 `log` 的任何 S3 儲存貯體。

此外，以下以資源為基礎的政策 (稱為儲存貯體政策) 已連接到 `amzn-s3-demo-bucket-carlossalazar` 儲存貯體。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::123456789012:user/carlossalazar"
            },
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket-carlossalazar/*",
                "arn:aws:s3:::amzn-s3-demo-bucket-carlossalazar"
            ]
        }
    ]
}
```

------

此政策指定只有 `carlossalazar` 使用者可以存取 `amzn-s3-demo-bucket-carlossalazar` 儲存貯體。

當 Carlos 提出將檔案儲存至儲存`amzn-s3-demo-bucket-carlossalazar-logs`貯體的請求時， AWS 會決定哪些政策適用於請求。在這種情況下，只有以身分為基礎的政策和以資源為基礎的政策適用。這兩者都是許可政策。由於未套用許可界限，評估邏輯會降低到以下邏輯。

![\[評估流程圖\]](http://docs.aws.amazon.com/zh_tw/IAM/latest/UserGuide/images/EffectivePermissionsShort.png)


AWS 會先檢查套用到請求內容的`Deny`陳述式。它找到一個，因為以身分為基礎的政策明確拒絕 Carlos 存取任何用於記錄的 S3 儲存貯體。Carlos 存取遭拒。

假設他發現自己的錯誤，並嘗試將檔案儲存到儲存`amzn-s3-demo-bucket-carlossalazar`貯體。 AWS 檢查是否有`Deny`陳述式，但找不到。接著檢查許可政策。身分類型政策和資源類型政策都允許請求。因此， AWS 允許請求。如果其中一個元素明確拒絕陳述式、請求會被拒絕。如果其中一種政策類型允許請求，但另一種則不允許，則仍會允許請求。