

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

# Amazon S3 的儲存貯體政策
<a name="bucket-policies"></a>

儲存貯體政策是以資源為基礎的政策，您可以使用這些政策來將存取許可授予 Amazon S3 儲存貯體及其中物件。只有儲存貯體擁有者可建立政策與儲存貯體的關聯。連接到儲存貯體的許可會套用至儲存貯體擁有者帳戶擁有的所有儲存貯體物件。這些許可不適用於其他 擁有的物件 AWS 帳戶。

S3 物件擁有權是一項 Amazon S3 儲存貯體層級設定，您可以用來控制上傳至儲存貯體之物件的擁有權，以及停用或啟用存取控制清單 (ACL)。根據預設，物件擁有權設定為強制執行的儲存貯體擁有者設定，而且所有 ACL 都會停用。儲存貯體擁有者擁有儲存貯體中的每個物件，並使用政策專門管理對資料的存取。

儲存貯體政策使用 JSON 型 AWS Identity and Access Management (IAM) 政策語言。您可以使用儲存貯體政策來新增或拒絕儲存貯體中物件的許可。儲存貯體政策可以允許或拒絕以政策中元素為基礎的請求。這些元素包括請求的申請者、S3 動作、資源，以及其他方面或條件 (例如，用來提出要求的 IP 位址)。

例如，您可以建立儲存貯體政策，執行下列動作：
+ 授予其他帳戶跨帳戶許可，以將物件上傳至您的 S3 儲存貯體
+ 請確定您 (儲存貯體擁有者) 具有已上載物件的完整控制權

如需詳細資訊，請參閱[Amazon S3 儲存貯體政策的範例](example-bucket-policies.md)。

**重要**  
您無法使用儲存貯體政策來防止 [S3 生命週期](object-lifecycle-mgmt.md)規則的刪除或轉換。例如，即使您的儲存貯體政策拒絕所有主體的所有動作，S3 生命週期組態仍會正常運作。

本節中的主題提供了範例，並示範如何在 S3 主控台中新增儲存貯體政策。如需身分型政策的資訊，請參閱[Amazon S3 的身分型政策](security_iam_id-based-policy-examples.md)。如需有關儲存貯體政策語言的資訊，請參閱 [Amazon S3 中的政策和許可](access-policy-language-overview.md)

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

**Topics**
+ [使用 Amazon S3 主控台新增儲存貯體政策](add-bucket-policy.md)
+ [使用儲存貯體政策控制來自 VPC 端點的存取](example-bucket-policies-vpc-endpoint.md)
+ [Amazon S3 儲存貯體政策的範例](example-bucket-policies.md)
+ [使用條件索引鍵的儲存貯體政策範例](amazon-s3-policy-keys.md)

# 使用 Amazon S3 主控台新增儲存貯體政策
<a name="add-bucket-policy"></a>

