【问题标题】:Azure Functions, Deployment Slots and API Management: Function key issueAzure Functions、部署槽和 API 管理:功能键问题
【发布时间】:2018-06-15 11:01:34
【问题描述】:

所以我目前正在使用至少一个具有授权级别(功能)的 Azure 功能并因此使用功能键进行授权的解决方案。我配置了一个部署槽(暂存),我正在通过 VSTS 使用 CD 来构建、部署功能和交换槽。一切正常。

但是现在是 API 管理,而我在 API 管理中注册了该功能,因此最终用户为了与该功能进行交互,他们通过 API 管理来完成。因此,为了 API Management 发出有效请求,它会在后端 URL 请求中注入 Function Key。

但是,每当我部署一个新版本的功能,然后我交换,功能键就会改变。

所以这需要我在api管理中更改功能键。有什么方法可以避免更改密钥(可能生产槽和暂存槽之间的密钥相同?),或者可能是另一种更简单的方法来解决这个问题?

我只是想避免依赖,所以每当我在函数中部署更改时,我不需要担心更改 API 管理,特别是因为它是手动更改。

谢谢

【问题讨论】:

  • 您可以自动执行此更改。您使用的是哪个版本的 azure 函数?键不应该改变。很奇怪
  • Thomas,我正在使用以下运行时版本:1.0.11820.0(最新)。看,我有两个用于功能应用程序的插槽(生产和暂存)。因此,每个插槽都有不同的键。因此,如果我将新版本的函数部署到 staging,然后将 staging 与生产交换,那么当 API 管理尝试联系该函数的生产版本时,由于密钥不再有效,它会失败。
  • 我怎样才能自动化这个改变?使用 ARM 模板?功能键作为参数包含在入站规则中,在 API 管理下的 API 配置中。这意味着我的 ARM 模板需要与 API 管理服务中使用的 API 相关的所有配置,对吗?
  • 哦,所以钥匙互换了?有趣...通过ARM模板可以获取functions key,否则有azure function的key management api:github.com/Azure/azure-functions-host/wiki/Key-management-API
  • 是的,您可以这样做或输出函数 url 并将其注入到发布管道的另一个步骤中

标签: azure azure-functions azure-api-management


【解决方案1】:

Thomas,首先,非常感谢您提供与密钥管理 API 和 ARM 模板相关的建议。实际上,我的发现是:当您使用功能插槽时,每个插槽都有自己的专用键(默认功能键和默认主机键)。因此,当您遇到这种情况时,使用 API 管理请求函数并依赖这些键,那么如果您交换函数中的插槽,API 管理将不再能够成功请求该函数。因此,为了避免在函数的部署过程中创建额外的步骤等,我决定尝试创建一个自定义函数密钥(authkey)并将相同的值关联到两个插槽。因此 api 管理可以使用该密钥,独立于哪个槽是生产槽。

无论如何,我现在对这个解决方案很满意,以避免任何强大的自定义解决方案。

再次感谢托马斯。

【讨论】:

    【解决方案2】:

    在 Azure 门户中,打开您的 Function App 并转到 App Keys 部分。可以通过单击密钥名称来编辑应用密钥。因此,您可以复制生产中使用的密钥,并将其粘贴到另一个部署槽中的相应密钥值中。这样,两个插槽将使用相同的密钥,并且每次交换时都不需要更改。

    如果您使用的是功能键而不是应用程序键,则可以以相同的方式复制和粘贴这些键。

    【讨论】:

      猜你喜欢
      • 2023-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-05
      • 1970-01-01
      • 2020-06-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多