示例:使用作业标签控制对 S3 批量操作的权限 - Amazon Simple Storage Service
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

示例:使用作业标签控制对 S3 批量操作的权限

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

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

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

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

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

  • 财务

  • 合规性

  • 商业智能

  • 工程

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

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

为用户和作业分配以下部门标签之一:

键 : 值

  • department : Finance

  • department : Compliance

  • department : BusinessIntelligence

  • department : Engineering

    注意

    作业标签键和值区分大小写。

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

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

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

  • 策略中的第一个语句允许用户创建批量操作作业,前提是作业创建请求包含与其各自部门匹配的作业标签。这使用 "${aws:PrincipalTag/department}" 语法表示,该语法在策略评估时被 IAM 用户的部门标签所取代。当在请求 ("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" ] } } } ] }