1.Это ли верный способ получения сертификата с использованием токена доступа через назначенную пользователем идентификационную информацию?
Нет, Uri, который вы использовали для получения секрета , если вы хотите получить сертификат, это должно быть
Invoke-WebRequest -Uri https://my-kv.vault.azure.net/certificates/my-cert/587898f2?api-version=2016-10-01 -Method GET -Headers @{Authorization="Bearer $accessToken"}
Ссылка: Получить сертификат - Получить сертификат
2. Почему в доступе отказано? Насколько я понимаю, контроль доступа (IAM) здесь не нужен, поскольку я добавил MSI для политик доступа.
Ваше понимание верно. Проверьте это в Access policies
еще раз, убедитесь, что вы дали Certificate permissions
(вы также можете попробовать Select all
, это удобно).
Обновление:
Я тестирую его в Windows vm, в vmss логика должна быть такой же, документ для VM и VMSS для доступа к keyvault вместе.
И если я тестирую с system-assigned identity
, он работает нормально. Если я проверяю его с user-assigned managed identity
, я также получаю ошибку 403.
user-assigned managed identity
- это функция Preview , я не уверен, поддерживает ли она доступ к keyvault, документ предназначен только для system-assigned identity
. Поэтому я рекомендую вам использовать system-assigned identity
для доступа к keyvault, вы можете попробовать.
$response = Invoke-WebRequest -Uri 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fvault.azure.net' -Method GET -Headers @{Metadata="true"} -UseBasicParsing
$content = $response.Content | ConvertFrom-Json
$KeyVaultToken = $content.access_token
(Invoke-WebRequest -Uri https://<keyvault-name>.vault.azure.net/certificates/<{certificate-name}>/<certificate-version>?api-version=2016-10-01 -Method GET -Headers @{Authorization="Bearer $KeyVaultToken"} -UseBasicParsing).content
системный идентификатор :
назначенный пользователем управляемый идентификатор :