【问题标题】:Azure Key Vault reference in Azure App ServiceAzure 应用服务中的 Azure Key Vault 参考
【发布时间】:2022-01-24 17:30:58
【问题描述】:

我目前正在将 docker 容器部署到 Azure 应用服务槽。

我正在使用基于 Linux 的应用服务(应用服务计划 S1),并且容器托管在 Azure 容器注册表中。

我已经为应用服务配置了所需的 DOCKER_REGISTRY_SERVER_* 设置。

对于服务器密码,我使用的是密钥保管库参考 (@Microsoft.KeyVault(VaultName=my-vault;SecretName=my-secret))。我为应用服务槽创建了一个托管标识,并在密钥保管库中分配了 GET 秘密权限。 应用设置也表明它是一个有效的参考:

Successful key vault reference

但是,当我尝试浏览该网站时,我在日志中收到一条错误消息,指出 ACR 上的拉取请求未经授权。

App Service log error

2022-01-24T09:21:33.589Z INFO  - Pulling image: ******.azurecr.io/******:33819
2022-01-24T09:21:33.730Z ERROR - DockerApiException: Docker API responded with status code=InternalServerError, response={"message":"Get https://******.azurecr.io/v2/******/manifests/33819: unauthorized: authentication required, visit https://aka.ms/acr/authorization for more information."}
2022-01-24T09:21:33.740Z ERROR - Pull image threw Exception: Input string was not in a correct format.
2022-01-24T09:21:33.747Z INFO  - Pulling image from Docker hub: ******.azurecr.io/******:33819
2022-01-24T09:21:33.870Z ERROR - DockerApiException: Docker API responded with status code=InternalServerError, response={"message":"Get https://******.azurecr.io/v2/******/manifests/33819: unauthorized: authentication required, visit https://aka.ms/acr/authorization for more information."}
2022-01-24T09:21:33.872Z WARN  - Image pull failed. Defaulting to local copy if present.

当我将 DOCKER_REGISTRY_SERVER_PASSWORD 值替换为实际密码时,应用服务能够成功拉取容器并启动网站。

为什么这不起作用?

【问题讨论】:

  • 您好 Bas van der Kruijssen,欢迎来到堆栈溢出。我可以提个建议吗?如果您以文本形式复制和粘贴信息,而不是使用屏幕截图,您的问题会更好。它有助于提高可读性、可索引性等。
  • 嗨@VinceBowdren,感谢您的提示。我已经用错误消息更新了我的帖子。我留下了 keyvault 参考的屏幕截图,因为这是正确配置密钥的视觉参考。

标签: azure azure-web-app-service azure-keyvault azure-container-registry


【解决方案1】:

当我将 DOCKER_REGISTRY_SERVER_PASSWORD 值替换为 应用服务能够成功拉取的实际密码 容器并启动网站。

由于您的容器注册表无权访问 Azure Key Vault 机密,因此您收到 ACR 上的拉取请求是未经授权的错误

您可以将系统分配的托管标识分配给您的 Azure 容器注册表,并在密钥保管库中分配 GET 机密权限

然后您就可以仅使用密钥库参考来拉取容器并启动网站

【讨论】:

  • 读取权限不应该来自应用服务吗? keyvault 引用位于应用服务的应用程序设置中,我认为这是用于获取 keyvault 机密的托管标识。这也是文档所述:docs.microsoft.com/en-us/azure/app-service/…
  • 但 Azure 容器注册表也使用密钥保管库机密
猜你喜欢
  • 2019-01-07
  • 2020-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-10
  • 2021-05-17
  • 2020-06-02
  • 2021-09-08
相关资源
最近更新 更多