[英]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 服务器上执行了以下所有步骤:-
命令行操作
启动 Vault 服务器
打开其他命令提示符并设置环境变量 set VAULT_ADDR=http://127.0.0.1:8200 set VAULT_TOKEN=s.iDdVbLKPCzmqF2z0RiXPMxLk
保管库授权启用 jwt
保险库写入 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 /
使用命令创建角色(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
- 使用从部署在 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.