

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

# 使用條件索引鍵的儲存貯體政策範例
<a name="amazon-s3-policy-keys"></a>

您可以使用存取政策語言來指定授予許可時的條件。您可以使用選用 `Condition` 元素或 `Condition` 區塊來指定政策何時生效的條件。

如需使用 Amazon S3 條件索引鍵進行物件和儲存貯體操作的政策，請參閱下列範例。如需條件索引鍵的詳細資訊，請參閱 [Amazon S3 的政策條件索引鍵](security_iam_service-with-iam.md#security_iam_service-with-iam-id-based-policies-conditionkeys)。如需您可以在政策中指定之 Amazon S3 動作、條件索引鍵和資源的完整清單，請參閱 服務授權參考**中的 [Amazon S3 的動作、資源和條件索引鍵](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazons3.html)。

如需依 S3 資源類型列出 S3 API 操作許可的詳細資訊，請參閱[Amazon S3 API 操作所需的許可](using-with-s3-policy-actions.md)。

## 範例：物件操作的 Amazon S3 條件索引鍵
<a name="object-keys-in-amazon-s3-policies"></a>

下列範例示範如何將 Amazon S3 特定的條件索引鍵用於物件操作。如需您可以在政策中指定之 Amazon S3 動作、條件索引鍵和資源的完整清單，請參閱 服務授權參考**中的 [Amazon S3 的動作、資源和條件索引鍵](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazons3.html)。

如需依 S3 資源類型列出 S3 API 操作許可的詳細資訊，請參閱[Amazon S3 API 操作所需的許可](using-with-s3-policy-actions.md)。

有幾個政策範例示範如何搭配 [PUT 物件](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPUT.html)操作來使用條件金鑰。PUT 物件操作允許存取控制清單 (ACL) 特定的標頭，可用來授予以 ACL 為基礎的許可。您可以使用這些金鑰來設定條件，在使用者上傳物件時要求特定存取許可。您也可以使用 PutObjectAcl 操作來授予以 ACL 為基礎的許可。如需詳細資訊，請參閱《Amazon S3 Simple Storage Service API 參考》**中的 [PutObjectAcl](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObjectAcl.html)。如需 ACL 的詳細資訊，請參閱「[存取控制清單 (ACL) 概觀](acl-overview.md)」。

**Topics**
+ [範例 1：授予 `s3:PutObject` 許可，要求使用伺服器端加密儲存物件](#putobject-require-sse-2)
+ [範例 2：授予 `s3:PutObject` 許可複製物件，但複製來源有所限制](#putobject-limit-copy-source-3)
+ [範例 3：授權存取特定版本的物件](#getobjectversion-limit-access-to-specific-version-3)
+ [範例 4：根據物件標籤授予許可](#example-object-tagging-access-control)
+ [範例 5：依儲存貯體擁有者的 AWS 帳戶 ID 限制存取](#example-object-resource-account)
+ [範例 6：需要最低 TLS 版本](#example-object-tls-version)
+ [範例 7：從 `Deny` 陳述式中排除特定主體](#example-exclude-principal-from-deny-statement)
+ [範例 8：強制用戶端有條件地根據物件金鑰名稱或 ETag 來上傳物件](#example-conditional-writes-enforce)

### 範例 1：授予 `s3:PutObject` 許可，要求使用伺服器端加密儲存物件
<a name="putobject-require-sse-2"></a>

假設帳戶 A 擁有儲存貯體。帳戶管理員想要將上傳物件的許可授予帳戶 A 中的使用者 Jane，但條件是 Jane 一律要求使用 Amazon S3 受管金鑰的伺服器端加密 (SSE-S3)。帳戶 A 管理員可以使用 `s3:x-amz-server-side-encryption` 條件索引鍵來指定此要求，如下所示。下列 `Condition` 區塊中的金鑰/值對會指定 `s3:x-amz-server-side-encryption` 條件索引鍵以及 SSE-S3 (`AES256`) 作為加密類型：

```
"Condition": {
     "StringNotEquals": {
         "s3:x-amz-server-side-encryption": "AES256"
     }}
```

使用 測試此許可時 AWS CLI，您必須使用 `--server-side-encryption` 參數新增所需的加密，如下列範例所示。若要使用此範例命令，請以您自己的資訊取代 `user input placeholders`。

```
aws s3api put-object --bucket amzn-s3-demo-bucket --key HappyFace.jpg --body c:\HappyFace.jpg --server-side-encryption "AES256" --profile AccountAadmin
```

### 範例 2：授予 `s3:PutObject` 許可複製物件，但複製來源有所限制
<a name="putobject-limit-copy-source-3"></a>

在 `PUT` 物件請求中，當您指定來源物件時，請求為複製操作 (請參閱[https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectCOPY.html](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectCOPY.html))。相對的，儲存貯體擁有者可以授予使用者複製物件的許可，但來源有所限制，例如：
+ 僅允許從指定的來源儲存貯體 (例如 `amzn-s3-demo-source-bucket`) 複製物件。
+ 允許從指定的來源儲存貯體複製物件，但僅限金鑰名稱字首以特定字首 (例如 *`public/`*) 開頭的物件 (例如 `amzn-s3-demo-source-bucket/public/*`)。
+ 允許僅從來源儲存貯體複製特定物件 (例如 `amzn-s3-demo-source-bucket/example.jpg`)。

下列儲存貯體政策會授予使用者 (`Dave`) `s3:PutObject` 許可。此政策允許其複製僅具有以下條件的物件：請求包含 `s3:x-amz-copy-source` 標頭，而且標頭值指定 `/amzn-s3-demo-source-bucket/public/*` 金鑰名稱字首。若要使用此範例政策，請以您自己的資訊取代 `user input placeholders`。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
       {
            "Sid": "cross-account permission to user in your own account",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::123456789012:user/Dave"
            },
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::amzn-s3-demo-source-bucket/*"
        },
        {
            "Sid": "Deny your user permission to upload object if copy source is not /bucket/prefix",
            "Effect": "Deny",
            "Principal": {
                "AWS": "arn:aws:iam::123456789012:user/Dave"
            },
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::amzn-s3-demo-source-bucket/*",
            "Condition": {
                "StringNotLike": {
                    "s3:x-amz-copy-source": "amzn-s3-demo-source-bucket/public/*"
                }
            }
        }
    ]
}
```

------

**使用 測試政策 AWS CLI**  
您可以使用 命令來 AWS CLI `copy-object`測試許可。您可以透過新增 `--copy-source` 參數來指定來源，而金鑰名稱前綴必須符合政策中允許的前綴。您需要使用 `--profile` 參數，來提供使用者 Dave 的憑證。如需設定 的詳細資訊 AWS CLI，請參閱《[Amazon S3 API 參考》中的使用 AWS CLI 開發](https://docs.aws.amazon.com/AmazonS3/latest/API/setup-aws-cli.html) Amazon S3。 *Amazon S3 *

```
aws s3api copy-object --bucket amzn-s3-demo-source-bucket --key HappyFace.jpg 
--copy-source amzn-s3-demo-source-bucket/public/PublicHappyFace1.jpg --profile AccountADave
```

**提供僅複製特定物件的許可**  
前項政策使用 `StringNotLike` 條件。若要授予僅複製特定物件的許可，您必須將條件從 `StringNotLike` 變更為 `StringNotEquals`，然後指定確切的物件金鑰，如下列範例所示。若要使用此範例命令，請以您自己的資訊取代 `user input placeholders`。

```
"Condition": {
       "StringNotEquals": {
           "s3:x-amz-copy-source": "amzn-s3-demo-source-bucket/public/PublicHappyFace1.jpg"
       }
}
```

### 範例 3：授權存取特定版本的物件
<a name="getobjectversion-limit-access-to-specific-version-3"></a>

假設帳戶 A 擁有已啟用版本控制的儲存貯體。儲存貯體有數個版本的 `HappyFace.jpg` 物件。現在，帳戶 A 管理員希望授予使用者 `Dave` 只取得特定物件版本的許可。帳戶管理員可有條件地授予 `Dave` `s3:GetObjectVersion` 許可來完成此操作，如下列範例所示。`Condition` 區塊中的金鑰/值對會指定 `s3:VersionId` 條件索引鍵。在此情況下，若要從指定已啟用版本控制的儲存貯體擷取物件，`Dave` 需要知道確切的物件版本 ID。若要使用此範例政策，請以您自己的資訊取代 `user input placeholders`。

如需詳細資訊，請參閱 Amazon Simple Storage Service API 參考**中的 [https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html)。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "statement1",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::123456789012:user/Dave"
            },
            "Action": "s3:GetObjectVersion",
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/HappyFace.jpg"
        },
        {
            "Sid": "statement2",
            "Effect": "Deny",
            "Principal": {
                "AWS": "arn:aws:iam::123456789012:user/Dave"
            },
            "Action": "s3:GetObjectVersion",
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/HappyFace.jpg",
            "Condition": {
                "StringNotEquals": {
                    "s3:VersionId": "AaaHbAQitwiL_h47_44lRO2DDfLlBO5e"
                }
            }
        }
    ]
}
```

------

**使用 測試政策 AWS CLI**  
您可以使用 命令搭配 `--version-id` 參數來識別要擷取的特定物件版本，以 AWS CLI `get-object`測試此政策中的許可。此命令會擷取特定版本的物件，並將其儲存至 `OutputFile.jpg` 檔案。

```
aws s3api get-object --bucket amzn-s3-demo-bucket --key HappyFace.jpg OutputFile.jpg --version-id AaaHbAQitwiL_h47_44lRO2DDfLlBO5e --profile AccountADave
```

### 範例 4：根據物件標籤授予許可
<a name="example-object-tagging-access-control"></a>

如需有關如何搭配 Amazon S3 操作使用物件標記條件索引鍵的範例，請參閱[標記與存取控制政策](tagging-and-policies.md)。

### 範例 5：依儲存貯體擁有者的 AWS 帳戶 ID 限制存取
<a name="example-object-resource-account"></a>

您可以使用 `aws:ResourceAccount`或 `s3:ResourceAccount`條件金鑰來撰寫 IAM 或虛擬私有雲端 (VPC) 端點政策，以限制使用者、角色或應用程式對特定 AWS 帳戶 ID 所擁有 Amazon S3 儲存貯體的存取。您可以使用這些條件索引鍵來限制 VPC 內的用戶端存取您未擁有的儲存貯體。

不過，請注意，某些 AWS 服務依賴 AWS 受管儲存貯體的存取。因此，在 IAM 政策使用 `aws:ResourceAccount` 或者 `s3:ResourceAccount` 金鑰也可能影響對這些資源的存取。如需詳細資訊，請參閱下列資源：
+ 《AWS PrivateLink 指南》**中[限制存取指定之 AWS 帳戶帳戶的儲存貯體](https://docs.aws.amazon.com/vpc/latest/privatelink/vpc-endpoints-s3.html#bucket-policies-s3)
+ [Amazon ECR 指南](https://docs.aws.amazon.com/AmazonECR/latest/userguide/vpc-endpoints.html#ecr-minimum-s3-perms)中的*限制對 Amazon ECR 使用的儲存貯體的存取*
+ 《 *AWS Systems Manager 指南*》中的[為 AWS 受管 Amazon S3 儲存貯體提供 Systems Manager 的必要存取權](https://docs.aws.amazon.com/systems-manager/latest/userguide/ssm-agent-minimum-s3-permissions.html) 

如需 `aws:ResourceAccount` 和 `s3:ResourceAccount` 條件索引鍵的詳細資訊，以及示範其使用方式的範例，請參閱 *AWS 儲存部落格*中的[限制對特定 AWS 帳戶所擁有 Amazon S3 儲存貯體的存取](https://aws.amazon.com/blogs/storage/limit-access-to-amazon-s3-buckets-owned-by-specific-aws-accounts/)。

### 範例 6：需要最低 TLS 版本
<a name="example-object-tls-version"></a>

您可以使用 `s3:TlsVersion` 條件索引鍵來撰寫 IAM、虛擬私有雲端端點 (VPCE) 或儲存貯體政策，以限制使用者或應用程式存取用戶端所使用基於 TLS 版本的 Amazon S3 儲存貯體。您可以使用此條件索引鍵來撰寫需要最低 TLS 版本的政策。

**注意**  
當 AWS 服務代表您呼叫其他 AWS 服務 (service-to-service呼叫） 時，會修訂特定網路的授權內容，包括 `s3:TlsVersion`、`aws:SecureTransport`、 `aws:SourceIp`和 `aws:VpcSourceIp`。如果您的政策搭配 `Deny`陳述式使用這些條件金鑰， AWS 服務主體可能會意外遭到封鎖。若要允許 AWS 服務在維護您的安全需求時正常運作，請新增值為 `aws:PrincipalIsAWSService`的條件索引鍵，從 `Deny`陳述式中排除服務主體`false`。例如：  

```
{
  "Effect": "Deny",
  "Action": "s3:*",
  "Resource": "*",
  "Condition": {
    "Bool": {
      "aws:SecureTransport": "false",
      "aws:PrincipalIsAWSService": "false"
    }
  }
}
```
此政策會在不使用 HTTPS (`aws:SecureTransport` 為 false) 時拒絕存取 S3 操作，但僅適用於非AWS 服務主體。這可確保您的條件限制適用於 AWS 服務委託人以外的所有委託人。

**Example**  
下列範例儲存貯體政策會「拒絕」**TLS 版本低於 1.2 (例如 1.1 或 1.0) 之用戶端的 `PutObject` 請求。若要使用此範例政策，請以您自己的資訊取代 `user input placeholders`。    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Deny",
            "Principal": "*",
            "Action": "s3:PutObject",
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket1",
                "arn:aws:s3:::amzn-s3-demo-bucket1/*"
            ],
            "Condition": {
                "NumericLessThan": {
                    "s3:TlsVersion": 1.2
                }
            }
        }
    ]
}
```

**Example**  
下列範例儲存貯體政策會「允許」**TLS 版本高於 1.1 (例如 1.2、1.3 或更新版本) 之用戶端的 `PutObject` 請求：    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:PutObject",
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket1",
                "arn:aws:s3:::amzn-s3-demo-bucket1/*"
            ],
            "Condition": {
                "NumericGreaterThan": {
                    "s3:TlsVersion": 1.1
                }
            }
        }
    ]
}
```

### 範例 7：從 `Deny` 陳述式中排除特定主體
<a name="example-exclude-principal-from-deny-statement"></a>

下列儲存貯體政策會拒絕對 `amzn-s3-demo-bucket` 的 `s3:GetObject` 存取，但帳戶號碼為 *`123456789012`* 的主體除外。若要使用此範例政策，請以您自己的資訊取代 `user input placeholders`。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "DenyAccessFromPrincipalNotInSpecificAccount",
      "Principal": {
        "AWS": "*"
      },
      "Action": "s3:GetObject",
      "Effect": "Deny",
      "Resource": [
        "arn:aws:s3:::amzn-s3-demo-bucket/*"
      ],
      "Condition": {
        "StringNotEquals": {
          "aws:PrincipalAccount": [
            "123456789012"
          ]
        }
      }
    }
  ]
}
```

------

### 範例 8：強制用戶端有條件地根據物件金鑰名稱或 ETag 來上傳物件
<a name="example-conditional-writes-enforce"></a>

透過條件式寫入，您可以將額外的標頭新增至 `WRITE` 請求，以指定 S3 操作的先決條件。此標頭會指定條件，如果不符合，則會導致 S3 操作失敗。例如，您可以在物件上傳期間驗證儲存貯體中沒有相同金鑰名稱的物件，以防止覆寫現有的資料。或者，您也可以在寫入物件之前，檢查 Amazon S3 中物件的實體標籤 (ETag)。

如需在儲存貯體政策中使用條件來強制執行條件式寫入的儲存貯體政策範例，請參閱[在 Amazon S3 儲存貯體上強制執行條件式寫入](conditional-writes-enforce.md)。

## 範例：儲存貯體操作的 Amazon S3 條件索引鍵
<a name="bucket-keys-in-amazon-s3-policies"></a>

本節提供的政策範例示範如何將 Amazon S3 特定的條件索引鍵用於儲存貯體操作。

**Topics**
+ [範例 1：使用條件授予 IP 位址的 `s3:GetObject` 許可](#AvailableKeys-iamV2)
+ [範例 2：取得儲存貯體中包含特定前綴的物件清單](#condition-key-bucket-ops-2)
+ [範例 3：設定金鑰數上限](#example-numeric-condition-operators)

### 範例 1：使用條件授予 IP 位址的 `s3:GetObject` 許可
<a name="AvailableKeys-iamV2"></a>

如果請求來自特定範圍的 IP 位址 (例如 `192.0.2.*`)，您可以授予已驗證的使用者使用 `s3:GetObject` 動作的許可，除非該 IP 位址是您想要排除的 IP 位址 (例如 `192.0.2.188`)。在 `Condition` 條件中，`IpAddress` 和 `NotIpAddress` 是條件，每個條件會獲得用於評估的金鑰/值對。此範例中的兩個鍵/值對都使用`aws:SourceIp` AWS 寬鍵。若要使用此範例政策，請以您自己的資訊取代 `user input placeholders`。

**注意**  
`IPAddress` 區塊中指定的 `NotIpAddress` 和 `Condition` 金鑰值使用 CIDR 表示法，如 RFC 4632 中所述。如需詳細資訊，請參閱 [http://www.rfc-editor.org/rfc/rfc4632.txt](http://www.rfc-editor.org/rfc/rfc4632.txt)。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Id": "S3PolicyId1",
    "Statement": [
        {
            "Sid": "statement1",
            "Effect": "Allow",
            "Principal": "*",
            "Action":"s3:GetObject",
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*",
            "Condition" : {
                "IpAddress" : {
                    "aws:SourceIp": "192.0.2.0/24" 
                },
                "NotIpAddress" : {
                    "aws:SourceIp": "192.0.2.188/32" 
                } 
            } 
        } 
    ]
}
```

------

您也可以在 Amazon S3 政策中使用其他 AWS整體條件金鑰。例如，您可以在 VPC 端點的儲存貯體政策中指定 `aws:SourceVpce` 和 `aws:SourceVpc` 條件索引鍵。如需特定範例，請參閱 [使用儲存貯體政策控制來自 VPC 端點的存取](example-bucket-policies-vpc-endpoint.md)。

**注意**  
對於某些 AWS 全域條件索引鍵，僅支援特定資源類型。因此，請檢查 Amazon S3 是否支援您要使用的全域條件索引鍵和資源類型，或者您是否需要改用 Amazon S3 特定的條件索引鍵。如需 Amazon S3 支援的資源類型和條件索引鍵完整清單，請參閱服務授權參考**中的 [Amazon S3 的動作、資源和條件索引鍵](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazons3.html)。  
如需依 S3 資源類型列出 S3 API 操作許可的詳細資訊，請參閱[Amazon S3 API 操作所需的許可](using-with-s3-policy-actions.md)。

### 範例 2：取得儲存貯體中包含特定前綴的物件清單
<a name="condition-key-bucket-ops-2"></a>

您可以使用 `s3:prefix` 條件金鑰，將 [https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjectsV2.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjectsV2.html) API 的回應限於具有特定字首的金鑰名稱。如果您是儲存貯體擁有者，您可以使用此條件索引鍵，限制使用者列出儲存貯體中具有特定字首的內容。如果儲存貯體中的物件是按金鑰名稱字首來組織，`s3:prefix` 條件索引鍵會很有用。

Amazon S3 主控台會使用金鑰名稱前綴來顯示資料夾概念。只有主控台支援資料夾的概念，Amazon S3 API 僅支援儲存貯體和物件。例如，若您擁有的兩個物件索引鍵名稱分別為 *`public/object1.jpg`* 和 *`public/object2.jpg`*，則主控台會在 *`public`* 資料夾下顯示物件。在 Amazon S3 API 中，這些是具有字首的物件，而不是資料夾內的物件。如需有關使用字首和分隔符號來篩選存取許可的詳細資訊，請參閱[使用使用者政策來控制對儲存貯體的存取](walkthrough1.md)。

在下列案例中，儲存貯體擁有者及使用者所屬的父帳戶是同一個。因此，儲存貯體擁有者可以使用儲存貯體政策或使用者政策來授予存取權。如需可以搭配 `ListObjectsV2` API 操作使用的其他條件索引鍵詳細資訊，請參閱[https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjectsV2.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjectsV2.html)。

**注意**  
如果儲存貯體已啟用版本控制，若要列出儲存貯體中的物件，您必須在下列政策中授予 `s3:ListBucketVersions` 許可 (而非 `s3:ListBucket` 許可)。`s3:ListBucketVersions` 許可也支援 `s3:prefix` 條件索引鍵。

**使用者政策**  
下列使用者政策會授予 `s3:ListBucket` 許可 (請參閱[https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjectsV2.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjectsV2.html))，並搭配使用 `Condition` 陳述式，要求使用者在請求中指定值為 `projects` 的字首。若要使用此範例政策，請以您自己的資訊取代 `user input placeholders`。

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement":[
      {
         "Sid":"statement1",
         "Effect":"Allow",
         "Action": "s3:ListBucket",
         "Resource":"arn:aws:s3:::amzn-s3-demo-bucket",
         "Condition" : {
             "StringEquals" : {
                 "s3:prefix": "projects" 
             }
          } 
       },
      {
         "Sid":"statement2",
         "Effect":"Deny",
         "Action": "s3:ListBucket",
         "Resource": "arn:aws:s3:::amzn-s3-demo-bucket",
         "Condition" : {
             "StringNotEquals" : {
                 "s3:prefix": "projects" 
             }
          } 
       }         
    ]
}
```

------

`Condition` 陳述式會限制使用者只列出具有 `projects` 字首的物件金鑰。無論使用者可能擁有哪些其他許可，新增的明確 `Deny` 陳述式都會拒絕使用者列出具有任何其他字首的金鑰。例如，使用者可以透過更新上述使用者政策，或是透過儲存貯體政策，取得列出物件金鑰的許可，而不受任何限制。由於明確 `Deny` 陳述式一律會覆寫 `Allow` 陳述式，因此如果使用者嘗試列出字首不是 `projects` 的金鑰，則請求會遭拒。

**儲存貯體政策**  
如果將 `Principal` 元素新增至上述使用者政策來找出使用者，則您現在就會有儲存貯體政策，如下列範例所示。若要使用此範例政策，請以您自己的資訊取代 `user input placeholders`。

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement":[
      {
         "Sid":"statement1",
         "Effect":"Allow",
         "Principal": {
            "AWS": "arn:aws:iam::123456789012:user/bucket-owner"
         },  
         "Action":  "s3:ListBucket",
         "Resource": "arn:aws:s3:::amzn-s3-demo-bucket",
         "Condition" : {
             "StringEquals" : {
                 "s3:prefix": "projects" 
             }
          } 
       },
      {
         "Sid":"statement2",
         "Effect":"Deny",
         "Principal": {
            "AWS": "arn:aws:iam::123456789012:user/bucket-owner"
         },  
         "Action": "s3:ListBucket",
         "Resource": "arn:aws:s3:::amzn-s3-demo-bucket",
         "Condition" : {
             "StringNotEquals" : {
                 "s3:prefix": "projects"  
             }
          } 
       }         
    ]
}
```

------

**使用 測試政策 AWS CLI**  
您可以使用下列`list-object` AWS CLI 命令來測試政策。在命令中，您要使用 `--profile` 參數來提供使用者憑證。如需設定和使用 的詳細資訊 AWS CLI，請參閱《[Amazon S3 API 參考》中的使用 AWS CLI 與 Amazon S3 一起開發](https://docs.aws.amazon.com/AmazonS3/latest/API/setup-aws-cli.html)。 *Amazon S3 *

```
aws s3api list-objects --bucket amzn-s3-demo-bucket --prefix projects --profile AccountA
```

### 範例 3：設定金鑰數上限
<a name="example-numeric-condition-operators"></a>

您可以使用 `s3:max-keys` 條件索引鍵來設定請求者在 [https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjectsV2.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjectsV2.html) 或 [https://docs.aws.amazon.com//AmazonS3/latest/API/API_ListObjectVersions.html](https://docs.aws.amazon.com//AmazonS3/latest/API/API_ListObjectVersions.html) 請求中可傳回的索引鍵數目上限。根據預設，這些 API 最多會傳回 1,000 個索引鍵。如需您可搭配 `s3:max-keys` 使用的數值條件運算子清單和隨附範例，請參閱*《IAM 使用者指南》*中的[數值條件運算子](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html#Conditions_Numeric)。