使用 S3 分批操作启用 S3 对象锁定 - Amazon Simple Storage Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

使用 S3 分批操作启用 S3 对象锁定

您可以将 S3 分批操作与 S3 对象锁定结合使用,以便同时为许多 Amazon S3 对象管理保留或启用依法保留。您可以在清单中指定目标对象的列表并将该列表提交到分批操作以完成操作。有关更多信息,请参阅 S3 对象锁定保留S3 对象锁定依法保留

以下示例说明如何创建具有 S3 分批操作权限的 IAM 角色并更新角色权限以创建启用对象锁定的任务。在这些示例中,将任何变量值替换为符合您要求的变量值。您还必须有一个 CSV 清单来标识 S3 分批操作任务的对象。有关更多信息,请参阅 指定清单

  1. 创建 IAM 角色并为 S3 分批操作分配运行权限。

    所有 S3 分批操作任务都必须执行此步骤。

    export AWS_PROFILE='aws-user' read -d '' bops_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 bops-objectlock --assume-role-policy-document "${bops_trust_policy}"
  2. 设置要运行的 S3 分批操作和 S3 对象锁定。

    在此步骤中,允许角色执行以下操作:

    1. 在包含您希望在其上运行分批操作的目标对象的 S3 存储桶上运行对象锁定。

    2. 读取清单 CSV 文件和对象所在的 S3 存储桶。

    3. 将 S3 分批操作任务的结果写入报告存储桶。

    read -d '' bops_permissions <<EOF { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:GetBucketObjectLockConfiguration", "Resource": [ "arn:aws:s3:::{{ManifestBucket}}" ] }, { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:GetObjectVersion", "s3:GetBucketLocation" ], "Resource": [ "arn:aws:s3:::{{ManifestBucket}}/*" ] }, { "Effect": "Allow", "Action": [ "s3:PutObject", "s3:GetBucketLocation" ], "Resource": [ "arn:aws:s3:::{{ReportBucket}}/*" ] } ] } EOF aws iam put-role-policy --role-name bops-objectlock --policy-name object-lock-permissions --policy-document "${bops_permissions}"

以下示例说明如何创建具有 S3 分批操作权限的 IAM 角色并更新角色权限,以使用 Amazon SDK for Java 创建启用对象锁定的任务。在代码中,将任何变量值替换为符合您的要求的变量值。您还必须有一个 CSV 清单来标识 S3 分批操作任务的对象。有关更多信息,请参阅 指定清单

请执行下列步骤:

  1. 创建 IAM 角色并为 S3 分批操作分配运行权限。所有 S3 分批操作任务都必须执行此步骤。

  2. 设置要运行的 S3 分批操作和 S3 对象锁定。

    允许角色执行以下操作:

    1. 在包含您希望在其上运行分批操作的目标对象的 S3 存储桶上运行对象锁定。

    2. 读取清单 CSV 文件和对象所在的 S3 存储桶。

    3. 将 S3 分批操作任务的结果写入报告存储桶。

public void createObjectLockRole() { final String roleName = "bops-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:::ManifestBucket\"" + " ]" + " }," + " {" + " \"Effect\": \"Allow\"," + " \"Action\": [" + " \"s3:GetObject\"," + " \"s3:GetObjectVersion\"," + " \"s3:GetBucketLocation\"" + " ]," + " \"Resource\": [" + " \"arn:aws:s3:::ManifestBucket/*\"" + " ]" + " }," + " {" + " \"Effect\": \"Allow\"," + " \"Action\": [" + " \"s3:PutObject\"," + " \"s3:GetBucketLocation\"" + " ]," + " \"Resource\": [" + " \"arn:aws:s3:::ReportBucket/*\"" + " ]" + " }" + " ]" + "}"; 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("bops-permissions") .withRoleName(roleName); final PutRolePolicyResult putRolePolicyResult = iam.putRolePolicy(putRolePolicyRequest); }