使用任务标签控制批量操作的权限
为了协助您管理 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=QA
或stage=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" ] } } } ] }