使用标签控制对 AWS CodeBuild 资源的访问 - AWS CodeBuild
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

使用标签控制对 AWS CodeBuild 资源的访问

IAM 策略语句中的条件是语法的一部分,您可以使用该语法指定对基于 CodeBuild 项目的操作的权限。您可以创建一个策略(该策略基于与项目关联的标签来允许或拒绝对这些项目执行操作),然后将该策略应用于为管理 IAM 用户而配置的 IAM 组。有关使用控制台或 AWS CLI 将标签应用于项目的信息,请参阅 在 AWS CodeBuild 中创建构建项目。有关使用 CodeBuild 开发工具包应用标签的信息,请参阅 API 参考CreateProject 中的 标签CodeBuild。有关使用标签控制对 AWS 资源的访问的信息,请参阅 中的AWS使用资源标签控制对 资源的访问。IAM 用户指南

例 示例 1:根据资源标签限制 CodeBuild 项目操作

以下示例拒绝对用键 BatchGetProjects 和键值 Environment 标记的项目执行所有 Production 操作。 除了托管用户策略,用户的管理员还必须将此 IAM 策略附加到未经授权的 IAM 用户。aws:ResourceTag 条件键用于基于其标签控制对资源的访问。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": [ "codebuild:BatchGetProjects" ], "Resource": "*", "Condition": { "ForAnyValue:StringEquals": { "aws:ResourceTag/Environment": "Production" } } } ] }

例 示例 2:根据请求标签限制 CodeBuild 项目操作

如果请求包含键为 CreateProject、键值为 Environment 的标签,则以下策略拒绝用户对 Production 操作的权限。 此外,该策略将阻止这些未经授权的用户修改项目,方法是使用 aws:TagKeys 条件键在请求包含键为 UpdateProject 的标签时不允许 Environment。 除了托管用户策略,管理员还必须将此 IAM 策略附加到无权执行这些操作的用户。aws:RequestTag 条件键用于控制可以通过 IAM 请求传递哪些标签

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": [ "codebuild:CreateProject" ], "Resource": "*", "Condition": { "ForAnyValue:StringEquals": { "aws:RequestTag/Environment": "Production" } } }, { "Effect": "Deny", "Action": [ "codebuild:UpdateProject" ], "Resource": "*", "Condition": { "ForAnyValue:StringEquals": { "aws:TagKeys": ["Environment"] } } } ] }

例 示例 3:根据资源标签拒绝或允许对报告组执行操作

您可以创建一个基于与 CodeBuild 资源关联的 AWS 标签来允许或拒绝对这些资源(项目和报告组)执行操作的策略,然后将该策略应用于为管理 IAM 用户而配置的 IAM 组。例如,您可以创建一个策略,拒绝对具有 CodeBuild 标签键 AWS 和键值 Status 的任何报告组执行所有 Secret 操作,然后将该策略应用于为常规开发人员创建的 IAM 组 (Developers)。 然后,您需要确保使用这些已标记报告组的开发人员不是该常规组的成员 Developers 组,但属于未应用限制性策略的其他 IAM 组 (SecretDevelopers)。

以下示例拒绝对用键 Status 和键值 Secret 标记的报告组执行所有 CodeBuild 操作:

{ "Version": "2012-10-17", "Statement" : [ { "Effect" : "Deny", "Action" : [ "codebuild:BatchGetReportGroups," "codebuild:CreateReportGroup", "codebuild:DeleteReportGroup", "codebuild:ListReportGroups", "codebuild:ListReportsForReportGroup", "codebuild:UpdateReportGroup" ] "Resource" : "*", "Condition" : { "StringEquals" : "aws:ResourceTag/Status": "Secret" } } ] }

例 示例 4:根据资源标签将 CodeBuild 操作限制为AWSCodeBuildDeveloperAccess

您可以创建策略以允许对未使用特定标签标记的所有报告组和项目执行 CodeBuild 操作。例如,以下策略为除了使用指定标签标记的报告组和项目以外的所有其他报告组和项目提供与 AWSCodeBuildDeveloperAccess 等效的权限:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "codebuild:StartBuild", "codebuild:StopBuild", "codebuild:BatchGet*", "codebuild:GetResourcePolicy", "codebuild:DescribeTestCases", "codebuild:List*", "codecommit:GetBranch", "codecommit:GetCommit", "codecommit:GetRepository", "codecommit:ListBranches", "cloudwatch:GetMetricStatistics", "events:DescribeRule", "events:ListTargetsByRule", "events:ListRuleNamesByTarget", "logs:GetLogEvents", "s3:GetBucketLocation", "s3:ListAllMyBuckets" ], "Resource": "*", "Condition": { "StringNotEquals": { "aws:ResourceTag/Status": "Secret", "aws:ResourceTag/Team": "Saanvi" } } } ] }