Azure部署访问策略时,是否必须在name属性中填写实际object-ID?
Azure API连接访问策略相关问题解答
1. access policy的name属性是不是必须填实际的object-ID?
不是强制要求。你测试时用任意字符串都能正常生效是正确现象:Azure平台在做权限校验时,只会读取properties.principal.identity配置段里的objectId和tenantId值确认身份,完全不会校验访问策略的name字段内容。
2. 为啥官方ARM示例要在name和properties两处都写object-ID?
这是微软官方推荐的命名约定,不是技术层面的强制规则,这么做主要有三个好处:
- 方便排查问题:访问策略是API连接的子资源,在Azure门户的资源列表里直接用object ID当策略名,一眼就能看出每条策略对应哪个AD身份,不用点进详情页翻属性,省很多时间
- 避免冗余配置:object ID本身是全局唯一的,用它当策略名的话,同一个AD身份在同一个API连接下只会有一条访问策略,重复部署ARM模板的时候会直接更新现有策略,不会生成没用的重复策略
- 不会出现命名冲突:ARM要求同一个父资源下的子资源名称必须唯一,用全局唯一的object ID当策略名,天然不会出现不同身份的策略重名导致部署失败的问题
实操建议
- 临时测试场景:随便写name就行,完全不影响策略生效
- 生产环境用ARM/Bicep做规模化部署:强烈建议跟着官方约定来,用关联身份的object ID当策略名,能省很多后期运维的麻烦
官方示例ARM模板代码:
{ "type": "Microsoft.Web/connections/accessPolicies", "apiVersion": "2016-06-01", "name": "[concat('<connection-name>'),'/','<object-ID>')]", "location": "<location>", "dependsOn": [ "[resourceId('Microsoft.Web/connections', parameters('connection_name'))]" ], "properties": { "principal": { "type": "ActiveDirectory", "identity": { "objectId": "<object-ID>", "tenantId": "<tenant-ID>" } } } }
内容的提问来源于stack exchange,提问作者K.J.M.O.
相关产品推荐
相关产品推荐

