S3 バッチ操作を使用した S3 オブジェクトロックの有効化 - Amazon Simple Storage Service

S3 バッチ操作を使用した S3 オブジェクトロックの有効化

Amazon S3 バッチオペレーションを S3 Object Lock とともに使用すると、一度に多くの Amazon S3 オブジェクトの保持を管理したり、リーガルホールドを有効にしたりできます。マニフェストでターゲットオブジェクトのリストを指定し、そのマニフェストをジョブの完了のためにバッチ操作に送信します。詳細については、「S3 オブジェクトロックの保持」および「S3 オブジェクトロックのリーガルホールド」を参照してください。

以下の例では、S3 バッチオペレーションアクセス許可を持つ AWS Identity and Access Management (IAM) ロールを作成し、そのロールのアクセス許可を更新して Object Lock を有効化するジョブを作成する方法を示します。S3 バッチオペレーションジョブのオブジェクトを識別する CSV マニフェストも必要です。詳細については、「マニフェストの指定」を参照してください。

次の例を実行するには、user input placeholders をユーザー自身の情報に置き換えます。

  1. IAM ロールを作成し、実行する S3 バッチ操作のアクセス許可を割り当てます。

    このステップは、すべての S3 バッチ操作ジョブで必要です。

    export AWS_PROFILE='aws-user' read -d '' batch_operations_trust_policy <<EOF { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "batchoperations.s3.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] } EOF aws iam create-role --role-name batch_operations-objectlock \ --assume-role-policy-document "${batch_operations_trust_policy}"
  2. S3 オブジェクトロックを使用して S3 バッチ操作を実行するように設定します。

    このステップでは、ロールに以下のことを許可します。

    1. バッチ操作を実行するターゲットオブジェクトを含む S3 バケットでオブジェクトロックを実行します。

    2. マニフェスト CSV ファイルとオブジェクトがある S3 バケットを読み取る。

    3. S3 バッチ操作ジョブの結果をレポートバケットに書き込みます。

    read -d '' batch_operations_permissions <<EOF { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:GetBucketObjectLockConfiguration", "Resource": [ "arn:aws:s3:::{{amzn-s3-demo-manifest-bucket}}" ] }, { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:GetObjectVersion", "s3:GetBucketLocation" ], "Resource": [ "arn:aws:s3:::{{amzn-s3-demo-manifest-bucket}}/*" ] }, { "Effect": "Allow", "Action": [ "s3:PutObject", "s3:GetBucketLocation" ], "Resource": [ "arn:aws:s3:::{{amzn-s3-demo-completion-report-bucket}}/*" ] } ] } EOF aws iam put-role-policy --role-name batch_operations-objectlock \ --policy-name object-lock-permissions \ --policy-document "${batch_operations_permissions}"

次の例は、S3 バッチオペレーション許可を持つ IAM ロールを作成し、AWS SDK for Java を使用して Object Lock を有効にするジョブを作成するためにロールの許可を更新する方法を示しています。S3 バッチ操作ジョブのオブジェクトを識別する CSV マニフェストも必要です。詳細については、「マニフェストの指定」を参照してください。

以下のステップを実行します。

  1. IAM ロールを作成し、実行する S3 バッチ操作のアクセス許可を割り当てます。このステップは、すべての S3 バッチ操作ジョブで必要です。

  2. S3 オブジェクトロックを使用して S3 バッチ操作を実行するように設定します。

    ロールに以下のことを許可します。

    1. バッチ操作を実行するターゲットオブジェクトを含む S3 バケットでオブジェクトロックを実行します。

    2. マニフェスト CSV ファイルとオブジェクトがある S3 バケットを読み取る。

    3. S3 バッチ操作ジョブの結果をレポートバケットに書き込みます。

public void createObjectLockRole() { final String roleName = "batch_operations-object-lock"; final String trustPolicy = "{" + " \"Version\": \"2012-10-17\", " + " \"Statement\": [ " + " { " + " \"Effect\": \"Allow\", " + " \"Principal\": { " + " \"Service\": [" + " \"batchoperations.s3.amazonaws.com\"" + " ]" + " }, " + " \"Action\": \"sts:AssumeRole\" " + " } " + " ]" + "}"; final String bopsPermissions = "{" + " \"Version\": \"2012-10-17\"," + " \"Statement\": [" + " {" + " \"Effect\": \"Allow\"," + " \"Action\": \"s3:GetBucketObjectLockConfiguration\"," + " \"Resource\": [" + " \"arn:aws:s3:::amzn-s3-demo-manifest-bucket\"" + " ]" + " }," + " {" + " \"Effect\": \"Allow\"," + " \"Action\": [" + " \"s3:GetObject\"," + " \"s3:GetObjectVersion\"," + " \"s3:GetBucketLocation\"" + " ]," + " \"Resource\": [" + " \"arn:aws:s3:::amzn-s3-demo-manifest-bucket/*\"" + " ]" + " }," + " {" + " \"Effect\": \"Allow\"," + " \"Action\": [" + " \"s3:PutObject\"," + " \"s3:GetBucketLocation\"" + " ]," + " \"Resource\": [" + " \"arn:aws:s3:::amzn-s3-demo-completion-report-bucket/*\"" + " ]" + " }" + " ]" + "}"; final AmazonIdentityManagement iam = AmazonIdentityManagementClientBuilder.defaultClient(); final CreateRoleRequest createRoleRequest = new CreateRoleRequest() .withAssumeRolePolicyDocument(bopsPermissions) .withRoleName(roleName); final CreateRoleResult createRoleResult = iam.createRole(createRoleRequest); final PutRolePolicyRequest putRolePolicyRequest = new PutRolePolicyRequest() .withPolicyDocument(bopsPermissions) .withPolicyName("batch_operations-permissions") .withRoleName(roleName); final PutRolePolicyResult putRolePolicyResult = iam.putRolePolicy(putRolePolicyRequest); }