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

使用任务标签控制 S3 分批操作的权限

为了帮助您管理 S3 分批操作任务,您可以添加任务标签。借助任务标签,您可以控制对 S3 分批操作任务的访问,并强制在创建任何任务时应用标签。

您最多可以为每个分批操作任务应用 50 个任务标签。这允许您设置非常精细的策略,限制可编辑任务的用户集。任务标签可授予或限制用户取消任务、激活处于确认状态的任务或更改任务优先级的能力。此外,您可以强制将标签应用于所有新任务,并为标签指定允许的键值对。您可以使用相同的 IAM 策略语言表达所有这些条件。有关更多信息,请参阅《Service Authorization Reference》中的 Actions, resources, and condition keys for Amazon S3

以下示例显示如何使用 S3 分批操作任务标签仅向用户授予创建和编辑在特定部门(例如,财务合规性部门)内运行的任务的权限。您还可以根据与任务相关的开发阶段分配任务,例如 QA生产

在此示例中,您在 Amazon Identity and Access Management(IAM) 策略中使用 S3 分批操作任务标签向用户授予只能创建和编辑在其部门内运行的任务的权限。您可以根据与任务相关的开发阶段分配任务,例如 QA生产

此示例使用以下部门,每个部门使用分批操作的方式不同:

  • 财务

  • 合规性

  • 商业智能

  • 工程

通过向用户和资源分配标签来控制访问

在这种情况下,管理员正在使用基于属性的访问控制 (ABAC)。ABAC 是一种 IAM 授权策略,它通过向用户和 Amazon 资源附加标签来定义权限。

为用户和任务分配以下部门标签之一:

键 : 值
  • department : Finance

  • department : Compliance

  • department : BusinessIntelligence

  • department : Engineering

    注意

    任务标签键和值区分大小写。

使用 ABAC 访问控制策略,您可以授予“财务”部门中的用户在其部门内创建和管理 S3 批量操作任务的权限,方法是将标签 department=Finance 与其用户关联。

此外,您可以将托管策略附加到 IAM 用户,此策略允许公司中的任何用户在其各自部门内创建或修改 S3 分批操作任务。

此示例中的策略包括三个策略语句:

  • 策略中的第一个语句允许用户创建分批操作任务,前提是任务创建请求包含与其各自部门匹配的任务标签。这使用 "${aws:PrincipalTag/department}" 语法表示,该语法在策略评估时被用户的部门标签所取代。当在请求 ("aws:RequestTag/department") 中为部门标签提供的值与用户的部门匹配时,该条件将得到满足。

  • 策略中的第二个语句允许用户更改任务的优先级或更新任务的状态,前提是用户正在更新的任务与用户的部门匹配。

  • 第三个语句允许用户随时通过 PutJobTagging 请求更新分批操作任务的标签,只要 (1) 其部门标签被保留,并且 (2) 他们正在更新的任务位于其部门内。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:CreateJob", "Resource": "*", "Condition": { "StringEquals": { "aws:RequestTag/department": "${aws:PrincipalTag/department}" } } }, { "Effect": "Allow", "Action": [ "s3:UpdateJobPriority", "s3:UpdateJobStatus" ], "Resource": "*", "Condition": { "StringEquals": { "aws:ResourceTag/department": "${aws:PrincipalTag/department}" } } }, { "Effect": "Allow", "Action": "s3:PutJobTagging", "Resource": "*", "Condition": { "StringEquals": { "aws:RequestTag/department": "${aws:PrincipalTag/department}", "aws:ResourceTag/department": "${aws:PrincipalTag/department}" } } } ] }

按阶段标记分批操作任务并对任务优先级实施限制

所有 S3 分批操作任务都具有数字优先级,Amazon S3 使用此优先级来决定以何种顺序运行任务。对于此示例,您可以限制大多数用户可以分配给任务的最大优先级,并为有限的特权用户集保留更高的优先级范围,如下所示:

  • QA 阶段优先级范围(低):1-100

  • 生产阶段优先级范围(高):1-300

