可以使用“ 安全 ”选项卡在池创建期间以及使用 “安全 设置”窗格创建池后为托管 DevOps 池配置安全设置。
默认情况下,托管 DevOps 池是为单个组织配置的,有权访问授予组织内所有项目的池。 可以选择限制对组织中的特定项目的访问,并且可以根据需要授予对其他组织的访问权限。
将池与单个组织配合使用
默认情况下,托管 DevOps 池配置为与创建池时指定的单个 Azure DevOps 组织一起使用。 为单个组织配置池时,将在池设置中显示并配置组织名称
默认情况下, 向所有项目添加池 设置为 “是”,并向组织中的所有项目授予对托管 DevOps 池的访问权限。 选择 “否 ”可指定项目列表,以限制组织中的哪些项目可以使用该池。
组织在托管 DevOps 池资源的属性中 organizationProfile
配置。
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
{
"name": "fabrikam-managed-pool",
"type": "microsoft.devopsinfrastructure/pools",
"apiVersion": "2025-01-21",
"___location": "eastus",
"properties": {
...
"organizationProfile": {
"organizations": [
{
"url": "https://dev.azure.com/fabrikam-tailspin",
"projects": [],
"parallelism": 4
}
],
"permissionProfile": {
"kind": "CreatorOnly"
},
"kind": "AzureDevOps"
}
}
]
}
该 organizationProfile
部分具有以下属性。
properties |
说明 |
organizations |
可以使用池的组织列表。
url 指定组织的 URL, projects 是可以使用池的项目名称列表(空列表支持组织中的所有项目),并 parallelism 指定此组织可以使用的代理数。 组织的并行度之和必须与池的最大代理设置匹配。 |
permissionProfile |
指定创建 Azure DevOps 池时授予的权限。 只能在创建池期间设置此值。 允许使用的值为 Inherit 、CreatorOnly 和 SpecificAccounts 。 如果 specificAccounts 已指定,请为属性提供单个电子邮件地址或电子邮件地址 users 列表;否则省略 users 。 有关详细信息,请参阅 池管理权限。 |
kind |
此值指定池的组织类型,并且必须设置为 Azure DevOps 。 |
在创建或更新池时,组织是在organization-profile
参数中配置的。
az mdp pool create \
--organization-profile organization-profile.json
# other parameters omitted for space
以下示例显示了一个organization-profile
对象,该对象针对组织中所有项目都配置了该对象,该fabrikam-tailspin
对象parallelism
设置为 1
< />。
{
"AzureDevOps":
{
"organizations": [
{
"url": "https://dev.azure.com/fabrikam-tailspin",
"projects": [],
"parallelism": 1
}
]
}
}
该 organizationProfile
部分具有以下属性。
properties |
说明 |
AzureDevOps |
此值是在其中 organization-profile 定义的对象的名称,必须设置为 Azure DevOps 。 |
organizations |
可以使用池的组织列表。
openAccess 指定托管 DevOps 池在创建池期间是否为池配置 开放访问权限 , url 指定组织的 URL, projects 是可以使用池的项目名称列表(空列表支持组织中的所有项目),并 parallelism 指定此组织可以使用的代理数。 组织的并行度之和必须与池的最大代理设置匹配。 |
permissionProfile |
指定创建 Azure DevOps 池时授予的权限。 只能在创建池期间设置此值。 允许使用的值为 Inherit 、CreatorOnly 和 SpecificAccounts 。 如果 specificAccounts 已指定,请为属性提供单个电子邮件地址或电子邮件地址 users 列表;否则省略 users 。 有关详细信息,请参阅 池管理权限。 |
在多个组织中使用池
启用 在多个组织中使用池,以便将您的池用于多个 Azure DevOps 组织。 对于每个组织,请指定允许使用池的项目,或留空以允许所有项目。 为了为每个组织配置并行度,需要通过指定池的最大代理来确定要分配给每个组织的并发部分。 所有组织的并行度之和必须等于池的最大并发性。 例如,如果 最大代理 数设置为 5,则指定组织的并行度之和必须为 5。 如果 最大代理 设置为一个,则只能将池与一个组织一起使用。
在以下示例中,池被配置为可用于 fabrikam-tailspin 组织中的 FabrikamResearch 和 FabrikamTest 项目,以及可用于 fabrikam-blue 组织中的所有项目。
如果收到类似 The sum of parallelism for all organizations must equal the max concurrency.
错误,请确保资源池的最大 代理数 与 并行度 列的总和匹配。
将其他组织添加到组织列表,以配置池以用于多个组织。 以下示例配置了两个组织。 第一个组织配置为对所有项目使用托管 DevOps 池,第二个组织限制为两个项目。 在此示例中,池的最大代理设置为四个,每个组织都可以使用这四个代理中的两个。
"organizationProfile": {
"organizations": [
{
"url": "https://dev.azure.com/fabrikam-tailspin",
"projects": [],
"parallelism": 2
},
{
"url": "https://dev.azure.com/fabrikam-prime",
"projects": [ "fabrikam-dev", "fabrikam-test" ],
"parallelism": 2
}
],
"permissionProfile": {
"kind": "CreatorOnly"
},
"kind": "AzureDevOps"
}
创建或更新池时,组织在organization-profile
参数中配置。
az mdp pool create \
--organization-profile organization-profile.json
# other parameters omitted for space
将其他组织添加到组织列表,以配置池以用于多个组织。 以下示例配置了两个组织。 第一个组织配置为对所有项目使用托管 DevOps 池,第二个组织限制为两个项目。 在此示例中,池的最大代理设置为四个,每个组织都可以使用这四个代理中的两个。
{
"AzureDevOps":
{
"organizations": [
{
"url": "https://dev.azure.com/fabrikam-tailspin",
"projects": [],
"parallelism": 2
},
{
"url": "https://dev.azure.com/fabrikam-prime",
"projects": [ "fabrikam-dev", "fabrikam-test" ],
"parallelism": 2
}
]
}
}
若要为管道配置开放访问权限,除了 先决条件 - 验证 Azure DevOps 权限中所述的权限之外,还必须具有以下权限。
默认情况下,必须先显式授权每个管道定义在自承载代理池(例如托管 DevOps 池)中运行,然后才能在该池中首次运行。
Azure DevOps 提供以下模式,用于授权管道在代理池中运行。
-
授权特定管道 - 单独授权 Azure DevOps 项目中的特定管道以在池中运行。 此方法是默认方法。
-
打开访问权限 - 将项目级别的代理池配置为可用于该项目中的所有管道。
启用 “允许所有管道在池上运行,而无需批准(开放访问权限)” ,以便在创建池时在 Azure DevOps 中配置 开放访问 代理池设置。
注意
只有在创建池的时候,托管的 DevOps 池才能配置 “允许所有管道在没有批准(开放访问)时在池上运行” 设置。 创建托管 DevOps 池后,可以在 Azure DevOps 中相应的代理池上查看和配置开放访问权限,以便对使用该池的每个项目进行查看和配置。
启用 “允许所有管道在池上运行,而无需批准(开放访问权限)” ,以便从指定项目中的所有管道配置对托管 DevOps 池的访问权限。
- 如果向所有项目添加池设置为“是”,托管的 DevOps 池将为所有项目中的所有管道配置开放访问。
- 如果将池添加到所有项目设置为否,则管理的 DevOps 池仅为列出的项目中的所有流水线配置开放访问。
如果在 多个组织中启用“使用池”,则可以为每个组织单独指定 开放访问权限 。
注意
在使用更高版本api-version 2025-01-21
时,将会出现“开放访问”设置。
组织在托管 DevOps 池资源的属性中 organizationProfile
配置。 以下示例配置了两个组织。
- 组织
fabrikam-tailspin
在所有项目上都配置了 开放访问权限 。
-
fabrikam-prime
组织被配置为具有两个项目的可用性,并且仅在这两个项目上启用了 开放访问权限。
"organizationProfile": {
"organizations": [
{
"url": "https://dev.azure.com/fabrikam-tailspin",
"projects": [],
"openAccess": true,
"parallelism": 2
},
{
"url": "https://dev.azure.com/fabrikam-prime",
"projects": [ "fabrikam-dev", "fabrikam-test" ],
"openAccess": true,
"parallelism": 2
}
],
"permissionProfile": {
"kind": "CreatorOnly"
},
"kind": "AzureDevOps"
}
重要
仅在创建托管 DevOps 池期间配置开放访问权限。 若要在创建池后更改“打开访问”设置(包括添加或删除托管 DevOps 池配置中的项目),必须为使用该池的每个项目在 Azure DevOps 中的相应代理池上手动配置“打开”访问权限。
在创建池时,openAccess
设置会配置在organization-profile
参数中。
az mdp pool create \
--organization-profile organization-profile.json
# other parameters omitted for space
在以下示例orgaization-profile
中,配置了两个组织。
- 组织
fabrikam-tailspin
在所有项目上都配置了 开放访问权限 。
-
fabrikam-prime
组织被配置为具有两个项目的可用性,并且仅在这两个项目上启用了 开放访问。
{
"AzureDevOps":
{
"organizations": [
{
"url": "https://dev.azure.com/fabrikam-tailspin",
"projects": [],
"parallelism": 2
},
{
"url": "https://dev.azure.com/fabrikam-prime",
"projects": [ "fabrikam-dev", "fabrikam-test" ],
"parallelism": 2
}
]
}
}
重要
仅在创建托管 DevOps 池期间配置开放访问权限。 若要在创建池后更改“打开访问”设置(包括添加或删除托管 DevOps 池配置中的项目),必须为使用该池的每个项目在 Azure DevOps 中的相应代理池上手动配置“打开”访问权限。
如果尝试运行无权访问代理池的管道,将收到类似于 This pipeline needs permission to access a resource before this run can continue
下面的错误。 可以通过配置开放访问权限(如上一部分所述)或 显式授权管道在代理池中运行来解决此问题。
如果测试需要交互式登录进行 UI 测试,请启用 EnableInteractiveMode 设置来启用交互式登录。
在属性的节osProfile
中fabricProfile
配置交互式模式。
logonType
设置为Interactive
启用交互模式或Service
禁用交互模式。
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
{
"name": "fabrikam-managed-pool",
"type": "microsoft.devopsinfrastructure/pools",
"apiVersion": "2025-01-21",
"___location": "eastus",
"properties": {
...
"fabricProfile": {
"sku": {...},
"images": [...],
"osProfile": {
"secretsManagementSettings": {...},
"logonType": "Interactive"
},
"storageProfile": {...},
"kind": "Vmss"
}
}
]
}
在创建或更新池时,通过在fabric-profile
参数中的osProfile
节配置logonType
属性来设置交互式模式。
az mdp pool create \
--fabric-profile fabric-profile.json
# other parameters omitted for space
以下示例展示了在启用 Interactive
模式的情况下,fabric-profile.json 文件的 osProfile
节。
{
"vmss": {
"sku": {...},
"images": [...],
"osProfile": {
"secretsManagementSettings": {...},
"logonType": "Interactive"
},
"storageProfile": {...}
}
}
池管理权限
作为托管 DevOps 池创建过程的一部分,在 Azure DevOps 中创建组织级代理池。
池管理权限设置指定哪些用户被授予新创建的 Azure DevOps 池的管理员角色。 若要在创建托管 DevOps 池后查看和管理 Azure DevOps 代理池权限,请参阅 创建和管理代理池 - 代理池的安全性。
-
仅创建者 - 创建托管 DevOps 池的用户被添加为 Azure DevOps 代理池的管理员,并且在代理池安全设置中,“继承” 设置为 “关闭”。
仅限创建者 是默认设置。
-
从项目继承权限 - 创建托管 DevOps 池的用户将添加为 Azure DevOps 代理池的管理员,在代理池安全设置中将 继承 设置为 On 。
-
特定帐户 - 指定要作为 Azure DevOps 中创建的代理池管理员添加的帐户。 默认情况下,托管 DevOps 池创建者将添加到列表中。
注意
创建池时,池 管理权限 设置在“ 安全 ”选项卡上配置,创建池后不会显示在 “安全 ”设置中。 若要在创建托管 DevOps 池后查看和管理 Azure DevOps 代理池权限,请参阅 创建和管理代理池 - 代理池的安全性。
在托管 DevOps 池资源部分的属性permissionsProfile
中organizationProfile
配置池管理权限。
{
"organizationProfile": {
"organizations": [...],
"permissionProfile": {
"kind": "CreatorOnly"
},
"kind": "AzureDevOps"
}
只能在创建池期间设置该 permissionProfile
属性。 允许使用的值为 Inherit
、CreatorOnly
和 SpecificAccounts
。
CreatorOnly
- 创建托管 DevOps 池的用户将作为 Azure DevOps 代理池的管理员添加,在代理池安全设置中将 继承 设置为 “关闭 ”。
仅限创建者 是默认设置。
Inherit
- 创建托管 DevOps 池的用户将作为 Azure DevOps 代理池的管理员添加,在代理池安全设置中将 继承 设置为 On 。
SpecificAccounts
- 指定要在 Azure DevOps 中创建的代理池的管理员添加的帐户。 默认情况下,托管 DevOps 池创建者将添加到列表中。 提供属性的单个电子邮件地址或电子邮件地址 users
列表;否则省略 users
。
{
"organizationProfile": {
"organizations": [...],
"permissionProfile": {
"kind": "SpecificAccounts",
"users" : ["User1@fabrikam.com", "User2@fabrikam.com" ]
},
"kind": "AzureDevOps"
}
创建池时,organization-profile
在参数中配置池管理权限。
az mdp pool create \
--organization-profile organization-profile.json
# other parameters omitted for space
{
"AzureDevOps":
{
"organizations": [...],
"permissionProfile": {
"kind": "CreatorOnly"
}
}
}
只能在创建池期间设置该 permissionProfile
属性。 允许使用的值为 Inherit
、CreatorOnly
和 SpecificAccounts
。
CreatorOnly
- 创建托管 DevOps 池的用户将作为 Azure DevOps 代理池的管理员添加,在代理池安全设置中将 继承 设置为 “关闭 ”。
仅限创建者是默认设置。
Inherit
- 创建托管 DevOps 池的用户将作为 Azure DevOps 代理池的管理员添加,在代理池安全设置中将 继承 设置为 On 。
SpecificAccounts
- 指定要在 Azure DevOps 中创建的代理池的管理员添加的帐户。 默认情况下,托管 DevOps 池创建者将添加到列表中。 提供属性的单个电子邮件地址或电子邮件地址 users
列表;否则省略 users
。
{
"AzureDevOps" : {
"organizationProfile": {
"organizations": [...],
"permissionProfile": {
"kind": "SpecificAccounts",
"users" : ["User1@fabrikam.com", "User2@fabrikam.com" ]
}
}
}
密钥库配置
托管 DevOps 池服务允许在预配期间从 Azure Key Vault 获取证书,这意味着在运行管道时,该证书将已经存在于计算机上。
若要使用此功能,必须:
注意
因此 api-version 2025-01-21
,如果使用此功能,则只能在池中使用单个标识。 不久将添加对多个标识的支持。
只能使用一个标识从密钥库中提取机密。
托管 DevOps 池的证书设置是在池级别进行的,其中某些设置特定于 Windows 或 Linux。 如果工作流同时需要 Linux 和 Windows 映像,则如果找不到适用于 Windows 和 Linux 的常见证书设置集,则可能需要将它们划分为多个池。
以下设置配置从 Key Vault 提取的证书。
证书 (observedCertificates
)
指定要从 Key Vault 提取的证书,并将其安装在池中的所有计算机上。
证书存储位置 (certificateStoreLocation
)
指定要在代理上安装证书的位置。
-
Windows 代理:指定
LocalMachine
或 CurrentUser
。
-
Linux 代理: 证书存储位置 仅在 Ubuntu 分发版上受支持。 指定存储证书的磁盘路径,例如
/var/lib/waagent/Microsoft.Azure.KeyVault/app1
。
对于 Ubuntu 分发版,如果指定受信任的存储位置,例如 /usr/local/share/ca-certificates
,证书将作为根添加到该证书存储中。 有关详细信息,请参阅 在信任存储中安装根 CA 证书。
证书存储名称 (certificateStoreName
)
-
Windows 代理:指定证书存储的名称(
My
本地证书存储 - 默认值(如果未指定名称)或 Root
(受信任的根位置)。
-
Linux 代理:此设置不用于 Linux 代理。
可导出私钥 (keyExportable
)
证书的密钥是否可导出。 默认值为 false
。
Key Vault 集成在“设置 > 安全性”>中配置。
注意
密钥库集成设置只能在创建池后进行配置。 无法在创建池期间配置 Key Vault 集成设置,也不会显示在池创建过程中 的“安全 ”选项卡中。
Azure 密钥库在osProfile
属性的部分中fabricProfile
配置。
secretManagementSettings
设置能够访问所需证书。
注意
该 osProfile.certificateStoreName
属性仅在 apiVersion 2025-01-21
及更高版本中可用。
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
{
"name": "fabrikam-managed-pool",
"type": "microsoft.devopsinfrastructure/pools",
"apiVersion": "2025-01-21",
"___location": "eastus",
"properties": {
...
"fabricProfile": {
"sku": {...},
"images": [...],
"osProfile": {
"secretsManagementSettings": {
"certificateStoreLocation": "LocalMachine",
"certificateStoreName": "Root",
"observedCertificates": [
"https://<keyvault-uri>/secrets/<certificate-name>"
],
"keyExportable": false
}
},
"storageProfile": {...},
"kind": "Vmss"
}
}
]
}
创建或更新池时osProfile
,fabricProfile
将在属性部分中配置 Azure 密钥库。
secretManagementSettings
设置能够访问所需证书。
az mdp pool create \
--fabric-profile fabric-profile.json
# other parameters omitted for space
以下示例显示了 osProfile
已配置的fabric-profile.json 文件的 secretsManagementSettings
节。
{
"vmss": {
"sku": {...},
"images": [...],
"osProfile": {
"secretsManagementSettings": {
"certificateStoreLocation": "LocalMachine",
"observedCertificates": [
"https://<keyvault-uri>/secrets/<certificate-name>"
],
"keyExportable": false
},
"logonType": "Interactive"
},
"storageProfile": {...}
}
}
配置 SecretManagementSettings
使用池上检索的SecretManagementSettings
证书将自动与密钥库中发布的最新版本同步。 这些机密将在首次运行管道之前保存在计算机上,这意味着可以节省时间并省去提取证书的任务。
重要
如果由于权限或网络问题而无法从密钥库提取机密,则代理虚拟机的预配将失败。
另请参阅