Я разработчик Azure SDK для Key Vault. Azure Key Vault предоставляет централизованное и безопасное хранилище, которое может проверять подлинность нескольких пользователей, участников службы (приложений) или управляемых удостоверений (подробнее об этом в секунду) с различными наборами разрешений. Подобно тому, как сопровождающие могут иметь возможность перечислять, получать и устанавливать секреты, ключи и сертификаты, в то время как приложения и управляемые удостоверения могут иметь возможность только получать и, возможно, перечислять (если вам по какой-то причине необходимо перечислить все секреты, например запуск конфигурации некоторых приложений) процедуры, чтобы заполнить все секреты, соответствующие некоторому образцу). Это дает возможность контролировать, кто и к чему может получить доступ.
В идеале - и в соответствии с рекомендациями - вы по возможности используете управляемые удостоверения. Управляемые удостоверения позволяют запускать ваше приложение с определенным идентификатором, которым управляет Azure. Пароль не указан. Приложение работает под этим именем, , к которому вы можете предоставить доступ в хранилище ключей с любыми разрешениями, имеющими смысл для ваших нужд.
Примеры , такие как тот, на который вы ссылались склоняются к упрощению c примеров для объяснения концепции, но мы поняли и пытаемся обновить документы, подобные этой, чтобы рекомендовать управляемые удостоверения.
Однако секреты приложения все еще могут использоваться довольно безопасно. Типичный подход состоит в том, что только несколько человек знают эти секреты (они сами могут храниться в хранилище ключей, и только несколько человек могут иметь доступ к этому хранилищу ключей для получения списка и получения значений), поскольку вам в любом случае потребуется доступ для их добавления. ), но затем добавьте их как переменные среды в ваше приложение. Azure и другие службы (GitHub, AppVeyor и др. c.) Часто имеют способы защиты секретов.
Например, ваше приложение может использовать переменные среды, которые вы установили перед защитой рук, например:
AZURE_TENANT_ID="some GUID - doesn't really have to be secret, but doesn't hurt"
AZURE_CLIENT_ID="secret GUID for service principal ID"
AZURE_CLIENT_SECRET="secret value for service principal ID"
Затем, используя наши пакеты Azure. *, Вы можете сделать так, чтобы ваш код делал что-то вроде этого:
SecretAsyncClient secretAsyncClient = new SecretClientBuilder()
.vaultUrl("https://myvault.vault.azure.net/")
.credential(new DefaultAzureCredentialBuilder().build())
.buildAsyncClient();
String secret;
secretAsyncClient.getSecret("secretName")
.subscribe(secretWithVersion ->
secret = secretWithVersion.getValue());
Вы можете использовать это или - лучше - другой принципал службы для развитие. При разработке Azure Key Vault SDK я настроил свой собственный SP, который я использую только для целей разработки, в то время как наши тестировщики используют другой, использующий переменные в Azure DevOps, извлеченные из аутентифицированного соединения Key Vault .
Вы можете дополнительно расширить это на различные среды разработки, тестирования и расширения, в каждой из которых может быть отдельный субъект службы для доступа к различным хранилищам (возможно, для повышения безопасности хранилища с меньшим количеством авторизованных приложений / людей).
Надеюсь, это поможет. Дайте мне знать, если у вас есть дополнительные вопросы.