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



我正在Docker容器中玩一个Http触发的Azure函数。到目前为止,我找到的所有关于设置的教程和指南都将authLevel"设置为anonymous来配置Azure功能。

仔细阅读本博客后,似乎也可以配置其他身份验证级别(尽管很棘手(。不幸的是,承诺的后续博客文章还没有写出来。

有人能帮我澄清一下我将如何进行和设置吗?

要控制Function主机在启动时使用的主密钥,而不是生成随机密钥,请准备我们自己的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:runtimesecrets" /t /grant Users:M
USER ContainerUser
ENV AzureWebJobsSecretStorageType=files
...

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

主密钥可用于调用函数管理API和密钥管理API。

在我的博客中,我描述了将V1和更高版本的V2函数运行时引入Docker容器并在Service Fabric中托管这些容器的整个过程。

对于Windows上的V3函数:

ENV FUNCTIONS_SECRETS_PATH=C:Secrets
ENV AzureWebJobsSecretStorageType=Files
ADD host_secrets.json C:\Secrets\host.json

Linux上的V3函数:

RUN mkdir /etc/secrets/
ENV FUNCTIONS_SECRETS_PATH=/etc/secrets
ENV AzureWebJobsSecretStorageType=Files
ADD host_secrets.json /etc/secrets/host.json

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

在我的存储库准备就绪后,我将创建的容器推送到Azure容器注册表。我想通过Azure功能运行我的容器无服务器。所以我关注了下面的帖子,并在我的Azure门户中创建了一个新的Azure函数。

因此,容器内容对应于Azure功能映像,并且容器本身的操作由Azure功能通过Azure实现。这种方式可能并不总是流行的,但它提供了在那里托管容器的优势。可以通过部署中心从Azure容器注册表中轻松选择容器。

为了使容器映像可以通过函数authLevel访问,Azure函数3无法创建主机密钥,因为它是在容器中管理的。因此,我按照以下步骤进行:

  1. 自定义我的function.json
"authLevel": "function",
"type": "httpTrigger",
  1. 提供存储帐户,以便Azure功能可以在那里获得配置。在那里创建一个新容器
azure-webjobs-secrets
  1. 在容器内创建一个名为Azure函数的目录
my-function-name
  1. host.json现在可以存储在目录中。这包含密钥
{
"masterKey": 
{
"name": "master",
"value": "myprivatekey",
"encrypted": false   
},   
"functionKeys": [] 
}
  1. 现在必须配置Azure功能才能访问存储帐户。必须将以下值添加到配置中
AzureWebJobsStorage = *Storage Account Connection String*
WEBSITE_CONTENTAZUREFILECONNECTIONSTRING = *Storage Account Connection String*
WEBSITE_CONTENTSHARE = *my-function-name*

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

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

标题:x-functions-key: myprivatekey

最新更新