J'essaie d'attribuer le rôle "Contributeur de données de stockage blob (aperçu)" à un conteneur de stockage spécifique via un modèle arm. Mais je n'arrive tout simplement pas à trouver la syntaxe correcte.
Voici ce que j'ai:
new-AzResourceGroupDeployment : 09:21:24 - Error: Code=InvalidTemplate; Message=Deployment template validation failed: 'The template resource 'STORAGEACCOUNTNAME/blobServices/containers/CONTAINERNAME/Microsoft.Authorization/GUID' for type 'Microsoft.Storage/storageAccounts/STORAGEACCOUNTNAME/blobServices/default/containers/CONTAINERNAME/providers/Microsoft.Authorization/roleAssignments' at line '44' and column '9' has incorrect segment lengths. A nested resource type must have identical number of segments as its resource name. A root resource type must have segment length one greater than its resource name. Please see https://aka.ms/arm-template/#resources for usage details.'.
Je peux attacher le rôle de lecteur au compte de stockage lui-même avec succès. Mais pour le conteneur, j'obtiens l'erreur suivante:
{ "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "parameters": { "principalId": { "type": "string", "metadata": { "description": "The principal to assign the role to" } }, "builtInRoleType": { "type": "string", "allowedValues": [ "Contributor", "Reader", "StorageBlobDataContributor" ], "metadata": { "description": "Built-in role to assign" } } }, "variables": { "apiVersion": "2017-05-01", "Owner": "[concat('/subscriptions/', subscription().subscriptionId, '/providers/Microsoft.Authorization/roleDefinitions/', '8e3af657-a8ff-443c-a75c-2fe8c4bcb635')]", "Contributor": "[concat('/subscriptions/', subscription().subscriptionId, '/providers/Microsoft.Authorization/roleDefinitions/', 'b24988ac-6180-42a0-ab88-20f7382dd24c')]", "Reader": "[concat('/subscriptions/', subscription().subscriptionId, '/providers/Microsoft.Authorization/roleDefinitions/', 'acdd72a7-3385-48ef-bd42-f606fba81ae7')]", "StorageBlobDataContributor": "[concat('/subscriptions/', subscription().subscriptionId, '/providers/Microsoft.Authorization/roleDefinitions/', 'ba92f5b4-2d11-453d-a403-e96b0029c9fe')]", "TestVariable": "[concat('STORAGEACCOUNTNAME','/Microsoft.Authorization/',guid(subscription().subscriptionId))]" }, "resources": [ { "type": "Microsoft.Storage/storageAccounts/providers/roleAssignments", "apiVersion": "[variables('apiVersion')]", "name": "[variables('TestVariable')]", "properties": { "roleDefinitionId": "[variables('Reader')]", "principalId": "[parameters('principalId')]" } }, { "type": "Microsoft.Storage/storageAccounts/STORAGEACCOUNTNAME/blobServices/containers/blobCONTAINERNAME/providers/Microsoft.Authorization/roleAssignments", "apiVersion": "[variables('apiVersion')]", "name": "STORAGEACCOUNTNAME/blobServices/containers/default/blobCONTAINERNAME/Microsoft.Authorization/NEW-GUID", "properties": { "roleDefinitionId": "[variables('StorageBlobDataContributor')]", "principalId": "[parameters('principalId')]" } } ], "outputs": {} }
J'ai essayé tellement de façons en essayant d'attacher le rôle, que je n'ai plus d'idée. Quelqu'un peut-il m'aider?
3 Réponses :
vous devez construire quelque chose comme ceci:
"type": "Microsoft.Storage/storageAccounts/blobServices/containers/providers/roleAssignments", "name": "STORAGEACCOUNTNAME/default/CONTAINERNAME/Microsoft.Authorization/NEW-GUID" Microsoft.Storage/storageAccounts/STORAGEACCOUNTNAME/containers/CONTAINERNAME/providers/Microsoft.Authorization/roleAssignments/NEW-GUID
et resourceId est normalement construit comme
type: microsoft.network/virtualnetworks/subnets name: vnetName/subnetName microsoft.network/virtualnetworks/vnetName/subnets/subnetName
par exemple, pour le sous-réseau serait (notez qu'il prend 1 segment de chaque ligne à son tour, sauf pour le premier, le premier est toujours 2 segments):
type: provider/namespace name: name provider/namespace/name
si cela est même possible, il le serait ressemble à quelque chose comme ceci:
resourceId/Microsoft.Authorization/roleAssignments/NEW-GUID
J'ai fait quelques petits ajustements:
"type": "Microsoft.Storage/storageAccounts/blobServices/containers/providers/roleAssignments", "name": "STORAGEACCOUNTNAME/default/CONTAINERNAME/Microsoft.Authorization/NEW-GUID"
De cette façon, je peux attribuer des rôles sur le conteneur lui-même. Merci 4c74356b41 de m'avoir pointé dans la bonne direction
Salut, j'ai le même problème que vous, mais j'obtiens toujours l'erreur "Format de demande incorrect". Une idée pourquoi cela pourrait être?
En utilisant la réponse d'Erik ci-dessus ( que j'ai voté à la hausse bien sûr, merci Erik! ), J'ai pu résoudre le problème similaire concernant les autorisations RBAC sur une file d'attente d'un compte de stockage à l'aide de modèles ARM.
Voici un exemple de modèle ARM pour ajouter un rôle d'expéditeur à une seule file d'attente d'un compte de stockage ...
<..snip..> "parameters": { "PrincipalId": { "type": "string", "minLength": 36, "maxLength": 36 } }, "variables": { "SubscriptionId": "[concat('/subscriptions/', subscription().subscriptionId)]", "RoleDefinitions": "[concat(variables('SubscriptionId'), '/providers/Microsoft.Authorization/roleDefinitions/')]", "QueueSenderRole": "c6a89b2d-59bc-44d0-9896-0f6e12d7b80a" }, "resources": [ { "type": "Microsoft.Storage/storageAccounts/queueServices/queues/providers/roleAssignments", "name": "mystorageaccount/default/myqueue/Microsoft.Authorization/00000000-1234-0000-5678-000000000000", // NB example only; pick an idempotent but unique value "apiVersion": "2018-09-01-preview", "properties": { "roleDefinitionId": "[concat(variables('RoleDefinitions'), variables('QueueSenderRole'))]", "principalId": "[parameters('PrincipalId')]" } } ]