

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# AWS CodeBuild 条件键
<a name="action-context-keys"></a>

AWS CodeBuild 提供了一组条件密钥，您可以在 IAM 策略中使用这些条件密钥对项目和队列等 CodeBuild 资源强制执行组织策略。条件密钥涵盖了大多数 CodeBuild API 请求上下文，包括网络设置、凭据配置和计算限制。

**Topics**
+ [对您的项目和实例集强制执行 VPC 连接设置](#action-context-keys-example-overrideVPC)
+ [防止对项目 buildspec 进行未经授权的修改](#action-context-keys-example-overridebuildspec)
+ [限制构建的计算类型](#action-context-keys-example-computechoice)
+ [控制环境变量设置](#action-context-keys-example-env-variables)
+ [在条件键名称中使用变量](#action-context-keys-example-variables)
+ [检查 API 请求中是否存在属性](#action-context-keys-example-env-denyoverride)

## 对您的项目和实例集强制执行 VPC 连接设置
<a name="action-context-keys-example-overrideVPC"></a>

此策略允许呼叫者在创建 CodeBuild 项目和队列时使用选定的 VPCs子网和安全组。有关多值上下文键的更多信息，请参阅[单值和多值上下文键](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-single-vs-multi-valued-context-keys.html)。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [{
        "Effect": "Allow",
        "Action": [
            "codebuild:CreateProject",
            "codebuild:CreateFleet"
        ],
        "Resource": "*",
        "Condition": {
            "ForAnyValue:StringEquals": {
                "codebuild:vpcConfig.vpcId": [
                    "vpc-01234567890abcdef",
                    "vpc-abcdef01234567890"
                ],
                "codebuild:vpcConfig.subnets": [
                    "subnet-1234abcd",
                    "subnet-5678abcd"
                ],
                "codebuild:vpcConfig.securityGroupIds": [
                    "sg-12345678abcdefghij",
                    "sg-01234567abcdefghij"
                ]
            }
        }
    }]
}
```

------

## 防止对项目 buildspec 进行未经授权的修改
<a name="action-context-keys-example-overridebuildspec"></a>

此策略不支持调用方覆盖 `buildspecOverride` 字段中的 buildspec。

**注意**  
`codebuild:source.buildspec` 条件键仅支持 Null 运算符来检查 API 字段是否存在。它不评估 buildspec 的内容。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [{
        "Effect": "Allow",
        "Action": "codebuild:StartBuild",
        "Resource": "*"
    }, {
        "Effect": "Deny",
        "Action": "codebuild:StartBuild",
        "Resource": "*",
        "Condition": {
            "Null": {
                "codebuild:source.buildspec": "false"
            }
        }
    }]
}
```

------

## 限制构建的计算类型
<a name="action-context-keys-example-computechoice"></a>

此策略支持创建只能使用 `c5.large` 或 `m5.large` [计算实例类型](https://docs.aws.amazon.com/codebuild/latest/userguide/build-env-ref-compute-types.html#environment-reserved-capacity.instance-types)构建的实例集。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [{
        "Effect": "Allow",
        "Action": "codebuild:CreateFleet",
        "Resource": "*",
        "Condition": {
            "ForAnyValue:StringEquals": {
                "codebuild:computeConfiguration.instanceType": ["c5.large", "m5.large"]
            }
        }
    }]
}
```

------

## 控制环境变量设置
<a name="action-context-keys-example-env-variables"></a>

此策略支持调用方将 `STAGE` 环境变量覆盖为 `BETA` 或 `GAMMA`。它还显式拒绝将 `STAGE` 覆盖为 `PRODUCTION`，并拒绝覆盖 `MY_APP_VERSION` 环境变量。有关多值上下文键，请参阅[单值和多值上下文键](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-single-vs-multi-valued-context-keys.html)。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "codebuild:StartBuild"
            ],
            "Resource": "*",
            "Condition": {
                "ForAnyValue:StringEquals": {
                    "codebuild:environment.environmentVariables/STAGE.value": [
                        "BETA",
                        "GAMMA"
                    ]
                }
            }
        },
        {
            "Effect": "Deny",
            "Action": [
                "codebuild:StartBuild"
            ],
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "codebuild:environment.environmentVariables/STAGE.value": "PRODUCTION"
                },
                "ForAnyValue:StringEquals": {
                    "codebuild:environment.environmentVariables.name": [
                        "MY_APP_VERSION"
                    ]
                }
            }
        }
    ]
}
```

------

## 在条件键名称中使用变量
<a name="action-context-keys-example-variables"></a>

您可以在条件键名称中使用变量，例如 `secondarySources/${sourceIdentifier}.location` 和 `secondaryArtifacts/${artifactIdentifier}.location`，其中，您可以在 IAM 策略中指定辅助[源](https://docs.aws.amazon.com/codebuild/latest/APIReference/API_ProjectSource.html)或辅助[构件](https://docs.aws.amazon.com/codebuild/latest/APIReference/API_ProjectArtifacts.html)标识符。下面的策略支持调用方为辅助源 `mySecondSource` 创建具有特定源位置的项目。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "codebuild:CreateProject",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "codebuild:secondarySources/mySecondSource.location": "my-source-location"
                }
            }
        }
    ]
}
```

------

## 检查 API 请求中是否存在属性
<a name="action-context-keys-example-env-denyoverride"></a>

CodeBuild 支持条件键来检查 API 请求中是否存在某些字段。该策略在创建或更新项目时强制执行 VPC 要求。

```
{
    "Version": "2012-10-17"		 	 	 		 	 	 ,
    "Statement": [{
        "Effect": "Allow",
        "Action": [
            "codebuild:CreateProject",
            "codebuild:UpdateProject"
        ],
        "Resource": "*",
        "Condition": {
            "Null": {
                "codebuild:vpcConfig.vpcId": "false"
            }
        }
    }]
}
```