linux怎么查看本机内存大小
271
2022-09-29
使用BICEP实现Azure资源自动创建 - policy和role assignment
BICEP可以拿出来写的东西其实还是挺多的,时不时用到点啥东西就可以拿出来分享下,这次用到的就是使用BICEP创建policy和role assignment,这两个资源和之前创建的VM,storage等还是有点区别的,VM,storage一般都只需要部署到resource group里即可,但是policy和role assignment是可能在subscription甚至manage group层面来部署的,如果想在这个层面部署资源,那么就要说下BICEP里scope的概念
这点其实和ARM Template是完全一致的,之前介绍的内容里都是把资源部署到resource group层面,但是如果想部署resource group呢?这种情况下就应该用subscription级别的部署,ARM Template和BICEP中有四个可以部署的scope,分别是
resource groupsubscriptionmanage grouptenant
部署用到的命令分别是
az deployment group create az deployment sub create az deployment mg create az deployment tenant create
除了部署用到的命令不一样之外,在BICEP模板中也要指定好target scope
就拿这次要介绍的policy和role assignment举例
首先来看policy的部署,本次示例目的是在subscription级别部署一个policy,然后assign给某一个subscription,因此在部署的模板里就要指定部署的target是subscription level
targetScope = 'subscription' //注意这里指定了部署范围是subscriptionvar policyDefinitionName = 'DenyStorageCoolTier'var policyAssignmentName = 'DenyStorageCoolTier'resource policyDefinition 'Microsoft.Authorization/policyDefinitions@2020-03-01' = { name: policyDefinitionName properties: { policyType: 'Custom' mode: 'All' parameters: {} displayName: 'deny cool access tier' description: 'deny cool access tier for storage accounts in subcription' policyRule: { if: { allOf: [ { field: 'type' equals: 'Microsoft.Storage/storageAccounts' } { field: 'kind' equals: 'BlobStorage' } { field: 'Microsoft.Storage/storageAccounts/accessTier' equals: 'cool' } ] } then: { effect: 'deny' } } }}resource policyAssignment 'Microsoft.Authorization/policyAssignments@2020-03-01' = { name: policyAssignmentName properties: { policyDefinitionId: policyDefinition.id }}
而在部署的时候要用到的命令就变成了az deployment sub,首先来用what if检查下
az deployment sub what-if --template-file .\denycool.bicep --location eastasia
部署完成
az deployment sub create --template-file .\denycool.bicep --location eastasia
在portal也可以看到相关的资源了
同样的,如果是role assignment,比如要给service principal授权访问subscription甚至是manage group,都可以通过指定target scope然后配合对应部署命令的形式,或者更灵活的方法是写成module,然后直接在BICEP文件里就指定scope
targetScope = 'subscription'@description('Service principal object id')param principalId string@description('roleDefinition for the assignment - reader role assigned')param roleDefinitionId string = 'acdd72a7-3385-48ef-bd42-f606fba81ae7'var roleAssignmentName = guid(subscription().id, principalId, roleDefinitionId)resource roleAssignment 'Microsoft.Authorization/roleAssignments@2021-04-01-preview' = { name: roleAssignmentName properties: { principalType: 'ServicePrincipal' roleDefinitionId: subscriptionResourceId('Microsoft.Authorization/roleDefinitions', roleDefinitionId) principalId: principalId description: 'assign reader role to service principal for resource access purpose' }}
主义需要在参数里指定被授权的service principal的object id
az deployment sub what-if --template-file .\role.bicep --location eastasia --parameters principalId= ''
az deployment sub create --template-file .\role.bicep --location eastasia --parameters principalId= ''
之后在portal是可以看到对应的信息的
如果想在mg层面授权的话,那么就把target scope改成mg,然后使用对应的az deployment mg 命令来部署就行了,总体来说并不复杂
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~