使用标签控制对 Amazon CodeBuild 资源的访问
IAM 策略语句中的条件是语法的一部分,您可以使用该语法指定对基于 CodeBuild 项目的操作的权限。您可以创建一个策略(该策略基于与项目关联的标签来允许或拒绝对这些项目执行操作),然后将该策略应用于为管理用户而配置的 IAM 组。有关使用控制台或 Amazon CLI 将标签应用于项目的信息,请参阅在 Amazon CodeBuild 中创建构建项目。有关使用 CodeBuild 开发工具包应用标签的信息,请参阅《CodeBuild API 参考》中的 CreateProject 和标签。有关使用标签控制对 Amazon 资源的访问的信息,请参阅《IAM 用户指南》中的使用资源标签控制对 Amazon 资源的访问。
重要
使用预留容量特征时,同一账户内的其他项目可以访问实例集实例中缓存的数据,包括源文件、Docker 层和 buildspec 中指定的缓存目录。这是设计使然,让同一账户内的项目可以共享实例集实例。
例 示例 1:基于资源标签限制 CodeBuild 项目操作
以下示例拒绝对用键 Environment
、键值 Production
标记的项目执行所有 BatchGetProjects
操作。除了托管用户策略,用户的管理员还必须将此 IAM 策略附加到未经授权的用户。aws:ResourceTag
条件键用于基于其标签控制对资源的访问。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": [ "codebuild:BatchGetProjects" ], "Resource": "*", "Condition": { "ForAnyValue:StringEquals": { "aws:ResourceTag/Environment": "Production" } } } ] }
例 示例 2:基于请求标签限制 CodeBuild 项目操作
如果请求包含键为 Environment
、键值为 Production
的标签,则以下策略拒绝用户对 CreateProject
操作的权限。此外,该策略将阻止这些未经授权的用户修改项目,方法是使用 aws:TagKeys
条件键在请求包含键为 Environment
的标签时不允许 UpdateProject
。除了托管用户策略之外,管理员还必须将此 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 资源关联的 Amazon 标签来允许或拒绝对这些资源(项目和报告组)执行操作的策略,然后将该策略应用于为管理用户而配置的 IAM 组。例如,您可以创建一个拒绝对具有 Amazon 标签键 Status
和键值 Secret
的任何报告组执行所有 CodeBuild 操作的策略,然后将该策略应用于为常规开发人员 (Developers
) 创建的 IAM 组。然后,您需要确保使用这些带有标签的报告组的开发人员不是该常规 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
" } } } ] }