次の例は、信頼ポリシーを作成し、S3 バッチ操作と S3 オブジェクトロックの設定アクセス許可を設定する前の例に基づいています。この例は、2025 年 1 月 30 日の retain until
date
で S3 Object Lock 保持ガバナンスを複数のオブジェクトに適用する方法を示しています。また、マニフェストバケットを使用しレポートバケットに結果を書き込むバッチ操作ジョブを作成します。
次の例を実行するには、
をユーザー自身の情報に置き換えます。user input
placeholders
次の AWS CLI の例は、バッチオペレーションを使用して、複数のオブジェクトに S3 Object Lock 保持ガバナンスモードを適用する方法を示しています。
例 – 2025 年 1 月 30 日まで保持する複数のオブジェクトに S3 Object Lock 保持ガバナンスを適用する
export AWS_PROFILE='
aws-user
' export AWS_DEFAULT_REGION='us-west-2
' export ACCOUNT_ID=123456789012
export ROLE_ARN='arn:aws:iam::123456789012
:role/batch_operations-objectlock
' read -d ''OPERATION
<<EOF { "S3PutObjectRetention": { "Retention": { "RetainUntilDate":"2025-01-30T00:00:00
", "Mode":"GOVERNANCE" } } } EOF read -d ''MANIFEST
<<EOF { "Spec": { "Format": "S3BatchOperations_CSV_20180820", "Fields": [ "Bucket", "Key" ] }, "Location": { "ObjectArn": "arn:aws:s3:::", "ETag": "
amzn-s3-demo-manifest-bucket
/governance-objects-manifest.csvYour-manifest-ETag
" } } EOF read -d ''REPORT
<<EOF { "Bucket": "arn:aws:s3:::amzn-s3-demo-completion-report-bucket
T", "Format": "Report_CSV_20180820", "Enabled": true, "Prefix": "reports/governance-objects
", "ReportScope": "AllTasks" } EOF aws \ s3control create-job \ --account-id "${ACCOUNT_ID
}" \ --manifest "${MANIFEST
//$'\n'}" \ --operation "${OPERATION
//$'\n'/}" \ --report "${REPORT
//$'\n'}" \ --priority10
\ --role-arn "${ROLE_ARN
}" \ --client-request-token "$(uuidgen)" \ --region "${AWS_DEFAULT_REGION
}" \ --description "Put governance retention
";
例 – 複数のオブジェクト間での保持ガバナンスのバイパス
次の例は、信頼ポリシーを作成し、S3 バッチ操作と S3 オブジェクトロックの設定アクセス許可を設定する前の例に基づいています。また、複数のオブジェクト間で保持ガバナンスを省略する方法を示し、マニフェストバケットを使用しレポートバケットに結果を書き込むバッチ操作ジョブを作成します。
export AWS_PROFILE='
aws-user
' read -d '' bypass_governance_permissions <<EOF { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:BypassGovernanceRetention" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-manifest-bucket
/*" ] } ] } EOF aws iam put-role-policy --role-namebatch-operations-objectlock
--policy-namebypass-governance-permissions
--policy-document "${bypass_governance_permissions
}" export AWS_PROFILE='aws-user
' export AWS_DEFAULT_REGION='us-west-2
' export ACCOUNT_ID=123456789012
export ROLE_ARN='arn:aws:iam::123456789012
:role/batch_operations-objectlock
' read -d ''OPERATION
<<EOF { "S3PutObjectRetention": { "BypassGovernanceRetention": true, "Retention": { } } } EOF read -d ''MANIFEST
<<EOF { "Spec": { "Format": "S3BatchOperations_CSV_20180820", "Fields": [ "Bucket", "Key" ] }, "Location": { "ObjectArn": "arn:aws:s3:::", "ETag": "
amzn-s3-demo-manifest-bucket
/governance-objects-manifest.csvYour-manifest-ETag
" } } EOF read -d '' REPORT <<EOF { "Bucket": "arn:aws:s3:::amzn-s3-demo-completion-report-bucket
", "Format": "Report_CSV_20180820", "Enabled": true, "Prefix": "reports/batch_operations-governance
", "ReportScope": "AllTasks" } EOF aws \ s3control create-job \ --account-id "${ACCOUNT_ID
}" \ --manifest "${MANIFEST
//$'\n'}" \ --operation "${OPERATION
//$'\n'/}" \ --report "${REPORT
//$'\n'}" \ --priority10
\ --role-arn "${ROLE_ARN
}" \ --client-request-token "$(uuidgen)" \ --region "${AWS_DEFAULT_REGION
}" \ --description "Remove governance retention
";
次の例は、信頼ポリシーを作成し、S3 バッチ操作と S3 オブジェクトロックの設定アクセス許可を設定する前の例に基づいています。この例では、retain until date
を 2025 年 1 月 30 日に設定して、複数のオブジェクトにわたって S3 Object Lock 保持ガバナンスを適用する方法を示します。また、マニフェストバケットを使用して、レポートバケットに結果を書き込むバッチオペレーションジョブを作成します。
例 – 2025 年 1 月 30 日まで保持する複数のオブジェクトに S3 Object Lock 保持ガバナンスを適用する
public String createGovernanceRetentionJob(final AWSS3ControlClient awss3ControlClient) throws ParseException {
final String manifestObjectArn = "arn:aws:s3:::amzn-s3-demo-manifest-bucket
/governance-objects-manifest.csv
";
final String manifestObjectVersionId = "15ad5ba069e6bbc465c77bf83d541385
";
final JobManifestLocation manifestLocation = new JobManifestLocation()
.withObjectArn(manifestObjectArn)
.withETag(manifestObjectVersionId);
final JobManifestSpec manifestSpec =
new JobManifestSpec()
.withFormat(JobManifestFormat.S3BatchOperations_CSV_20180820)
.withFields("Bucket", "Key");
final JobManifest manifestToPublicApi = new JobManifest()
.withLocation(manifestLocation)
.withSpec(manifestSpec);
final String jobReportBucketArn = "arn:aws:s3:::amzn-s3-demo-completion-report-bucket
";
final String jobReportPrefix = "reports/governance-objects
";
final JobReport jobReport = new JobReport()
.withEnabled(true)
.withReportScope(JobReportScope.AllTasks)
.withBucket(jobReportBucketArn)
.withPrefix(jobReportPrefix)
.withFormat(JobReportFormat.Report_CSV_20180820);
final SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy");
final Date jan30th = format.parse("30/01/2025");
final JobOperation jobOperation = new JobOperation()
.withS3PutObjectRetention(new S3SetObjectRetentionOperation()
.withRetention(new S3Retention()
.withMode(S3ObjectLockRetentionMode.GOVERNANCE)
.withRetainUntilDate(jan30th)));
final String roleArn = "arn:aws:iam::123456789012
:role/batch_operations-object-lock
";
final Boolean requiresConfirmation = true;
final int priority = 10
;
final CreateJobRequest request = new CreateJobRequest()
.withAccountId("123456789012
")
.withDescription("Put governance retention
")
.withManifest(manifestToPublicApi)
.withOperation(jobOperation)
.withPriority(priority)
.withRoleArn(roleArn)
.withReport(jobReport)
.withConfirmationRequired(requiresConfirmation);
final CreateJobResult result = awss3ControlClient.createJob(request);
return result.getJobId();
}
例 – 複数のオブジェクト間での保持ガバナンスのバイパス
次の例は、信頼ポリシーを作成し、S3 バッチ操作と S3 オブジェクトロックの設定アクセス許可を設定する前の例に基づいています。この例では、複数のオブジェクト間で保持ガバナンスを省略する方法を示し、マニフェストバケットを使用して、レポートバケットに結果を書き込むバッチオペレーションジョブを作成します。
public void allowBypassGovernance() {
final String roleName = "batch_operations-object-lock
";
final String bypassGovernancePermissions = "{" +
" \"Version\": \"2012-10-17\"," +
" \"Statement\": [" +
" {" +
" \"Effect\": \"Allow\"," +
" \"Action\": [" +
" \"s3:BypassGovernanceRetention\"" +
" ]," +
" \"Resource\": [" +
" \"arn:aws:s3:::amzn-s3-demo-manifest-bucket
/*\"" +
" ]" +
" }" +
" ]" +
"}";
final AmazonIdentityManagement iam =
AmazonIdentityManagementClientBuilder.defaultClient();
final PutRolePolicyRequest putRolePolicyRequest = new PutRolePolicyRequest()
.withPolicyDocument(bypassGovernancePermissions)
.withPolicyName("bypass-governance-permissions")
.withRoleName(roleName);
final PutRolePolicyResult putRolePolicyResult = iam.putRolePolicy(putRolePolicyRequest);
}
public String createRemoveGovernanceRetentionJob(final AWSS3ControlClient awss3ControlClient) {
final String manifestObjectArn = "arn:aws:s3:::amzn-s3-demo-manifest-bucket
/governance-objects-manifest.csv
";
final String manifestObjectVersionId = "15ad5ba069e6bbc465c77bf83d541385
";
final JobManifestLocation manifestLocation = new JobManifestLocation()
.withObjectArn(manifestObjectArn)
.withETag(manifestObjectVersionId);
final JobManifestSpec manifestSpec =
new JobManifestSpec()
.withFormat(JobManifestFormat.S3BatchOperations_CSV_20180820)
.withFields("Bucket", "Key");
final JobManifest manifestToPublicApi = new JobManifest()
.withLocation(manifestLocation)
.withSpec(manifestSpec);
final String jobReportBucketArn = "arn:aws:s3:::amzn-s3-demo-completion-report-bucket
";
final String jobReportPrefix = "reports/batch_operations-governance
";
final JobReport jobReport = new JobReport()
.withEnabled(true)
.withReportScope(JobReportScope.AllTasks)
.withBucket(jobReportBucketArn)
.withPrefix(jobReportPrefix)
.withFormat(JobReportFormat.Report_CSV_20180820);
final JobOperation jobOperation = new JobOperation()
.withS3PutObjectRetention(new S3SetObjectRetentionOperation()
.withRetention(new S3Retention()));
final String roleArn = "arn:aws:iam::123456789012
:role/batch_operations-object-lock
";
final Boolean requiresConfirmation = true;
final int priority = 10
;
final CreateJobRequest request = new CreateJobRequest()
.withAccountId("123456789012
")
.withDescription("Remove governance retention
")
.withManifest(manifestToPublicApi)
.withOperation(jobOperation)
.withPriority(priority)
.withRoleArn(roleArn)
.withReport(jobReport)
.withConfirmationRequired(requiresConfirmation);
final CreateJobResult result = awss3ControlClient.createJob(request);
return result.getJobId();
}