您可以使用 [AWS 政策產生器](https://aws.amazon.com/blogs/aws/aws-policy-generator/)和 Amazon S3 主控台新增儲存貯體政策，或編輯現有的儲存貯體政策。儲存貯體政策是資源型 AWS Identity and Access Management (IAM) 政策。您可以將儲存貯體政策新增至儲存貯體，以授予其他 AWS 帳戶 或 IAM 使用者存取儲存貯體和其中物件的許可。物件許可只會套用至該儲存貯體擁有者所建立的物件。如需儲存貯體政策的詳細資訊，請參閱「[Amazon S3 的身分和存取管理](security-iam.md)」。

請務必解決安全性警告、錯誤、一般警告，以及 AWS Identity and Access Management Access Analyzer 建議，然後再儲存政策。IAM Access Analyzer 會比對 IAM [政策文法](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_grammar.html)和[最佳實務](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)來執行政策檢查，以驗證您的政策。這些檢查會產生問題清單並提供可行的建議，協助您撰寫具有功能性且符合安全最佳實務的政策。若要進一步了解如何使用 IAM Access Analyzer 驗證政策，請參閱《IAM 使用者指南》**中的 [IAM Access Analyzer 政策驗證](https://docs.aws.amazon.com/IAM/latest/UserGuide/access-analyzer-policy-validation.html)。若要檢視 IAM Access Analyzer 傳回的警告、錯誤和建議清單，請參閱 [IAM Access Analyzer 政策檢查參考](https://docs.aws.amazon.com/IAM/latest/UserGuide/access-analyzer-reference-policy-checks.html)。

如需對政策錯誤進行故障診斷的指引，請參閱 [對 Amazon S3 中的存取遭拒 (403 Forbidden) 錯誤進行故障診斷](troubleshoot-403-errors.md)。

**建立或編輯儲存貯體政策**

1. 登入 AWS 管理主控台 ，並在 https：//[https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/) 開啟 Amazon S3 主控台。

1. 在左側導覽窗格中，選擇**一般用途儲存貯體**或**目錄儲存貯體**。

1. 在儲存貯體清單中，選擇要建立儲存貯體政策的儲存貯體名稱，或您想編輯之儲存貯體政策的儲存貯體名稱。

1. 選擇**許可**索引標籤。

1. 在 **Bucket policy (儲存貯體政策)** 下方，選擇 **Edit (編輯)**。**Edit bucket policy** (編輯儲存貯體政策) 頁面隨即出現。

1. 在 **Edit bucket policy** (編輯儲存貯體政策) 頁面上，執行下列其中一項動作：
   + 若要查看儲存貯體政策的範例，請選擇**政策範例**。或者，請參閱《Amazon S3 使用者指南》**中的[Amazon S3 儲存貯體政策的範例](example-bucket-policies.md)。
   + 若要自動產生政策，或在 **Policy** (政策) 區段中編輯 JSON，請選擇 **Policy generator** (原則產生器)。

   如果您選擇**政策產生器**， AWS 政策產生器會在新視窗中開啟。

   1. 在 **AWS 政策產生器**頁面上，針對**選取政策類型**，選擇 **S3 儲存貯體政策**。

   1. 在提供的欄位中輸入資訊，以新增陳述式，然後選擇 **Add Statement** (新增陳述式)。針對您想要新增的任意數量陳述式重複此步驟。如需這些欄位的詳細資訊，請參閱《*IAM 使用者指南》*中的 [IAM JSON 政策元素參考](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements.html)。
**注意**  
為了您的方便，**編輯儲存貯體政策**頁面會在**政策**文字欄位上方顯示目前儲存貯體的**儲存貯體 ARN **(Amazon Resource Name)。您可以複製此 ARN，以在 **AWS Policy Generator** ( 政策產生器) 頁面上的陳述式中使用。

   1. 完成新增陳述式後，選擇 **Generate Policy** (產生政策)。

   1. 複製產生的政策文字，選擇 **Close** (關閉)，然後退回 Amazon S3 主控台中的 **Edit bucket policy** (編輯儲存貯體政策) 頁面。

1. 在**政策**方塊中，從政策產生器編輯現有政策或貼上儲存貯體 AWS 政策。請務必先處理安全性警告、錯誤、一般警告，以及建議，然後再儲存政策。
**注意**  
儲存貯體政策的大小限制為 20 KB。

1. (選用) 選擇右下角的 **Preview external access** (預覽外部存取)，以預覽新政策會如何影響資源的公開和跨帳戶存取權。在儲存政策之前，您可以檢查它是否引入新的 IAM Access Analyzer 問題清單，或是解決現有的問題清單。如果您沒有看到作用中的分析器，請選擇 **Go to Access Analyzer** (移至 Access Analyzer)，以在 IAM Access Analyzer 中[建立帳戶分析器](https://docs.aws.amazon.com/IAM/latest/UserGuide/access-analyzer-getting-started.html#access-analyzer-enabling)。如需詳細資訊，請參閱*《IAM 使用者指南》*中的[預覽存取](https://docs.aws.amazon.com/IAM/latest/UserGuide/access-analyzer-access-preview.html)。

1. 選擇 **Save changes** (儲存變更)，這會讓您回到 **Permissions** (許可) 索引標籤。

# 使用儲存貯體政策控制來自 VPC 端點的存取
<a name="example-bucket-policies-vpc-endpoint"></a>

您可以使用 Amazon S3 儲存貯體政策，控制從特定虛擬私有雲端 (VPC) 端點或特定 VPC 對儲存貯體的存取。本節包含範例儲存貯體政策，您可以使用這些政策來控制從 VPC 端點對 Amazon S3 儲存貯體的存取。若要了解如何設定 VPC 端點，請參閱*《VPC 使用指南》*中的 [VPC 端點](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-endpoints.html)。

VPC 可讓您在定義的虛擬網路中啟動 AWS 資源。VPC 端點可讓您建立 VPC 與另一個 AWS 服務之間的私有連線。此私有連線不需要透過網際網路、透過虛擬私有網路 (VPN) 連線、透過 NAT 執行個體或透過 Direct Connect進行存取。

適用於 Amazon S3 的 VPC 端點是 VPC 內只允許連線到 Amazon S3 的邏輯實體。VPC 端點會將請求路由至 Amazon S3，並將回應路由回到 VPC。VPC 端點僅供要求路由連接方式 Amazon S3 公有端點和 DNS 名稱仍然適用於 VPC 端點。如需搭配 Amazon S3 使用 VPC 端點的重要資訊，請參閱《VPC 使用者指南》**中的[閘道端點](https://docs.aws.amazon.com/vpc/latest/userguide/vpce-gateway.html)和[適用於 Amazon S3 的端點](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-endpoints-s3.html)。

適用於 Amazon S3 的 VPC 端點提供兩種方式來控制對 Amazon S3 資料的存取：
+ 您可以控制經由特定 VPC 端點允許的請求、使用者或群組。如需這種存取控制類型的資訊，請參閱《VPC 使用者指南》**中的[使用端點政策控制對 VPC 端點的存取](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-endpoints-access.html)。
+ 您可以使用 Amazon S3 儲存貯體政策，控制哪些 VPC 或 VPC 端點可以存取您的儲存貯體。如需這類儲存貯體政策存取控制的範例，請參閱下列限制存取主題。

**Topics**
+ [限制特定 VPC 端點的存取](#example-bucket-policies-restrict-accesss-vpc-endpoint)
+ [限制特定 VPC 的存取](#example-bucket-policies-restrict-access-vpc)
+ [限制對 IPv6 VPC 端點的存取](#example-bucket-policies-ipv6-vpc-endpoint)

**重要**  
針對本節所述的 VPC 端點套用 Amazon S3 儲存貯體政策時，無意中可能封鎖您對儲存貯體的存取。來自您 VPC 端點，旨在特別限制儲存貯體存取連線的儲存貯體許可，可能會封鎖所有對儲存貯體的連線。如需如何修正此問題的資訊，請參閱 *AWS 支援 知識中心*的[我該如何在儲存貯體政策有錯誤的 VPC 或 VPC 端點 ID 時，修正我的儲存貯體政策](https://aws.amazon.com/premiumsupport/knowledge-center/s3-regain-access/)。

## 限制特定 VPC 端點的存取
<a name="example-bucket-policies-restrict-accesss-vpc-endpoint"></a>

下列 Amazon S3 儲存貯體政策範例限制只能從 ID 為 `vpce-1a2b3c4d` 的 VPC 端點存取特定儲存貯體 `awsexamplebucket1`。如果未使用指定的端點，政策會拒絕所有對儲存貯體的存取。`aws:SourceVpce` 條件會指定端點。`aws:SourceVpce` 條件不需要 VPC 端點資源的 Amazon Resource Name (ARN)，只需要 VPC 端點 ID。如需在政策中使用條件的詳細資訊，請參閱「[使用條件索引鍵的儲存貯體政策範例](amazon-s3-policy-keys.md)」。

**重要**  
使用下列範例政策之前，請以適合您使用案例的適當值取代 VPC 端點 ID。否則，您將無法存取儲存貯體。
此政策會停用對指定儲存貯體的主控台存取，因為主控台要求不是來自指定的 VPC 端點。

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Id": "Policy1415115909152",
   "Statement": [
     {
       "Sid": "Access-to-specific-VPCE-only",
       "Principal": "*",
       "Action": "s3:*",
       "Effect": "Deny",
       "Resource": ["arn:aws:s3:::amzn-s3-demo-bucket",
                    "arn:aws:s3:::amzn-s3-demo-bucket/*"],
       "Condition": {
         "StringNotEquals": {
           "aws:SourceVpce": "vpce-0abcdef1234567890"
         }
       }
     }
   ]
}
```

------

## 限制特定 VPC 的存取
<a name="example-bucket-policies-restrict-access-vpc"></a>

您可以使用 `aws:SourceVpc` 條件，建立可限制存取特定 VPC 的儲存貯體政策。如果您在相同的 VPC 中設定多個 VPC 端點，而且想要管理所有端點對 Amazon S3 儲存貯體的存取，則這十分有用。下列政策範例拒絶 VPC `vpc-111bbb22` 外的任何人存取 `awsexamplebucket1` 和其物件。如果未使用指定的 VPC，政策會拒絕所有對儲存貯體的存取。此陳述式不會授予儲存貯體的存取權。若要授予存取權，您必須新增個別的 `Allow` 陳述式。`vpc-111bbb22` 條件索引鍵不需要 VPC 資源的 ARN，只需要 VPC ID。

**重要**  
使用下列範例政策之前，請以適合您使用案例的適當值取代 VPC ID。否則，您將無法存取儲存貯體。
此政策會停用對指定儲存貯體的主控台存取，因為主控台請求不是來自指定的 VPC。

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Id": "Policy1415115909153",
   "Statement": [
     {
       "Sid": "Access-to-specific-VPC-only",
       "Principal": "*",
       "Action": "s3:*",
       "Effect": "Deny",
       "Resource": ["arn:aws:s3:::amzn-s3-demo-bucket",
                    "arn:aws:s3:::amzn-s3-demo-bucket/*"],
       "Condition": {
         "StringNotEquals": {
           "aws:SourceVpc": "vpc-1a2b3c4d"
         }
       }
     }
   ]
}
```

------

## 限制對 IPv6 VPC 端點的存取
<a name="example-bucket-policies-ipv6-vpc-endpoint"></a>

下列範例政策會拒絕儲存*amzn-s3-demo-bucket*貯體及其物件上的所有 Amazon S3 (`s3:`) 動作，除非請求來自指定的 VPC 端點 (`vpce-0a1b2c3d4e5f6g`)，且來源 IP 地址符合提供的 IPv6 CIDR 區塊。

```
{
   "Version": "2012-10-17", 		 	 	 
   "Id": "Policy1415115909154",
   "Statement": [
     {
       "Sid": "AccessSpecificIPv6VPCEOnly",
       "Action": "s3:*",
       "Effect": "Deny",
       "Resource": ["arn:aws:s3:::amzn-s3-demo-bucket",
                    "arn:aws:s3:::amzn-s3-demo-bucket/*"],
       "Condition": {
         "StringNotEquals": {
           "aws:SourceVpc": "vpc-0a1b2c3d4e5f6g4h2"
         },
        "NotIpAddress": {
          "aws:VpcSourceIp": "2001:db8::/32"
        }
       }
     }
   ]
}
```

如需有關如何根據特定 IPs 或 VPCs 限制對儲存貯體的存取的資訊，請參閱[如何僅允許特定 VPC 端點或 IP 地址存取我的 Amazon S3 儲存貯體？](https://repost.aws/knowledge-center/block-s3-traffic-vpc-ip) AWS re:Post 知識中心的 。

# Amazon S3 儲存貯體政策的範例
<a name="example-bucket-policies"></a>

使用 Amazon S3 儲存貯體政策，您可以安全地存取儲存貯體中的物件，以便只有具有適當許可的使用者才能存取它們。您甚至可以防止已驗證但沒有適當許可的使用者存取 Amazon S3 資源。

本節顯示儲存貯體政策之一般使用案例的範例。這些範例策略會使用 `amzn-s3-demo-bucket` 作為資源值。若要測試這些政策，請將 `user input placeholders` 取代為您自己的資訊 (例如儲存貯體名稱)。

若要授予或拒絶一組物件的許可，您可以在 Amazon Resource Name (ARN) 和其他值上使用萬用字元 (`*`)。例如，您可以控制對開頭為通用[字首](https://docs.aws.amazon.com/general/latest/gr/glos-chap.html#keyprefix)或結尾為特定副檔名 (例如 `.html`) 之物件群組的存取。

如需 AWS Identity and Access Management (IAM) 政策語言的詳細資訊，請參閱 [Amazon S3 中的政策和許可](access-policy-language-overview.md)。

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

**注意**  
使用 Amazon S3 主控台來測試許可時，您必須授予主控台所需的其他許可：`s3:ListAllMyBuckets`、`s3:GetBucketLocation` 和 `s3:ListBucket`。如需授予使用者許可並使用主控台測試這些許可的演練範例，請參閱 [使用使用者政策來控制對儲存貯體的存取](walkthrough1.md)。

建立儲存貯體政策的其他資源包括：
+ 如需建立儲存貯體政策時可以使用的 IAM 政策動作、資源和條件索引鍵清單，請參閱 服務授權參考**中的 [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)。
+ 如需建立 S3 政策的指引，請參閱 [使用 Amazon S3 主控台新增儲存貯體政策](add-bucket-policy.md)。
+ 若要對政策錯誤進行故障排除，請參閱 [對 Amazon S3 中的存取遭拒 (403 Forbidden) 錯誤進行故障診斷](troubleshoot-403-errors.md)。

如果您在新增或更新政策時遇到問題，請參閱[當我嘗試更新 Amazon S3 儲存貯體政策時，為什麼會收到錯誤「政策中的主體無效」？](https://repost.aws/knowledge-center/s3-invalid-principal-in-policy-error) AWS re:Post 知識中心的 。

**Topics**
+ [將唯讀許可授予公有匿名使用者](#example-bucket-policies-anonymous-user)
+ [需要加密](#example-bucket-policies-encryption)
+ [使用標準 ACL 管理儲存貯體](#example-bucket-policies-public-access)
+ [使用物件標記來管理物件存取](#example-bucket-policies-object-tags)
+ [使用全域條件金鑰管理物件存取](#example-bucket-policies-global-condition-keys)
+ [根據 HTTP 或 HTTPS 請求管理存取](#example-bucket-policies-HTTP-HTTPS)
+ [管理使用者對特定資料夾的存取](#example-bucket-policies-folders)
+ [管理存取日誌的存取](#example-bucket-policies-access-logs)
+ [管理對 Amazon CloudFront OAI 的存取](#example-bucket-policies-cloudfront)
+ [管理對 Amazon S3 Storage Lens 的存取](#example-bucket-policies-lens)
+ [管理 S3 庫存、S3 分析和 S3 庫存報告的許可](#example-bucket-policies-s3-inventory)
+ [需要 MFA](#example-bucket-policies-MFA)
+ [防止使用者刪除物件](#using-with-s3-actions-related-to-bucket-subresources)

## 將唯讀許可授予公有匿名使用者
<a name="example-bucket-policies-anonymous-user"></a>

您可以使用政策設定將存取權授予公有匿名使用者，假如您要將儲存貯體設定為靜態網站，這樣做會很有幫助。將存取權授予公有匿名使用者時，您必須停用儲存貯體的封鎖公開存取設定。如需如何執行這項操作的詳細資訊，請參閱[設定網站存取許可](WebsiteAccessPermissionsReqd.md)。若要了解如何為相同目的設定更嚴格的政策，請參閱[如何將公開讀取存取權授予 Amazon S3 儲存貯體中的某些物件？](https://repost.aws/knowledge-center/read-access-objects-s3-bucket) AWS 知識中心的 。

根據預設，Amazon S3 會封鎖對帳戶和儲存貯體的公開存取。如想要使用儲存貯體託管靜態網站，您可使用這些步驟編輯封鎖公有存取設定：

**警告**  
完成這些步驟之前，請檢閱[封鎖對 Amazon S3 儲存體的公開存取權](access-control-block-public-access.md)以確保您了解並接受允許公開存取所涉及的風險。當您關閉封鎖公開存取設定以公開儲存貯體時，網際網路上的任何人都可以存取您的儲存貯體。我們建議您封鎖對儲存貯體的所有公用存取權。

1. 開啟位於 [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/) 的 Amazon S3 主控台。

1. 選擇已設定為靜態網站的儲存貯體名稱。

1. 選擇 **Permissions** (許可)。

1. 在 **Block public access (bucket settings) (封鎖公開存取 (儲存貯體設定))** (封鎖公開存取 (儲存貯體設定)) 下，選擇 **Edit** (編輯)。

1. 清除 **Block *all* public access** (封鎖所有公開存取)，然後選擇 **Save changes** (儲存變更)。  
![\[Amazon S3 主控台，顯示封鎖公開存取儲存貯體設定。\]](http://docs.aws.amazon.com/zh_tw/AmazonS3/latest/userguide/images/edit-public-access-clear.png)

   Amazon S3 會關閉儲存貯體的封鎖公開存取設定。若要建立公有靜態網站，在新增儲存貯體原則之前，可能還需要針對您的帳戶[編輯封鎖公開存取設定](https://docs.aws.amazon.com/AmazonS3/latest/user-guide/block-public-access-account.html)。如果目前已開啟帳戶的封鎖公開存取設定，您會在**封鎖公開存取 (儲存貯體設定)** 下看到附註。

## 需要加密
<a name="example-bucket-policies-encryption"></a>

您可以使用 AWS Key Management Service (AWS KMS) 金鑰 (SSE-KMS) 要求伺服器端加密，如下列範例所示。

### 寫入儲存貯體的所有物件都需要 SSE-KMS
<a name="example-bucket-policies-encryption-1"></a>

下列範例政策要求寫入儲存貯體的每個物件都必須使用 AWS Key Management Service (AWS KMS) 金鑰 (SSE-KMS) 進行伺服器端加密。如果物件未使用 SSE-KMS 加密，則會拒絕請求。

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

****  

```
{
"Version":"2012-10-17",		 	 	 
"Id": "PutObjPolicy",
"Statement": [{
  "Sid": "DenyObjectsThatAreNotSSEKMS",
  "Principal": "*",
  "Effect": "Deny",
  "Action": "s3:PutObject",
  "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*",
  "Condition": {
    "Null": {
      "s3:x-amz-server-side-encryption-aws-kms-key-id": "true"
    }
  }
}]
}
```

------

### 對於寫入儲存貯體的所有物件，需要具有特定 AWS KMS key 的 SSE-KMS
<a name="example-bucket-policies-encryption-2"></a>

下列範例政策會拒絕任何物件寫入儲存貯體 (如果這些物件未使用特定的 KMS 金鑰 ID 搭配 SSE-KMS 加密的話)。即使物件使用每個請求標頭或儲存貯體預設加密搭配 SSE-KMS 加密，但如果尚未使用指定的 KMS 金鑰加密物件，這些物件也無法寫入儲存貯體。請務必將本範例中使用的 KMS 金鑰 ARN 取代為您自己的 KMS 金鑰 ARN。

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

****  

```
{
"Version":"2012-10-17",		 	 	 
"Id": "PutObjPolicy",
"Statement": [{
  "Sid": "DenyObjectsThatAreNotSSEKMSWithSpecificKey",
  "Principal": "*",
  "Effect": "Deny",
  "Action": "s3:PutObject",
  "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*",
  "Condition": {
    "ArnNotEqualsIfExists": {
      "s3:x-amz-server-side-encryption-aws-kms-key-id": "arn:aws:kms:us-east-1:111122223333:key/01234567-89ab-cdef-0123-456789abcdef"
    }
  }
}]
}
```

------

## 使用標準 ACL 管理儲存貯體
<a name="example-bucket-policies-public-access"></a>

### 將許可授予多個帳戶，以上傳物件或設定物件 ACL 進行公開存取
<a name="example-bucket-policies-acl-1"></a>

下列範例政策會將 `s3:PutObject` 和 `s3:PutObjectAcl` 許可授予多個 AWS 帳戶。此外，範例政策要求這些操作的任何請求都必須包含 `public-read` [標準存取控制清單 (ACL)](acl-overview.md#canned-acl)。如需詳細資訊，請參閱[Amazon S3 的政策動作](security_iam_service-with-iam.md#security_iam_service-with-iam-id-based-policies-actions)及[Amazon S3 的政策條件索引鍵](security_iam_service-with-iam.md#security_iam_service-with-iam-id-based-policies-conditionkeys)。

**警告**  
`public-read` 標準 ACL 可讓全世界的任何人檢視您儲存貯體中的物件。授予對 Amazon S3 bucket 儲存貯體的匿名存取，或停用封鎖公開存取設定時，請小心。當您授予匿名存取時，全球所有人皆可存取您的儲存貯體。我們建議您永遠不要授予匿名存取您的 Amazon S3 儲存貯體，除非您特別需要 (例如使用[靜態網站託管](WebsiteHosting.md)時)。如果您想要針對靜態網站託管啟用封鎖公開存取設定，請參閱[教學課程：在 Amazon S3 上設定靜態網站](https://docs.aws.amazon.com/AmazonS3/latest/userguide/HostingWebsiteOnS3Setup.html)。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AddPublicReadCannedAcl",
            "Effect": "Allow",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::111122223333:root",
                    "arn:aws:iam::444455556666:root"
                ]
            },
            "Action": [
                "s3:PutObject",
                "s3:PutObjectAcl"
            ],
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*",
            "Condition": {
                "StringEquals": {
                    "s3:x-amz-acl": [
                        "public-read"
                    ]
                }
            }
        }
    ]
}
```

------

### 授予跨帳戶許可，以在確保儲存貯體擁有者具有完全控制時上傳物件
<a name="example-bucket-policies-acl-2"></a>

下列範例顯示如何允許另一個 AWS 帳戶 將物件上傳到您的儲存貯體，同時確保您完全控制上傳的物件。此政策授予特定 AWS 帳戶 (*`111122223333`*) 上傳物件的能力，前提是該帳戶在上傳時包含`bucket-owner-full-control`標準 ACL。政策中的 `StringEquals` 條件指定 `s3:x-amz-acl` 條件金鑰來表示標準 ACL 需求。如需詳細資訊，請參閱[Amazon S3 的政策條件索引鍵](security_iam_service-with-iam.md#security_iam_service-with-iam-id-based-policies-conditionkeys)。

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement":[
     {
       "Sid":"PolicyForAllowUploadWithACL",
       "Effect":"Allow",
       "Principal":{"AWS":"111122223333"},
       "Action":"s3:PutObject",
       "Resource":"arn:aws:s3:::amzn-s3-demo-bucket/*",
       "Condition": {
         "StringEquals": {"s3:x-amz-acl":"bucket-owner-full-control"}
       }
     }
   ]
}
```

------

## 使用物件標記來管理物件存取
<a name="example-bucket-policies-object-tags"></a>

### 允許使用者只讀取具有特定索引標籤金鑰和值的物件
<a name="example-bucket-policies-tagging-1"></a>

下列許可政策會限制使用者只能讀取具有 `environment: production` 索引標籤金鑰和值的物件。此政策會使用 `s3:ExistingObjectTag` 條件金鑰來指定索引標籤金鑰和值。

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement":[
      {
         "Principal":{
            "AWS":"arn:aws:iam::111122223333:role/JohnDoe"
         },
         "Effect":"Allow",
         "Action":[
            "s3:GetObject",
            "s3:GetObjectVersion"
         ],
         "Resource":"arn:aws:s3:::amzn-s3-demo-bucket/*",
         "Condition":{
            "StringEquals":{
               "s3:ExistingObjectTag/environment":"production"
            }
         }
      }
   ]
}
```

------

### 限制使用者可以新增哪些物件索引標籤金鑰
<a name="example-bucket-policies-tagging-2"></a>

下列範例政策授予使用者執行 `s3:PutObjectTagging` 動作的許可，允許使用者將索引標籤新增至現有的物件。此條件使用 `s3:RequestObjectTagKeys` 條件金鑰指定允許的索引標籤金鑰，例如 `Owner` 或 `CreationDate`。如需詳細資訊，請參閱《IAM 使用者指南》**中的[建立測試多個金鑰值的條件](https://docs.aws.amazon.com//IAM/latest/UserGuide/reference_policies_multi-value-conditions.html)。

此政策可確保請求中指定的每個索引標籤金鑰都是授權的標籤金鑰。條件中的 `ForAnyValue` 限定詞可確保請求中至少會出現其中一個指定的金鑰。

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
  "Statement": [
    {"Principal":{"AWS":[
            "arn:aws:iam::111122223333:role/JohnDoe"
         ]
       },
 "Effect": "Allow",
      "Action": [
        "s3:PutObjectTagging"
      ],
      "Resource": [
        "arn:aws:s3:::amzn-s3-demo-bucket/*"
      ],
      "Condition": {"ForAnyValue:StringEquals": {"s3:RequestObjectTagKeys": [
            "Owner",
            "CreationDate"
          ]
        }
      }
    }
  ]
}
```

------

### 允許使用者新增物件標籤時，需要特定索引標籤金鑰和值
<a name="example-bucket-policies-tagging-3"></a>

下列範例政策授予使用者執行 `s3:PutObjectTagging` 動作的許可，允許使用者將標籤新增至現有的物件。此條件需要使用者包括值設為 `X` 的特定索引標籤 (例如 `Project`)。

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
  "Statement": [
    {"Principal":{"AWS":[
       "arn:aws:iam::111122223333:user/JohnDoe"
         ]
       },
      "Effect": "Allow",
      "Action": [
        "s3:PutObjectTagging"
      ],
      "Resource": [
        "arn:aws:s3:::amzn-s3-demo-bucket/*"
      ],
      "Condition": {"StringEquals": {"s3:RequestObjectTag/Project": "X"
        }
      }
    }
  ]
}
```

------

### 允許使用者只新增具有特定物件索引標籤金鑰和值的物件
<a name="example-bucket-policies-tagging-4"></a>

下列範例政策會授與使用者執行 `s3:PutObject` 動作的許可，讓他們可將物件新增至儲存貯體。不過，`Condition` 陳述式會限制所上載物件上允許的索引標籤金鑰和值。在此範例中，使用者只能將具有值設為 `Finance` 的特定索引標籤金鑰 (`Department`) 的物件新增至儲存貯體。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [{
        "Principal":{
            "AWS":[
                 "arn:aws:iam::111122223333:user/JohnDoe"
         ]
        },
        "Effect": "Allow",
        "Action": [
            "s3:PutObject"
        ],
        "Resource": [
            "arn:aws:s3:::amzn-s3-demo-bucket/*"
        ],
        "Condition": {
            "StringEquals": {
                "s3:RequestObjectTag/Department": "Finance"
            }
        }
    }]
}
```

------

## 使用全域條件金鑰管理物件存取
<a name="example-bucket-policies-global-condition-keys"></a>

[全域條件索引](https://docs.aws.amazon.com//IAM/latest/UserGuide/reference_policies_condition-keys.html)鍵是具有 `aws` 字首的條件內容索引鍵。 AWS 服務 可支援全域條件索引鍵或包含服務字首的服務特定索引鍵。您可以使用 JSON 政策的 `Condition` 元素，來比較請求中的金鑰和您在政策中指定的金鑰值。

### 限制只能存取 Amazon S3 伺服器存取日誌交付
<a name="example-bucket-policies-global-condition-keys-1"></a>

在下列範例儲存貯體政策中，[https://docs.aws.amazon.com//IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn](https://docs.aws.amazon.com//IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn) 全域條件金鑰，用來將提出服務對服務請求之資源的 [Amazon Resource Name (ARN)](https://docs.aws.amazon.com//IAM/latest/UserGuide/reference_identifiers.html#identifiers-arns) 與您在政策中所指定的 ARN 進行比較。`aws:SourceArn` 全域條件金鑰用來防止 Amazon S3 服務在服務之間用作交易期間的[混淆代理人](https://docs.aws.amazon.com//IAM/latest/UserGuide/confused-deputy.html)。只允許 Amazon S3 服務將物件新增至 Amazon S3 儲存貯體。

此範例儲存貯體政策只向日誌記錄服務主體 (`logging.s3.amazonaws.com`) 授予 `s3:PutObject` 許可。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowPutObjectS3ServerAccessLogsPolicy",
            "Principal": {
                "Service": "logging.s3.amazonaws.com"
            },
            "Effect": "Allow",
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket-logs/*",
            "Condition": {
                "StringEquals": {
                "aws:SourceAccount": "111122223333"
                },
                "ArnLike": {
                "aws:SourceArn": "arn:aws:s3:::amzn-s3-demo-source-bucket1"
                }
            }
        },
        {
            "Sid": "RestrictToS3ServerAccessLogs",
            "Effect": "Deny",
            "Principal": "*",
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket-logs/*",
            "Condition": {
                "ForAllValues:StringNotEquals": {
                    "aws:PrincipalServiceNamesList": "logging.s3.amazonaws.com"
                }
            }
        }
    ]
}
```

------

### 僅允許存取您的組織
<a name="example-bucket-policies-global-condition-keys-2"></a>

如果您想要要求存取資源的所有 [IAM 主體](https://docs.aws.amazon.com//IAM/latest/UserGuide/intro-structure.html#intro-structure-principal)來自組織中 AWS 帳戶 的 （包括 AWS Organizations 管理帳戶），您可以使用 `aws:PrincipalOrgID`全域條件金鑰。

若要授予或限制此類型的存取權，請在儲存貯體政策中定義 `aws:PrincipalOrgID` 條件，並將值設為您的[組織 ID](https://docs.aws.amazon.com//organizations/latest/userguide/orgs_manage_org_details.html)。組織 ID 是用來控制對儲存貯體的存取。當您使用 `aws:PrincipalOrgID` 條件時，來自儲存貯體政策的許可也會套用至新增至組織的所有新帳戶。

以下是資源型儲存貯體政策的範例，您可以使用此政策，授予組織中特定 IAM 主體存取儲存貯體的權限。透過將 `aws:PrincipalOrgID` 全域條件金鑰新增至儲存貯體政策，現在需要主體帳戶位於您的組織中，才能取得資源的存取權。即使您在授予存取權時意外指定了不正確的帳戶，[aws:PrincipalOrgID 全域條件金鑰](https://docs.aws.amazon.com//IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-principalorgid)也會作為額外的防護。當此全域金鑰用於政策時，其可防止指定組織以外的所有主體存取 S3 儲存貯體。只有來自所列組織中帳戶的主體才能取得資源的存取權。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [{
        "Sid": "AllowGetObject",
        "Principal": {
            "AWS": "*"
        },
        "Effect": "Allow",
        "Action": "s3:GetObject",
        "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*",
        "Condition": {
            "StringEquals": {
                "aws:PrincipalOrgID": ["o-aa111bb222"]
            }
        }
    }]
}
```

------

## 根據 HTTP 或 HTTPS 請求管理存取
<a name="example-bucket-policies-HTTP-HTTPS"></a>

### 限制僅 HTTPS 請求才能存取
<a name="example-bucket-policies-use-case-HTTP-HTTPS-1"></a>

如果您想要防止潛在攻擊者操控網路流量，可以使用 HTTPS (TLS) 來僅允許加密連線，同時限制 HTTP 請求存取您的儲存貯體。若要判斷請求是 HTTP 還是 HTTPS，請在 S3 儲存貯體政策中使用 [https://docs.aws.amazon.com//IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-securetransport](https://docs.aws.amazon.com//IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-securetransport) 全域條件金鑰。`aws:SecureTransport` 條件金鑰會檢查是否已使用 HTTP 傳送請求。

如果請求傳回 `true`，則請求是透過 HTTPS 傳送。如果請求傳回 `false`，則請求是透過 HTTP 傳送。然後，您可以根據所需的請求配置來允許或拒絕對儲存貯體的存取。

在下列範例中，儲存貯體政策明確地拒絕 HTTP 請求。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [{
        "Sid": "RestrictToTLSRequestsOnly",
        "Action": "s3:*",
        "Effect": "Deny",
        "Resource": [
            "arn:aws:s3:::amzn-s3-demo-bucket",
            "arn:aws:s3:::amzn-s3-demo-bucket/*"
        ],
        "Condition": {
            "Bool": {
                "aws:SecureTransport": "false"
            }
        },
        "Principal": "*"
    }]
}
```

------

### 限制對特定 HTTP 參照的存取
<a name="example-bucket-policies-HTTP-HTTPS-2"></a>

假設您擁有具備網域名稱 (*`www.example.com`* 或 *`example.com`*) 的網站，其中包含您儲存貯體 (名為 `amzn-s3-demo-bucket`) 中存放之照片和影片的連結。根據預設，所有 Amazon S3 資源都是私有的，因此只有 AWS 帳戶 建立資源的 才能存取它們。

若要允許網站中這些物件的讀取存取，您可以新增一個儲存貯體政策，允許條件為 `GET` 請求必須源自於特定網頁的 `s3:GetObject` 許可。下列政策會使用 `StringLike` 條件搭配 `aws:Referer` 條件金鑰來限制請求。

請確定您使用的瀏覽器在請求中包含 HTTP `referer` 標頭。

**警告**  
我們建議您使用 `aws:Referer` 條件金鑰時要小心。包含公開已知 HTTP 推薦者標頭值相當危險。未授權方可以使用修改的或自訂瀏覽器來提供他們選擇的任何 `aws:Referer` 值。因此，請勿使用 `aws:Referer` 來防止未經授權方提出直接 AWS 請求。  
`aws:Referer` 條件金鑰僅用於允許客戶保護其數位內容 (例如存放在 Amazon S3 中的內容)，使其不被未經授權的第三方網站參考。如需詳細資訊，請參閱《*IAM 使用者指南》*中的 [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-referer](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-referer)。

## 管理使用者對特定資料夾的存取
<a name="example-bucket-policies-folders"></a>

### 授予使用者存取特定資料夾的權限
<a name="example-bucket-policies-folders-1"></a>

假設您正在嘗試授予使用者存取特定資料夾的權限。如果 IAM 使用者和 S3 儲存貯體屬於相同 AWS 帳戶，則您可以使用 IAM 政策授予使用者存取特定儲存貯體資料夾的權限。透過此方式，您不需要更新儲存貯體政策來授予存取權。您可以將 IAM 政策新增至多個使用者可切換的 IAM 角色。

如果 IAM 身分和 S3 儲存貯體屬於不同 AWS 帳戶，則您必須在 IAM 政策和儲存貯體政策中授予跨帳戶存取權。如需如何授予跨帳户存取權的詳細資訊，請參閱[授予跨帳戶儲存貯體許可的儲存貯體擁有者](https://docs.aws.amazon.com//AmazonS3/latest/userguide/example-walkthroughs-managing-access-example2.html)。

下列範例儲存貯體政策僅授予 `JohnDoe` 其資料夾 (`home/JohnDoe/`) 的完整主控台存取權。透過建立 `home` 資料夾並將適當的許可授予使用者，您可以讓多個使用者共用單一儲存貯體。此政策包含三個 `Allow` 陳述式：
+ `AllowRootAndHomeListingOfCompanyBucket`：允許使用者許 (`JohnDoe`) 列出 `amzn-s3-demo-bucket` 儲存貯體根層級和 `home` 資料夾中的物件。此陳述式還允許使用者透過使用主控台搜尋字首 `home/`。
+ `AllowListingOfUserFolder`：允許使用者 (`JohnDoe`) 列出 `home/JohnDoe/` 資料夾和任何子資料夾中的所有物件。
+ `AllowAllS3ActionsInUserFolder`：透過授予`Read`、`Write` 和 `Delete` 許可來允許使用者執行所有 Amazon S3 動作。許可限於儲存貯體擁有者的主資料夾。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowRootAndHomeListingOfCompanyBucket",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::111122223333:user/JohnDoe"
                ]
            },
            "Effect": "Allow",
            "Action": ["s3:ListBucket"],
            "Resource": ["arn:aws:s3:::amzn-s3-demo-bucket"],
            "Condition": {
                "StringEquals": {
                    "s3:prefix": ["", "home/", "home/JohnDoe"],
                    "s3:delimiter": ["/"]
                }
            }
        },
        {
            "Sid": "AllowListingOfUserFolder",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::111122223333:user/JohnDoe"
                ]
            },
            "Action": ["s3:ListBucket"],
            "Effect": "Allow",
            "Resource": ["arn:aws:s3:::amzn-s3-demo-bucket"],
            "Condition": {
                "StringLike": {
                    "s3:prefix": ["home/JohnDoe/*"]
                }
            }
        },
        {
            "Sid": "AllowAllS3ActionsInUserFolder",
            "Effect": "Allow",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::111122223333:user/JohnDoe"
                ]
            },
            "Action": ["s3:*"],
            "Resource": ["arn:aws:s3:::amzn-s3-demo-bucket/home/JohnDoe/*"]
        }
    ]
}
```

------

## 管理存取日誌的存取
<a name="example-bucket-policies-access-logs"></a>

### 授予 Application Load Balancer 的存取權以啟用存取
<a name="example-bucket-policies-access-logs-1"></a>

對 Application Load Balancer 啟用存取記錄時，您必須指定 S3 儲存貯體的名稱，負載平衡器將在其中[存放日誌](https://docs.aws.amazon.com//elasticloadbalancing/latest/application/enable-access-logging.html#access-log-create-bucket)。儲存貯體必須具有[附加的政策](https://docs.aws.amazon.com//elasticloadbalancing/latest/application/enable-access-logging.html#attach-bucket-policy)，以授予 Elastic Load Balancing 寫入儲存貯體的許可。

在下列範例中，儲存貯體政策會授予 Elastic Load Balancing (ELB) 將存取日誌寫入儲存貯體的許可：

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:root"
            },
            "Effect": "Allow",
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/prefix/AWSLogs/111122223333/*"
        }
    ]
}
```

------

**注意**  
務必針對您的 AWS 區域將 `elb-account-id` 取代為 Elastic Load Balancing 的 AWS 帳戶 ID。如需 Elastic Load Balancing 區域的清單，請參閱《Elastic Load Balancing 使用者指南》**中的[將政策附加到 Amazon S3 儲存貯體](https://docs.aws.amazon.com//elasticloadbalancing/latest/classic/enable-access-logs.html#attach-bucket-policy)。

如果您的 AWS 區域 未出現在支援的 Elastic Load Balancing 區域清單中，請使用下列政策，將許可授予指定的日誌交付服務。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
       "Principal": {
         "Service": "logdelivery.elasticloadbalancing.amazonaws.com"
          },
      "Effect": "Allow",
      "Action": "s3:PutObject",
      "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/prefix/AWSLogs/111122223333/*"
    }
  ]
}
```

------

然後，務必啟用 [Elastic Load Balancing 存取日誌](https://docs.aws.amazon.com//elasticloadbalancing/latest/application/enable-access-logging.html#enable-access-logs)來設定這些存取日誌。您可以建立測試檔案來[驗證儲存貯體許可](https://docs.aws.amazon.com//elasticloadbalancing/latest/application/enable-access-logging.html#verify-bucket-permissions)。

## 管理對 Amazon CloudFront OAI 的存取
<a name="example-bucket-policies-cloudfront"></a>

### 對 Amazon CloudFront OAI 授予許可
<a name="example-bucket-policies-cloudfront-1"></a>

下列儲存貯體政策範例對 CloudFront 原始存取身分 (OAI) 授予許可，以允許取得 (讀取) S3 儲存貯體中的所有物件。您可以使用 CloudFront OAI 來允許使用者透過 CloudFront 存取儲存貯體中的物件，而不是直接透過 Amazon S3 存取。如需詳細資訊，請參閱《Amazon CloudFront 開發人員指南》**中的[使用原始存取身分限制對 Amazon S3 內容的存取](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-restricting-access-to-s3.html)。

下列政策使用 OAI 的 ID 作為政策的 `Principal`。如需使用 S3 儲存貯體政策，對 CloudFront OAI 授予存取的詳細資訊，請參閱《Amazon CloudFront 開發人員指南》**中的[從原始存取身分 (OAI) 遷移至原始存取控制 (OAC)](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-restricting-access-to-s3.html#migrate-from-oai-to-oac)。

若要使用此範例：
+ 將 `EH1HDMB1FH2TC` 取代為 OAI 的 ID。若要尋找 OAI 的 ID，請參閱 CloudFront 主控台上的[原始存取身分頁面](https://console.aws.amazon.com/cloudfront/home?region=us-east-1#oai:)，或使用 CloudFront API 中的 [https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_ListCloudFrontOriginAccessIdentities.html](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_ListCloudFrontOriginAccessIdentities.html)。
+ 用您的儲存貯體名稱取代 `amzn-s3-demo-bucket`。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Id": "PolicyForCloudFrontPrivateContent",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity EH1HDMB1FH2TC"
            },
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*"
        }
    ]
}
```

------

## 管理對 Amazon S3 Storage Lens 的存取
<a name="example-bucket-policies-lens"></a>

### 授予 Amazon S3 Storage Lens 的許可
<a name="example-bucket-policies-lens-1"></a>

S3 Storage Lens 會彙總您的指標，並在 Amazon S3 主控台 **Buckets** (儲存貯體) 頁面上的 **Account snapshot** (帳戶快照) 區段中顯示資訊。S3 Storage Lens 也提供互動式儀表板，您可以用來視覺化洞見和趨勢、標記極端值，以及接收最佳化儲存成本和套用資料保護最佳實務的建議。您的儀表板具有向下切入選項，可在組織、帳戶、 AWS 區域儲存類別、儲存貯體、字首或 Storage Lens 群組層級產生和視覺化洞見。您也可以將 CSV 或 Parquet 格式的每日指標報告傳送至一般用途 S3 儲存貯體，或直接將指標匯出至 AWS受管 S3 資料表儲存貯體。

S3 Storage Lens 可將您彙總的儲存體用量指標匯出到 Amazon S3 儲存貯體，以供進一步分析。S3 Storage Lens 存放其指標匯出的儲存貯體稱為「目的地儲存貯體」**。設定 S3 Storage Lens 指標匯出時，您必須具有目的地儲存貯體的儲存貯體政策。如需詳細資訊，請參閱[使用 Amazon S3 Storage Lens 監控您的儲存活動和用量](storage_lens.md)。

下列範例儲存貯體政策授予 Amazon S3 許可，將物件 (`PUT` 請求) 寫入至目的地儲存貯體。設定 S3 Storage Lens 指標匯出時，您可以對*目的地儲存貯體*使用類似這樣的儲存貯體政策。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "S3StorageLensExamplePolicy",
            "Effect": "Allow",
            "Principal": {
                "Service": "storage-lens.s3.amazonaws.com"
            },
            "Action": "s3:PutObject",
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-destination-bucket/destination-prefix/StorageLens/111122223333/*"
            ],
            "Condition": {
                "StringEquals": {
                    "s3:x-amz-acl": "bucket-owner-full-control",
                    "aws:SourceAccount": "111122223333",
                    "aws:SourceArn": "arn:aws:s3:region-code:111122223333:storage-lens/storage-lens-dashboard-configuration-id"
                }
            }
        }
    ]
}
```

------

當您設定 S3 Storage Lens 組織層級指標匯出時，對上一個儲存貯體政策的 `Resource` 陳述式使用下列修改。

```
1. "Resource": "arn:aws:s3:::amzn-s3-demo-destination-bucket/destination-prefix/StorageLens/your-organization-id/*",
```

## 管理 S3 庫存、S3 分析和 S3 庫存報告的許可
<a name="example-bucket-policies-s3-inventory"></a>

### 授予 S3 清查與 S3 分析的許可
<a name="example-bucket-policies-s3-inventory-1"></a>

S3 清查會建立儲存貯體中的物件清單，而 S3 分析儲存體類別分析匯出會建立分析中所使用資料的輸出檔案。庫存列出其物件的儲存貯體稱為*來源儲存貯體*。庫存檔案和分析匯出檔案撰寫至其中的儲存貯體稱為「目的地儲存貯體」**。設定庫存或分析匯出時，您必須針對目的地儲存貯體建立儲存貯體政策。如需詳細資訊，請參閱[使用 S3 庫存清單編目和分析資料](storage-inventory.md)及[Amazon S3 分析 – 儲存類別分析](analytics-storage-class.md)。

下列儲存貯體政策範例授予 Amazon S3 許可，允許從來源儲存貯體的帳戶將物件 (`PUT` 請求) 寫入至目的地儲存貯體。設定 S3 清查與 S3 分析匯出時，您可以在目標儲存貯體上使用這類的儲存貯體政策。

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

****  

```
{  
      "Version":"2012-10-17",		 	 	 
      "Statement": [
        {
            "Sid": "InventoryAndAnalyticsExamplePolicy",
            "Effect": "Allow",
            "Principal": {
                "Service": "s3.amazonaws.com"
            },
            "Action": "s3:PutObject",
            "Resource": [
            "arn:aws:s3:::amzn-s3-demo-destination-bucket/*"
            ],
            "Condition": {
                "ArnLike": {
                "aws:SourceArn": "arn:aws:s3:::amzn-s3-demo-source-bucket"
                },
                "StringEquals": {
                    "aws:SourceAccount": "111122223333",
                    "s3:x-amz-acl": "bucket-owner-full-control"
                }
            }
        }
    ]
}
```

------

### 控制 S3 庫存報告組態建立
<a name="example-bucket-policies-s3-inventory-2"></a>

[使用 S3 庫存清單編目和分析資料](storage-inventory.md) 會建立 S3 儲存貯體中物件的清單，以及各物件的中繼資料。`s3:PutInventoryConfiguration` 許可允許使用者建立預設包含所有物件中繼資料欄位的庫存組態，以及指定要儲存庫存的目的地儲存貯體。對目的地儲存貯體中的物件具有讀取權限的使用者可以存取庫存報告中所有可用的物件中繼資料欄位。如需 S3 庫存中可用的中繼資料欄位的詳細資訊，請參閱 [Amazon S3 清查清單](storage-inventory.md#storage-inventory-contents)。

若要限制使用者不得設定 S3 庫存報告，請移除該使用者的 `s3:PutInventoryConfiguration` 許可。

S3 庫存報告組態中的某些物件中繼資料欄位是選用的，這表示這些欄位預設可供使用，但當您授予使用者 `s3:PutInventoryConfiguration` 許可時，這些欄位可能會受到限制。您可以使用 `s3:InventoryAccessibleOptionalFields` 條件索引鍵，控制使用者是否可以在報告中包含這些選用的中繼資料欄位。如需 S3 庫存清單中可用的選用中繼資料欄位清單，請參閱 Amazon Simple Storage Service API 參考**中的[https://docs.aws.amazon.com//AmazonS3/latest/API/API_PutBucketInventoryConfiguration.html#API_PutBucketInventoryConfiguration_RequestBody](https://docs.aws.amazon.com//AmazonS3/latest/API/API_PutBucketInventoryConfiguration.html#API_PutBucketInventoryConfiguration_RequestBody)。

若要准許使用者建立具有特定選用中繼資料欄位的庫存組態，請使用 `s3:InventoryAccessibleOptionalFields` 條件索引鍵來縮小儲存貯體政策中套用的條件。

下列範例政策准許使用者 (`Ana`) 有條件地建立庫存組態。政策中的 `ForAllValues:StringEquals` 條件使用 `s3:InventoryAccessibleOptionalFields` 條件索引鍵來指定兩個允許的選用中繼資料欄位，即 `Size` 和 `StorageClass`。因此，當 `Ana` 建立庫存組態時，唯一可包含的選用中繼資料欄位是 `Size` 和 `StorageClass`。

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

****  

```
{
	"Id": "InventoryConfigPolicy",
	"Version":"2012-10-17",		 	 	 
	"Statement": [{
			"Sid": "AllowInventoryCreationConditionally",
			"Effect": "Allow",			
			"Principal": {
				"AWS": "arn:aws:iam::111122223333:user/Ana"
			},			
			"Action": 
				"s3:PutInventoryConfiguration",
			"Resource": 
				"arn:aws:s3:::DOC-EXAMPLE-SOURCE-BUCKET",
			"Condition": {
				"ForAllValues:StringEquals": {
					"s3:InventoryAccessibleOptionalFields": [
					   "Size",
					   "StorageClass"
					   ]
				  }
				}
			}
	]
}
```

------

若要限制使用者不得設定包含特定選用中繼資料欄位的 S3 庫存報告，請將明確的 `Deny` 陳述式新增至來源儲存貯體的儲存貯體政策。下列範例儲存貯體政策會拒絕使用者 `Ana` 在來源儲存貯體 `amzn-s3-demo-source-bucket` 中，建立包含選用 `ObjectAccessControlList` 或 `ObjectOwner` 中繼資料欄位的庫存組態。使用者 `Ana` 仍然可以建立具有其他選用中繼資料欄位的庫存組態。

```
 1. {
 2. 	"Id": "InventoryConfigSomeFields",
 3. 	"Version": "2012-10-17",		 	 	 
 4. 	"Statement": [{
 5. 			"Sid": "AllowInventoryCreation",
 6. 			"Effect": "Allow",
 7. 			"Principal": {
 8. 				"AWS": "arn:aws:iam::111122223333:user/Ana"
 9. 			},
10. 			"Action": "s3:PutInventoryConfiguration",			
11. 			"Resource": 
12. 				"arn:aws:s3:::amzn-s3-demo-source-bucket",
13. 
14. 		},
15. 		{
16. 			"Sid": "DenyCertainInventoryFieldCreation",
17. 			"Effect": "Deny",
18. 			"Principal": {
19. 				"AWS": "arn:aws:iam::111122223333:user/Ana"
20. 			},
21. 			"Action": "s3:PutInventoryConfiguration",	
22. 			"Resource": 
23. 			  "arn:aws:s3:::amzn-s3-demo-source-bucket",			
24. 			"Condition": {
25. 				"ForAnyValue:StringEquals": {
26. 					"s3:InventoryAccessibleOptionalFields": [
27. 					   "ObjectOwner",
28. 					   "ObjectAccessControlList"
29. 					   ]
30. 				  }
31. 				}
32. 			}
33. 	]
34. }
```

**注意**  
在儲存貯體政策中使用 `s3:InventoryAccessibleOptionalFields` 條件索引鍵不會對根據現有庫存組態傳送庫存報告造成影響。

**重要**  
建議您使用 `ForAllValues` 搭配 `Allow` 效果或使用 `ForAnyValue` 搭配 `Deny`效果，如先前範例所示。  
不要使用 `ForAllValues` 搭配 `Deny` 效果或使用 `ForAnyValue` 搭配 `Allow` 效果，因為這些組合可能會過度限制並封鎖庫存組態刪除。  
若要進一步了解 `ForAllValues` 和 `ForAnyValue` 條件集運算子，請參閱《IAM 使用者指南》**中的[多值內容金鑰](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-single-vs-multi-valued-context-keys.html#reference_policies_condition-multi-valued-context-keys)。

## 需要 MFA
<a name="example-bucket-policies-MFA"></a>

Amazon S3 支援 MFA 保護的 API 存取，在存取 Amazon S3 資源時，此功能可以強制執行 Multi-Factor Authentication (MFA)。多重要素驗證提供額外層級的安全性，您可以套用至您的 AWS 環境。MFA 是一種安全功能，需要使用者提供有效的 MFA 代碼來證明 MFA 裝置的實體擁有。如需詳細資訊，請參閱 [AWS 多重要素驗證](https://aws.amazon.com/mfa/)。只要是請求存取 Amazon S3 資源，您都可以要求 MFA。

若要強制執行 MFA 要求，請在儲存貯體政策中使用 `aws:MultiFactorAuthAge` 條件金鑰。IAM 使用者可以使用 AWS Security Token Service () 發行的臨時登入資料來存取 Amazon S3 資源AWS STS。您可以在 AWS STS 請求時提供 MFA 代碼。

當 Amazon S3 收到實施多重要素驗證的請求時，`aws:MultiFactorAuthAge` 條件金鑰會提供一個數值，指出暫時憑證是在多久之前建立 (以秒為單位)。如果要求中所提供的暫時性憑證不是使用 MFA 裝置所建立，則此金鑰值為 null (不存在)。在儲存貯體政策中，您可以新增可檢查此值的條件，如下列範例所示。

如果請求並未使用 MFA 進行驗證，此範例政策會拒絕對 `amzn-s3-demo-bucket` 儲存貯體中的 *`/taxdocuments`* 資料夾進行任何 Amazon S3 操作。若要進一步了解 MFA，請參閱*《IAM 使用者指南》*中的[在 AWS中使用多重要素驗證 (MFA)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_mfa.html)。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Id": "123",
    "Statement": [
      {
        "Sid": "",
        "Effect": "Deny",
        "Principal": "*",
        "Action": "s3:*",
        "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/taxdocuments/*",
        "Condition": { "Null": { "aws:MultiFactorAuthAge": true }}
      }
    ]
 }
```

------

如果 `aws:MultiFactorAuthAge` 條件金鑰值為 null，則 `Condition` 區塊中的 `Null` 條件會評估為 `true`，表示已在沒有 MFA 裝置的情況下建立請求中的暫時性安全憑證。

下列儲存貯體政策是先前儲存貯體政策的延伸。下列政策包含兩個政策陳述式。一個陳述式會允許任何人在儲存貯體 (`amzn-s3-demo-bucket`) 上的 `s3:GetObject` 許可。另一個陳述式則會透過要求 MFA，進一步限制對儲存貯體中 `amzn-s3-demo-bucket/taxdocuments` 資料夾的存取。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Id": "123",
    "Statement": [
      {
        "Sid": "DenyInsecureConnections",
        "Effect": "Deny",
        "Principal": {
            "AWS": "arn:aws:iam::111122223333:root"
        },
        "Action": "s3:*",
        "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/taxdocuments/*",
        "Condition": { "Null": { "aws:MultiFactorAuthAge": true } }
      },
      {
        "Sid": "AllowGetObject",
        "Effect": "Allow",
        "Principal": {
            "AWS": "arn:aws:iam::111122223333:root"
        },
        "Action": ["s3:GetObject"],
        "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*"
      }
    ]
 }
```

------

您可以選擇性地使用數值條件，來限制 `aws:MultiFactorAuthAge` 金鑰有效的持續時間。您使用 `aws:MultiFactorAuthAge` 金鑰指定的持續時間，與驗證請求時所使用之臨時安全憑證的生命週期無關。

例如，除了需要 MFA 身分驗證之外，下列儲存貯體政策也會檢查在多久之前建立暫時性工作階段。如果 `aws:MultiFactorAuthAge` 金鑰值指出已在一小時 (3,600 秒) 之前建立暫時性工作階段，則此政策會拒絕任何操作。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Id": "123",
    "Statement": [
      {
        "Sid": "",
        "Effect": "Deny",
        "Principal": "*",
        "Action": "s3:*",
        "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/taxdocuments/*",
        "Condition": {"Null": {"aws:MultiFactorAuthAge": true }}
      },
      {
        "Sid": "",
        "Effect": "Deny",
        "Principal": "*",
        "Action": "s3:*",
        "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/taxdocuments/*",
        "Condition": {"NumericGreaterThan": {"aws:MultiFactorAuthAge": 3600 }}
       },
       {
         "Sid": "",
         "Effect": "Allow",
         "Principal": "*",
         "Action": ["s3:GetObject"],
         "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*"
       }
    ]
 }
```

------

## 防止使用者刪除物件
<a name="using-with-s3-actions-related-to-bucket-subresources"></a>

這些使用者預設不具備任何許可。但當您建立政策時，您可能會授予使用者不打算授予的許可。為避免此等許可漏洞，您可以新增明確拒絕，撰寫較嚴格的存取政策。

若要明確禁止使用者或帳戶刪除物件，您必須將下列動作新增至儲存貯體政策：`s3:DeleteObject`、`s3:DeleteObjectVersion` 和 `s3:PutLifecycleConfiguration` 許可。由於您可以明確呼叫 `DELETE Object` API 操作來刪除物件，或設定其生命週期 (請參閱[管理物件的生命週期](object-lifecycle-mgmt.md))，讓 Amazon S3 在物件生命週期到期時移除物件，因此需要所有三個動作。

在下列政策範例中，您明確拒絕使用者 `MaryMajor` 的 `DELETE Object` 許可。明確的 `Deny` 陳述式一律會取代任何其他授予的許可。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "statement1",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::123456789012:user/MaryMajor"
      },
      "Action": [
        "s3:GetObjectVersion",
        "s3:GetBucketAcl"
      ],
      "Resource": [
        "arn:aws:s3:::amzn-s3-demo-bucket1",
	 	"arn:aws:s3:::amzn-s3-demo-bucket1/*"
      ]
    },
    {
      "Sid": "statement2",
      "Effect": "Deny",
      "Principal": {
        "AWS": "arn:aws:iam::123456789012:user/MaryMajor"
      },
      "Action": [
        "s3:DeleteObject",
        "s3:DeleteObjectVersion",
        "s3:PutLifecycleConfiguration"
      ],
      "Resource": [
        "arn:aws:s3:::amzn-s3-demo-bucket1",
	    "arn:aws:s3:::amzn-s3-demo-bucket1/*"
      ]
    }
  ]
}
```

------

# 使用條件索引鍵的儲存貯體政策範例
<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)。