为此,请引入一个代表任务阶段 的新标签集:

键 : 值
  • stage : QA

  • stage : Production

在部门内创建和更新低优先级任务

除了基于部门的限制外,此策略还对 S3 分批操作任务创建和更新引入了两个新的限制:

  • 它允许用户在其部门中创建或更新任务,而一个新条件要求任务包含标签 stage=QA

  • 它允许用户创建或更新任务的优先级,新的最大优先级为 100。

{         "Version": "2012-10-17",         "Statement": [         {         "Effect": "Allow",         "Action": "s3:CreateJob",         "Resource": "*",         "Condition": {             "StringEquals": {                 "aws:RequestTag/department": "${aws:PrincipalTag/department}",                 "aws:RequestTag/stage": "QA"             },             "NumericLessThanEquals": {                 "s3:RequestJobPriority": 100             }         }     },     {         "Effect": "Allow",         "Action": [             "s3:UpdateJobStatus"         ],         "Resource": "*",         "Condition": {             "StringEquals": {                 "aws:ResourceTag/department": "${aws:PrincipalTag/department}"             }         }     },     {         "Effect": "Allow",         "Action": "s3:UpdateJobPriority",         "Resource": "*",         "Condition": {             "StringEquals": {                 "aws:ResourceTag/department": "${aws:PrincipalTag/department}",                 "aws:ResourceTag/stage": "QA"             },             "NumericLessThanEquals": {                 "s3:RequestJobPriority": 100             }         }     },     {         "Effect": "Allow",         "Action": "s3:PutJobTagging",         "Resource": "*",         "Condition": {             "StringEquals": {                 "aws:RequestTag/department" : "${aws:PrincipalTag/department}",                 "aws:ResourceTag/department": "${aws:PrincipalTag/department}",                 "aws:RequestTag/stage": "QA",                 "aws:ResourceTag/stage": "QA"             }         }     },     {         "Effect": "Allow",         "Action": "s3:GetJobTagging",         "Resource": "*"     }     ] }

在部门内创建和更新高优先级任务

少数用户可能需要在 QA生产 中创建高优先级任务的能力。为了满足这一需求,您可以创建一个根据上一节中的低优先级策略改写的托管策略。

该策略执行以下操作:

  • 允许用户使用标签 stage=QAstage=Production 在其部门中创建或更新任务。

  • 允许用户创建或更新任务的优先级,最高为 300。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:CreateJob", "Resource": "*", "Condition": { "ForAnyValue:StringEquals": { "aws:RequestTag/stage": [ "QA", "Production" ] }, "StringEquals": { "aws:RequestTag/department": "${aws:PrincipalTag/department}" }, "NumericLessThanEquals": { "s3:RequestJobPriority": 300 } } }, { "Effect": "Allow", "Action": [ "s3:UpdateJobStatus" ], "Resource": "*", "Condition": { "StringEquals": { "aws:ResourceTag/department": "${aws:PrincipalTag/department}" } } }, { "Effect": "Allow", "Action": "s3:UpdateJobPriority", "Resource": "*", "Condition": { "ForAnyValue:StringEquals": { "aws:ResourceTag/stage": [ "QA", "Production" ] }, "StringEquals": { "aws:ResourceTag/department": "${aws:PrincipalTag/department}" }, "NumericLessThanEquals": { "s3:RequestJobPriority": 300 } } }, { "Effect": "Allow", "Action": "s3:PutJobTagging", "Resource": "*", "Condition": { "StringEquals": { "aws:RequestTag/department": "${aws:PrincipalTag/department}", "aws:ResourceTag/department": "${aws:PrincipalTag/department}" }, "ForAnyValue:StringEquals": { "aws:RequestTag/stage": [ "QA", "Production" ], "aws:ResourceTag/stage": [ "QA", "Production" ] } } } ] }