バケットポリシーを使用した Amazon S3 バケットへのアクセス管理 - AWS SDK for Java

バケットポリシーを使用した Amazon S3 バケットへのアクセス管理

バケットポリシーを設定、取得、または削除して、Amazon S3 バケットへのアクセスを管理できます。

バケットポリシーの設定

特定の S3 バケットにバケットポリシーを設定するには。

  • AmazonS3 クライアントの setBucketPolicy を呼び出し、SetBucketPolicyRequest を渡します。

  • バケット名とポリシーテキスト (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 クラスを使用してポリシーを生成または検証する

バケットポリシーを setBucketPolicy に渡す場合、以下のことができます。

  • ポリシーを JSON 形式のテキスト文字列として直接指定できます。

  • Policy クラスを使用してポリシーを構築できます。

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( "arn:aws: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 で完全な例をご覧ください。

バケットポリシーの取得

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 で完全な例をご覧ください。

バケットポリシーの削除

バケットポリシーを削除するには、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 で完全な例をご覧ください。

詳細