如何通过函数应用程序中的应用程序设置解析 KeyVault 对机密的引用?
How to resolve KeyVault references to secrets via application settings in function apps?
我已经设置了一个单独的测试环境来尝试从 Azure Key Vault 中检索应用程序机密。当测试函数是 运行 return 环境变量时,应用程序设置中的 @Microsoft.KeyVault(...) 引用未解析为引用的秘密或文本。
按照 this 文档创建应用服务并根据密钥保管库对其进行身份验证,我为我的函数创建了一个托管标识,将其添加到 AAD,为此托管标识创建了一个特定的访问策略我的密钥保管库中的 Get Secret 范围,并尝试 with/without 以用户身份使用应用程序启用读取范围。
运行 解决函数应用程序设置引用的诊断工具未产生任何错误。输入应用程序设置
@Microsoft.KeyVault(SecretUri=SecretUri)
或
@Microsoft.KeyVault(VaultName=myvault;SecretName=mysecret;SecretVersion={version})
似乎没有任何改变。我已经等待了长达半小时,以便在 Azure 中复制设置更改,并确保我所做的更改是持久的。
这是我对 return 环境变量的函数应用(写在 python 中):
import json
import logging
import os
import azure.functions as func
def main(req=None) -> func.HttpResponse:
logging.info('Python HTTP trigger function processed a request.')
try:
name = [os.environ["CLIENTID"]]
except:
name=dict()
for d in os.environ:
name[d]=os.environ[d]
if name:
return func.HttpResponse("Params\n{}".format(json.dumps(name, sort_keys=True, indent=4)))
else:
return func.HttpResponse(
"Please pass a name on the query string or in the request body",
status_code=400
)
我希望能够拉取环境变量 CLIENTID。相反,获取该变量失败并且所有环境变量都被 returned。如果我不能 return 单个变量,我会故意 return 所有环境变量,因为我想确保在重命名变量或存在 typing/case 敏感性问题时捕获它。
我和你有同样的问题,我为我的功能启用了 MSI 并在 azure key vault 中授予访问策略的所有权限,但它拒绝了我的访问:
我删除了 appsettings 中的 "CLIENTID" 项目,保存更新并再次创建 "CLINETID" 项目,保存更新。 appsettings 更新成功后,点击 edit 按钮,你可以看到它的状态是 has been solved :
测试结果 :
希望对你有帮助。
我已经设置了一个单独的测试环境来尝试从 Azure Key Vault 中检索应用程序机密。当测试函数是 运行 return 环境变量时,应用程序设置中的 @Microsoft.KeyVault(...) 引用未解析为引用的秘密或文本。
按照 this 文档创建应用服务并根据密钥保管库对其进行身份验证,我为我的函数创建了一个托管标识,将其添加到 AAD,为此托管标识创建了一个特定的访问策略我的密钥保管库中的 Get Secret 范围,并尝试 with/without 以用户身份使用应用程序启用读取范围。
运行 解决函数应用程序设置引用的诊断工具未产生任何错误。输入应用程序设置 @Microsoft.KeyVault(SecretUri=SecretUri)
或
@Microsoft.KeyVault(VaultName=myvault;SecretName=mysecret;SecretVersion={version})
似乎没有任何改变。我已经等待了长达半小时,以便在 Azure 中复制设置更改,并确保我所做的更改是持久的。
这是我对 return 环境变量的函数应用(写在 python 中):
import json
import logging
import os
import azure.functions as func
def main(req=None) -> func.HttpResponse:
logging.info('Python HTTP trigger function processed a request.')
try:
name = [os.environ["CLIENTID"]]
except:
name=dict()
for d in os.environ:
name[d]=os.environ[d]
if name:
return func.HttpResponse("Params\n{}".format(json.dumps(name, sort_keys=True, indent=4)))
else:
return func.HttpResponse(
"Please pass a name on the query string or in the request body",
status_code=400
)
我希望能够拉取环境变量 CLIENTID。相反,获取该变量失败并且所有环境变量都被 returned。如果我不能 return 单个变量,我会故意 return 所有环境变量,因为我想确保在重命名变量或存在 typing/case 敏感性问题时捕获它。
我和你有同样的问题,我为我的功能启用了 MSI 并在 azure key vault 中授予访问策略的所有权限,但它拒绝了我的访问:
我删除了 appsettings 中的 "CLIENTID" 项目,保存更新并再次创建 "CLINETID" 项目,保存更新。 appsettings 更新成功后,点击 edit 按钮,你可以看到它的状态是 has been solved :