Создание учетной записи хранилища Azure на C # с использованием Fluent API без разрешения общего доступа к большим двоичным объектам

#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, понял, не могли бы вы принять это, если этот пост полезен? Так что это также поможет другим решить аналогичную проблему и закрыть этот вопрос