

 適用於 Java 的 AWS SDK 1.x 已於 2025 年 12 月 31 日end-of-support。我們建議您遷移至 [AWS SDK for Java 2.x](https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/home.html)，以繼續接收新功能、可用性改善和安全性更新。

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

# 使用 Amazon S3 儲存貯體政策管理對儲存貯體的存取
<a name="examples-s3-bucket-policies"></a>

您可以設定、取得或刪除儲存*貯體政策*，以管理對儲存 Amazon S3 貯體的存取。

## 設定儲存貯體政策
<a name="set-s3-bucket-policy"></a>

您可以透過下列方式設定特定 S3 儲存貯體的儲存貯體政策：
+ 呼叫 AmazonS3 用戶端的 ，`setBucketPolicy`並提供 [SetBucketPolicyRequest](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/s3/model/SetBucketPolicyRequest.html) 
+ 使用採用儲存貯體名稱和政策文字的`setBucketPolicy`過載直接設定政策 (JSON 格式）

 **匯入** 

```
import com.amazonaws.AmazonServiceException;
import com.amazonaws.auth.policy.Policy;
import com.amazonaws.auth.policy.Principal;
```

 **Code** 

```
    s3.setBucketPolicy(bucket_name, policy_text);
} catch (AmazonServiceException e) {
    System.err.println(e.getErrorMessage());
    System.exit(1);
}
```

### 使用政策類別來產生或驗證政策
<a name="use-s3-bucket-policy-class"></a>

提供儲存貯體政策給 時`setBucketPolicy`，您可以執行下列動作：
+ 直接將政策指定為 JSON 格式文字的字串
+ 使用 政策類別建置[政策](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/auth/policy/Policy.html) 

透過使用 `Policy`類別，您不需要擔心文字字串的格式是否正確。若要從 `Policy`類別取得 JSON 政策文字，請使用其 `toJson` 方法。

 **匯入** 

```
import com.amazonaws.auth.policy.Resource;
import com.amazonaws.auth.policy.Statement;
import com.amazonaws.auth.policy.actions.S3Actions;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
```

 **Code** 

```
        new Statement(Statement.Effect.Allow)
                .withPrincipals(Principal.AllUsers)
                .withActions(S3Actions.GetObject)
                .withResources(new Resource(
                        "{region-arn}s3:::" + bucket_name + "/*")));
return bucket_policy.toJson();
```

`Policy` 類別也提供`fromJson`一種方法，可嘗試使用傳入的 JSON 字串來建置政策。方法會進行驗證，以確保文字可轉換為有效的政策結構，如果政策文字無效`IllegalArgumentException`， 便會失敗。

```
Policy bucket_policy = null;
try {
    bucket_policy = Policy.fromJson(file_text.toString());
} catch (IllegalArgumentException e) {
    System.out.format("Invalid policy text in file: \"%s\"",
            policy_file);
    System.out.println(e.getMessage());
}
```

您可以使用此技術預先驗證從檔案或其他方式讀取的政策。

請參閱 GitHub 上的[完整範例](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/s3/src/main/java/aws/example/s3/SetBucketPolicy.java)。

## 取得儲存貯體政策
<a name="get-s3-bucket-policy"></a>

若要擷取 儲存 Amazon S3 貯體的政策，請呼叫 AmazonS3 用戶端的 `getBucketPolicy`方法，將儲存貯體的名稱傳遞給它以從中取得政策。

 **匯入** 

```
import com.amazonaws.AmazonServiceException;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
```

 **Code** 

```
  try {
      BucketPolicy bucket_policy = s3.getBucketPolicy(bucket_name);
      policy_text = bucket_policy.getPolicyText();
  } catch (AmazonServiceException e) {
      System.err.println(e.getErrorMessage());
      System.exit(1);
  }
```

如果命名的儲存貯體不存在，如果您無法存取它，或如果它沒有儲存貯體政策，`AmazonServiceException`則會擲出 。

請參閱 GitHub 上的[完整範例](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/s3/src/main/java/aws/example/s3/GetBucketPolicy.java)。

## 刪除儲存貯體政策
<a name="delete-s3-bucket-policy"></a>

若要刪除儲存貯體政策，請呼叫 AmazonS3 用戶端的 `deleteBucketPolicy`，並提供儲存貯體名稱。

 **匯入** 

```
import com.amazonaws.AmazonServiceException;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
```

 **Code** 

```
  try {
      s3.deleteBucketPolicy(bucket_name);
  } catch (AmazonServiceException e) {
      System.err.println(e.getErrorMessage());
      System.exit(1);
  }
```

即使儲存貯體還沒有政策，此方法也會成功。如果您指定的儲存貯體名稱不存在，或者您無法存取儲存貯體，`AmazonServiceException`則會擲回 。

請參閱 GitHub 上的[完整範例](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/s3/src/main/java/aws/example/s3/DeleteBucketPolicy.java)。

## 詳細資訊
<a name="more-info"></a>
+  Amazon Simple Storage Service 《 使用者指南》中的[存取政策語言概觀](https://docs.aws.amazon.com/AmazonS3/latest/dev/access-policy-language-overview.html) 
+  Amazon Simple Storage Service 《 使用者指南》中的[儲存貯體政策範例](https://docs.aws.amazon.com/AmazonS3/latest/dev/example-bucket-policies.html) 