Невозможно получить доступ к хранилищу ключей из серверной службы приложений

Я использую хранилище ключей Azure для хранения некоторых конфиденциальных данных. Я предоставил в политике доступа все разрешения, в том числе и для службы приложений разработки, которая содержит серверную часть разработки. локально он работает нормально и успешно получает доступ к данным. проблема, когда я отправил обновление на сервер разработки и попробовал его, служба не работала, и весь сервер не работал. мне пришлось отменить изменения, но есть идеи, чего мне здесь не хватает? Мое приложение размещено в Azure (служба приложений), и управляемое удостоверение активировано. вот конфигурация бэкэнда: в appSetting.json: "your-key-vault-name":"SanedDevKeyVault",

в program.cs: var keyVaultName = builder.Configuration["your-key-vault-name"]; var kvUri = $"https://{keyVaultName}.vault.azure.net"; builder.Configuration.AddAzureKeyVault(new Uri(kvUri), new DefaultAzureCredential());. со стороны Azure: я предоставил сервису приложений для серверной части необходимую ему политику доступа: политика доступа

и я добавил переменную среды в сервис приложения "your-key-vault-name":"SanedDevKeyVault",. он работает локально, но не работает, когда я пытаюсь запустить приложение, размещенное в Azure, после добавления этих изменений.

Пожалуйста, уточните вашу конкретную проблему или предоставьте дополнительную информацию, чтобы выделить именно то, что вам нужно. Поскольку сейчас написано, трудно точно сказать, о чем вы спрашиваете.

Community 13.08.2024 09:41

@dode, какой язык программирования/фреймворк ты используешь для серверной части?

Vivek Vaibhav Shandilya 13.08.2024 12:28

Можете ли вы поделиться своим кодом, который вы пробовали?

Vivek Vaibhav Shandilya 13.08.2024 12:29

@VivekVaibhavShandilya Я использую .net 6 (проект API .net core), и он размещен на Azure. Я настроил хранилище ключей из серверной части. я отредактирую вопрос и добавлю скриншоты

dode 14.08.2024 00:35

@VivekVaibhavShandilya Кроме того, сетевая конфигурация хранилища ключей является общедоступной.

dode 14.08.2024 00:46
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
Как установить LAMP Stack 1/2 на Azure Linux VM
Как установить LAMP Stack 1/2 на Azure Linux VM
В дополнение к нашему предыдущему сообщению о намерении Azure прекратить поддержку Azure Database для MySQL в качестве единого сервера после 16...
0
5
50
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Для доступа к данным из Key Vault необходимо использовать конкретный клиент Ключа, Секрета, Сертификата.

Ниже приведенный код работал у меня.

Я создал секрет и получил его значение с помощью контроллера в API.

Controllers/Keyvault.cs:

using Azure.Security.KeyVault.Secrets;
using Microsoft.AspNetCore.Mvc;

namespace Dotnet_API.Controllers
{
    [ApiController]
    [Route("[controller]")]
    public class KeyVault: ControllerBase
    {
        private readonly ILogger<KeyVault> _logger;
        private readonly  SecretClient _secretClient;

        public KeyVault(ILogger<KeyVault> logger, SecretClient secretClient)
        {
            _logger = logger;
            _secretClient = secretClient;
        }

        [HttpGet]
        public async Task<IActionResult> GetSecret()
        {
            var secretName = "confidential";
            try
            {
                KeyVaultSecret secret = await _secretClient.GetSecretAsync(secretName);
                return Ok(new { SecretValue = secret.Value });
            }
            catch (Exception ex)
            {
                return StatusCode(StatusCodes.Status500InternalServerError, new { Message = ex.Message });
            }
        }
    }
}

Program.cs:

using Azure.Identity;
using Azure.Security.KeyVault.Secrets;
using Microsoft.Extensions.DependencyInjection;

var builder = WebApplication.CreateBuilder(args);


builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
builder.Services.AddControllers();

var KeyVaultUrl = builder.Configuration["KeyVault:Url"];
var secret = builder.Services.AddSingleton(new SecretClient(new Uri(KeyVaultUrl), new DefaultAzureCredential()));

var app = builder.Build();

if (app.Environment.IsDevelopment())
{
    app.UseSwagger();
    app.UseSwaggerUI();
}

app.UseHttpsRedirection();
app.MapControllers();
app.Run();

appsettings.json:

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  },
  "KeyVault": {
    "Url": "https://vivekkeyvault.vault.azure.net"
  }
}

Чтобы разрешить доступ веб-приложению в хранилище ключей, выполните следующие действия:

  • Включить удостоверение, назначенное системой / Добавить удостоверение, назначенное пользователем

  • Создайте политику доступа в хранилище ключей и назначьте необходимый доступ.

Моя секретная ценность:

OUTPUT:

Локально:

с развязностью

без развязности

Лазурный:

Итак, для таких переменных в моем коде, который ожидает значения секретов, определенных в хранилище ключей var client_id = _configuration["HID:HIDClientId"].ToString() ?? ""; var client_secret = _configuration["HID:HIDSecretKey"].ToString() ?? ""; var grant_type = _configuration["HID:HIDGrantType"].ToString() ?? ""; , я не должен оставлять это так, как ожидается, что _configuration будет иметь свое значение. вместо этого я должен использовать API хранилища ключей, который вы только что определили, верно?

dode 14.08.2024 16:06

Да, именно так вы можете получить значения секрета из хранилища ключей.

Vivek Vaibhav Shandilya 14.08.2024 19:42

Другие вопросы по теме