#c# #azure #azure-storage #azure-blob-storage
#c# #azure #azure-хранилище #azure-blob-storage
Вопрос:
Моя цель — создать учетную запись хранилища Azure из кода C # с использованием Fluent API (Microsoft.Azure.Руководство.Свободно).
Мой код выполняется правильно, за исключением того, что в моей организации существует политика, которая требует, чтобы все учетные записи хранилища были созданы с отключенным значением «Разрешить общий доступ к большим двоичным объектам». Есть ли какой-либо способ указать это в качестве опции, используя свободный подход?
TargetStorageAccount = AzureClient.StorageAccounts.Define(storageAccountName)
.WithRegion(Region.AustraliaCentral)
.WithExistingResourceGroup(ResourceGroupName)
.WithSku(StorageAccountSkuType.Standard_LRS)
.WithGeneralPurposeAccountKindV2()
.Create();
Комментарии:
1. я не думаю, что у Fluent на данный момент есть опция, которую вы можете использовать для создания учетной записи хранилища с отключенным «разрешить общий доступ к большим двоичным объектам». Переход на Rest API, вероятно, ваш лучший выбор на данный момент.
2. Как дела? ваша проблема решена?
3. Нет, по-видимому, fluent API не может достичь цели. Итак, я вернулся к использованию Microsoft. Azure. Руководство. Хранение. StorageManagementClient для программного создания учетной записи хранилища, которая запрещает создание общедоступных контейнеров. Это очень плохо, так как я бы предпочел использовать fluent API, но он неполный.
4. @Bonnie я обновил свой ответ. Для этого можно использовать шаблон ARM и fluent API
Ответ №1:
Вы можете использовать шаблон ARM для развертывания учетной записи хранения с отключенным значением «Разрешить общий доступ к большим двоичным объектам».
Для быстрой демонстрации это мой шаблон для учетной записи хранилища:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"storagePrefix": {
"type": "string",
"minLength": 3,
"maxLength": 11
},
"storageSKU": {
"type": "string",
"defaultValue": "Standard_LRS",
"allowedValues": [
"Standard_LRS",
"Standard_GRS",
"Standard_RAGRS",
"Standard_ZRS",
"Premium_LRS",
"Premium_ZRS",
"Standard_GZRS",
"Standard_RAGZRS"
]
},
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]"
}
},
"variables": {
"uniqueStorageName": "[concat(parameters('storagePrefix'), '4testonly')]"
},
"resources": [{
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2019-04-01",
"name": "[variables('uniqueStorageName')]",
"location": "[parameters('location')]",
"sku": {
"name": "[parameters('storageSKU')]"
},
"kind": "StorageV2",
"properties": {
"supportsHttpsTrafficOnly": true,
"allowBlobPublicAccess": false
}
}
],
"outputs": {
"result": {
"type": "string",
"value": "done"
}
}
}
Для параметра allowBlobPublicAccess установлено значение false.
Это код, использующий fluent API для создания этого развертывания:
var storageAccountName = "<your new storage account name>";
var templateJson = File.ReadAllText(@"<path of template file>storageOnly.json");
azure.Deployments.Define("storageDepolyTest")
.WithExistingResourceGroup("<your resource group name>")
.WithTemplate(templateJson)
.WithParameters("{"storagePrefix":{"value":"" storageAccountName ""}}")
.WithMode(DeploymentMode.Incremental)
.Create();
Результат:
Комментарии:
1. Я не уверен, что вы понимаете проблему. Я не могу создать учетную запись хранилища программно, во-первых, потому что существует политика, запрещающая создавать учетные записи хранения, которые разрешают общедоступные контейнеры. Поэтому я не могу программно создать учетную запись хранилища, а затем обновить ее, чтобы не разрешать общедоступные контейнеры через fluent API.
2. @Bonnie, спасибо за советы, на самом деле вы можете использовать fluent API для этого, я обновил свой ответ.
3. Я ценю всю работу над этим. Я думаю, я хотел бы отметить, что использование шаблона ARM является значительно более сложным решением, чем использование Microsoft. Azure. Руководство. Хранение. StorageManagementClient.
4. @Bonnie, понял, не могли бы вы принять это, если этот пост полезен? Так что это также поможет другим решить аналогичную проблему и закрыть этот вопрос