

 AWS SDK for Java 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) を渡します。
+ バケット名とポリシーテキスト (JSON 形式) を受け取る `setBucketPolicy` オーバーロードを使用して、直接ポリシーを設定します。

 **インポート** 

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

 **コード** 

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

### Policy クラスを使用してポリシーを生成または検証する
<a name="use-s3-bucket-policy-class"></a>

バケットポリシーを `setBucketPolicy` に渡す場合、以下のことができます。
+ ポリシーを JSON 形式のテキスト文字列として直接指定できます。
+ [Policy](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;
```

 **コード** 

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

`Policy` クラスは、渡された JSON 文字列を使用してポリシーの構築を試行できる `fromJson` メソッドも提供します。このメソッドは、確実にテキストが有効なポリシー構造へと変換できることを検証し、ポリシーテキストが無効な場合には `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;
```

 **コード** 

```
  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;
```

 **コード** 

```
  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)