具有非匿名authLevel的Docker中的Http触发Azure函数

时间:2018-11-02 22:36:47

标签: docker azure-functions azure-functions-runtime

我正在Docker容器中使用Http触发的Azure函数。到目前为止,我发现的所有设置此教程的指南都将authLevel"设置为anonymous来配置Azure功能。

仔细阅读this blog之后,似乎也可以(尽管很棘手)配置其他身份验证级别。不幸的是,尚未编写承诺的后续博客文章。

任何人都可以帮助我阐明如何进行设置吗?

2 个答案:

答案 0 :(得分:1)

要控制功能主机在启动时使用的主密钥-而不是生成随机密钥-准备我们自己的host_secrets.json文件,如

{
   "masterKey": {
   "name": "master",
   "value": "asGmO6TCW/t42krL9CljNod3uG9aji4mJsQ7==",
   "encrypted": false
},
"functionKeys": [
      {
         "name": "default",
         "value": "asGmO6TCW/t42krL9CljNod3uG9aji4mJsQ7==",
         "encrypted": false
      }
   ]
}

,然后将此文件输入到功能主机(Dockerfile)的指定机密文件夹中:

用于V1功能(假设您的运行时根为C:\ WebHost):

...
ADD host_secrets.json C:\\WebHost\\SiteExtensions\\Functions\\App_Data\\Secrets\\host.json
...

用于V2功能(假设您的运行时根为C:\ runtime):

...
ADD host_secret.json C:\\runtime\\Secrets\\host.json

USER ContainerAdministrator
RUN icacls "c:\runtime\secrets" /t /grant Users:M
USER ContainerUser

ENV AzureWebJobsSecretStorageType=files
...

功能键可用于调用受保护的功能,例如.../api/myfunction?code=asGmO6TCW/t42krL9CljNod3uG9aji4mJsQ7==

主键可用于调用函数Admin APIKey management API

my blog中,我描述了将V1和更高版本的V2 Functions运行时引入Docker容器并将其托管在Service Fabric中的整个过程。

答案 1 :(得分:0)

我为我找到了一个解决方案,尽管这篇文章已经过时了。我的目标是使用 function authLevel 在 Docker 容器中运行 Http Trigger Azure 函数。为此,我使用以下 Docker 映像:来自 Docker hub 的 Azure Functions Python

在我的存储库准备就绪后,我将创建的容器推送到 Azure 容器注册表。我想通过 Azure Function 运行我的无服务器容器。所以我遵循了 following post 并在我的 Azure 门户中创建了一个新的 Azure Functions。

因此,容器内容对应一个Azure Function Image,容器本身的操作由Azure Function通过Azure实现。这种方式可能并不总是流行,但提供了在那里托管容器的优势。可以通过 Deployment Center 从 Azure 容器注册表中轻松选择容器。

为了通过 function authLevel 访问容器映像,Azure Function ~3 不能创建主机密钥,因为它是在容器内管理的。所以我进行了如下操作:

  1. 自定义我的 function.json
<块引用>
  "authLevel": "function",
  "type": "httpTrigger",
  1. 提供一个存储帐户,以便 Azure Function 可以在那里获得配置。在那里创建一个新容器。
<块引用>

azure-webjobs-secrets

  1. 在容器内使用您的 Azure 函数的名称创建一个目录。
<块引用>

我的功能名称

  1. 一个 host.json 现在可以存储在目录中。这包含 master 密钥。
<块引用>

{“主密钥”:{ "name": "主人", "value": "myprivatekey", "encrypted": false }, "functionKeys": [ ] }

  1. 现在必须配置 Azure 函数才能访问存储帐户。必须将以下值添加到配置中。
<块引用>

AzureWebJobsStorage = 存储帐户连接字符串

<块引用>

WEBSITE_CONTENTAZUREFILECONNECTIONSTRING = 存储帐户连接字符串

<块引用>

WEBSITE_CONTENTSHARE = 我的功能名称

从现在开始,存储的 Azure Function 主密钥可用。因此,容器 API 是通过 authLevel function 配置的,并且只能使用相应的密钥访问。

网址: https://my-function-name.azurewebsites.net/api/helloworld

HEADER: x-functions-key = myprivatekey