当前位置: 首页 > 知识库问答 >
问题:

无法使用用户分配的标识从Azure密钥库获取机密

葛修永
2023-03-14
"ManagedServiceIdentityConfig": {
          "Type": "SystemAssigned, UserAssigned",
          "**UserAssignedIdentities**": [
            "/subscriptions/1234567890qwer/resourceGroups/my-rg/providers/Microsoft.ManagedIdentity/userAssignedIdentities/my-msi"
          ],
          "ServicePrincipalForSystemAssignedIdentity": "...",
          "ScaleSetIdentity": {
            "principalId": "...",
            "tenantId": "...",
            "type": "SystemAssigned, UserAssigned",
            "**userAssignedIdentities**": {
              "/subscriptions/1234567890qwer/resourceGroups/my-rg/providers/Microsoft.ManagedIdentity/userAssignedIdentities/my-msi": {
                "principalId": "...",
                "clientId": "..."
              }
PS D:\ManagementServiceCommonSetup> $accessToken = (Invoke-WebRequest -Uri 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https://vault.azure.net' -Method GET -Headers @{Metadata="true"} -UseBasicParsing | ConvertFrom-Json).access_token
PS D:\ManagementServiceCommonSetup> echo $accessToken
eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6IkN0ZlFDOExlLThOc0M3b0MyelFrWnBjcmZP...MCQi-bPCJQ
PS D:\ManagementServiceCommonSetup> (Invoke-WebRequest -Uri https://my-kv.vault.azure.net/certificates/my-cert/587898f2?api-version=2016-10-01 -Method GET -Headers @{Authorization="Bearer $accessToken"}).content
Invoke-WebRequest : {"error":{"code":"Forbidden","message":"Access denied","innererror":{"code":"AccessDenied"}}}
At line:1 char:2
+ (Invoke-WebRequest -Uri https://my-kv.vault.azure.net/secrets/my-cert/ ...
+  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-WebRequest], WebExc
   eption
    + FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeWebRequestCommand
    null

更新:

对于用户分配的标识,需要指定对象id或客户端id。

Invoke-WebRequest -Uri "http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https://vault.azure.net&object_id=$($ObjectId)" -Method GET -Headers @{Metadata="true"}

共有1个答案

闾丘坚诚
2023-03-14

1.通过用户分配的身份使用访问令牌检索证书的方法是否正确?

不,您使用的Uri是用于获取secret的,如果您想获取证书,它应该是

Invoke-WebRequest -Uri https://my-kv.vault.azure.net/certificates/my-cert/587898f2?api-version=2016-10-01 -Method GET -Headers @{Authorization="Bearer $accessToken"}

参考:获取证书-获取证书

用户分配的托管身份是一个预览功能,我不确定它是否支持访问keyvault,该文档只是用于系统分配的身份。因此,我建议您使用系统分配的标识来访问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 

系统分配的标识:

用户分配的托管标识:

 类似资料:
  • 接下来的步骤是: 创建了启用标识的新虚拟机(已分配系统) 使用存储帐户中的角色分配在IAM中添加虚拟机 能够使用C#生成令牌 为现有VM获取托管标识服务。 使用-az keyvault set-policy--name“”--object-id“--secret-permissions get list分配了访问azure KV的权限 现在,在执行来自VM的代码时,我得到一个错误

  • > 创建用户分配托管标识Azure资源 提供了对给定密钥库的用户身份的访问 现在,当我试图使用以下C#代码访问keyvault时,它的抛出异常: 加载KV设置时出现异常错误:: 发生了一个或多个错误。(参数:连接字符串:[未指定连接字符串]、资源:https://vault.azure.net、权限:https://login.windows.net/xxxxxxxxx.异常消息:尝试了以下3种方

  • 问题内容: 我尝试从KeyStore获取密钥。我通过Keytool创建了一个密钥库: keytool -genkeypair -dname“ cn = Mark Jones,ou = JavaSoft,o = Sun,c = US” -alias business2 -keypass abcdtest -keystore C:\ workspace \ XMLSample \ keystore \

  • 在我的azure app服务中,在app settings下,我添加了一个名为“something”的密钥,它的值指向密钥库的引用,如下所示: 现在,我可以从appsettings中检索值,但它将输出作为而不是实际值 我希望输出是我设置的值,而不是keyvault引用字符串本身。 我正在使用.NET MVC 4.7 web应用程序

  • 我已经能够通过外部web应用程序使用oauth rest api访问azure key vault,但出于某种原因,我无法从密钥中检索机密。经过长时间的研究,我发现用powershell和C#可以做到这一点,但还没有找到用Python解决方案。有人知道python是否有可能,或者有一种方法可以模拟powershell正在做什么吗?以下是检索秘密的代码: 此外,我已经在azure portal中注册