繁体   English   中英

使用托管身份从 Hashicorp Vault 中检索 Azure 应用服务中的秘密 | 缺少角色 - 错误

[英]Retrieval of secrets in Azure App Service from Hashicorp Vault using Managed Identity | Missing Role - Error

Hashicorp Vault 是我们组织的原生产品,是一种广泛使用和推荐的存储所有键值对或任何秘密的方法。 部署在 Azure 上的任何应用程序也必须从 Hashicorp Vault 而不是从 Azure Key Vault 存储/检索令牌。 我提供此信息只是为了为需求添加一些背景知识。

现在进入实际问题,我在 Azure App Service 上部署了 do.net 应用程序,启用了系统管理的身份,并且能够成功检索到 JWT 令牌。

根据我通过阅读文档理解的流程,它说,首先检索部署在 Azure 上并启用了系统管理身份的应用程序令牌。 完成后,将此令牌传递给 Vault 进行验证,Vault 使用来自 AAD 的 OIDC 对其进行验证。 验证成功后,我将获得 Vault 令牌,该令牌可用于从 Vault 中获取机密。

要执行这些步骤,需要在 Vault 端进行配置,为此,我在安装在我的 windows 本地计算机上的 Vault 服务器上执行了以下所有步骤:-

命令行操作

  1. 启动 Vault 服务器

  2. 打开其他命令提示符并设置环境变量 set VAULT_ADDR=http://127.0.0.1:8200 set VAULT_TOKEN=s.iDdVbLKPCzmqF2z0RiXPMxLk

  3. 保管库授权启用 jwt

  4. 保险库写入 auth/jwt/config oidc_discovery_url=https://sts.windows.net/4a95f16f-35ba-4a52-9cb3-7f300cdc0c60/ bound_issuer=https://sts.windows.net/4a95f16f-35ba-4a52-9cb3-7f300cdc0c60 /

  5. 保管库读取身份验证/jwt/配置在此处输入图像描述 与 sqlconnection 关联的策略:-

在此处输入图像描述

使用命令创建角色(webapp-role)

curl --header “X-Vault-Token: %VAULT_TOKEN%” --insecure --request POST --data @C:\Users\48013\source\repos\HashVaultAzure\Vault-files\payload.json %VAULT_ADDR%/ v1/auth/jwt/角色/webapp-角色

–payload.json { “bound_audiences”: “https://management.azure.com/”,
 “bound_claims”: { “idp”:
 “https://sts.windows.net/4a95f16f-35ba-4a52-9cb3-7f300cdc0c60/”,
 “oid”: “8d2b99fb-f4f4-4afb-9ee3-276891f40a65”, “tid”:
 “4a95f16f-35ba-4a52-9cb3-7f300cdc0c60/” }, “bound_subject”:
 “8d2b99fb-f4f4-4afb-9ee3-276891f40a65”, “claim_mappings”: { “appid”:
 “application_id”, “xms_mirid”: “resource_id” }, “policies”:
 [“sqlconnection”], “role_type”: “jwt”, “token_bound_cidrs”:
 [“10.0.0.0/16”], “token_max_ttl”: “24h”, “user_claim”: “sub” }

保管库读取 auth/jwt/role/webapp-role

在此处输入图像描述

  1. 使用从部署在 Azure AAD 上的应用程序(启用了托管身份)检索到的 JWT 令牌运行以下命令,并将其作为“your_jwt”传递。 此命令应返回保险库令牌,如链接https://www.vaultproject.io/docs/auth/jwt中所示

curl --request POST --data '{"jwt": "your_jwt", "role": "webapp-role"}' http://127.0.0.1:8200/v1/auth/jwt/login

在这一点上,我收到一个错误 – “Missing Role”,

在此处输入图像描述 我被困在这里,找不到任何解决方案。

预期的响应应该是保险库令牌/client_token,如下所示:-

在此处输入图像描述

JWT Token解码信息

 {
  "aud": "https://management.azure.com",
  "iss": "https://sts.windows.net/4a95f16f-35ba-4a52-9cb3-7f300cdc0c60/",
  "iat": 1631172032,
  "nbf": 1631172032,
  "exp": 1631258732,
  "aio": "E2ZgYNBN4JVfle92Tsl1b8m8pc9jAA==",
  "appid": "cf5c734c-a4fd-4d85-8049-53de46db4ec0",
  "appidacr": "2",
  "idp": "https://sts.windows.net/4a95f16f-35ba-4a52-9cb3-7f300cdc0c60/",
  "oid": "8d2b99fb-f4f4-4afb-9ee3-276891f40a65",
  "rh": "0.AVMAb_GVSro1Ukqcs38wDNwMYExzXM_9pIVNgElT3kbbTsBTAAA.",
  "sub": "8d2b99fb-f4f4-4afb-9ee3-276891f40a65",
  "tid": "4a95f16f-35ba-4a52-9cb3-7f300cdc0c60",
  "uti": "LDjkUZdlKUS4paEleUUFAA",
  "ver": "1.0",
  "xms_mirid": "/subscriptions/0edeaa4a-d371-4fa8-acbd-3675861b0ac8/resourcegroups/AzureAADResource/providers/Microsoft.Web/sites/hashvault-test",
  "xms_tcdt": "1600006540"
}

问题在于 Azure Cloud 和 Vault 端都缺少配置。 这些是进一步完成的添加步骤以使其起作用。

创建一个 Azure SPN (相当于创建一个带有客户端密钥的应用程序注册)

az ad sp create-for-rbac --name "Hashicorp Vault Prod AzureSPN" --skip-assignment 在订阅时分配为读者

创建 Vault 配置

保管库身份验证启用 azure 保管库写入 auth/jwt/config tenant_id=lg240e12-76g1-748b-cd9c-je6f29562476 resource=https://management.azure.com/client_id=34906a49-9a8f-462b-9d68-g36f5clientclient_id=33ae40h

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM