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

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

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

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

有关按 S3 资源类型对 S3 API 操作的权限的更多信息,请参阅 Amazon S3 API 操作所需的权限

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

在此示例中,您在 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" ] } } } ] }