Http 在 Docker 中使用非匿名 authLevel 触发 Azure 函数
Http Trigger Azure Function in Docker with non anonymous authLevel
我正在 Docker 容器中使用 Http Triggered Azure Functions。到目前为止,我找到的有关设置的所有教程和指南都将 Azure Function 配置为 authLevel"
设置为 anonymous
。
仔细阅读 this blog 后,似乎还可以配置其他身份验证级别(尽管很棘手)。不幸的是,承诺的后续博文尚未(尚未)撰写。
任何人都可以帮助我阐明我将如何着手进行设置吗?
要控制函数主机在启动时使用的主密钥 - 而不是生成随机密钥 - 准备我们自己的 host_secrets.json
文件,如
{
"masterKey": {
"name": "master",
"value": "asGmO6TCW/t42krL9CljNod3uG9aji4mJsQ7==",
"encrypted": false
},
"functionKeys": [{
"name": "default",
"value": "asGmO6TCW/t42krL9CljNod3uG9aji4mJsQ7==",
"encrypted": false
}]
}
然后将此文件放入Function宿主(Dockerfile
)指定的secrets文件夹中:
对于 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 API and Key management API。
在 my blog 中,我描述了将 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
我找到了适合我的解决方案,尽管这个 post 已经过时了。我的目标是 运行 在 Docker 容器中使用 function authLevel 的 Http Trigger Azure Function。为此,我使用以下 Docker 图片:Azure Functions Python 来自 Docker hub.
在存储库准备就绪后,我将创建的容器推送到 Azure 容器注册表。我想通过 Azure Function 运行 我的容器无服务器。所以我按照 following post 并在我的 Azure 门户中创建了一个新的 Azure Functions。
因此,容器内容对应一个Azure Function Image,容器本身的运行是通过一个Azure Function通过Azure实现的。这种方式可能并不总是流行,但提供了在那里托管容器的优势。可以通过 Deployment Center.
从 Azure 容器注册表中轻松选择容器
要通过 function authLevel 访问容器映像,Azure Function ~3 无法创建主机密钥,因为这是在容器内管理的。所以我进行了如下操作:
- 自定义我的 function.json
"authLevel": "function",
"type": "httpTrigger",
- 提供一个存储帐户,以便 Azure 函数可以在那里获取配置。在那里创建一个新容器。
azure-webjobs-secrets
- 使用您的 Azure 函数的名称在容器内创建一个目录。
my-function-name
- A host.json 现在可以存储在目录中。这包含 master 密钥。
{"masterKey": {
"name": "master",
"value": "myprivatekey",
"encrypted": false }, "functionKeys": [ ] }
- 现在必须配置 Azure Functions 才能访问存储帐户。必须将以下值添加到配置中。
AzureWebJobsStorage = Storage Account Connection String
WEBSITE_CONTENTAZUREFILECONNECTIONSTRING = Storage Account Connection String
WEBSITE_CONTENTSHARE = my-function-name
从现在开始,存储的 Azure Functions 主密钥可用。因此,容器 API 通过 authLevel function 配置,并且只能使用相应的密钥访问。
URL: https://my-function-name.azurewebsites.net/api/helloworld
HEADER: x-functions-key = myprivatekey
我正在 Docker 容器中使用 Http Triggered Azure Functions。到目前为止,我找到的有关设置的所有教程和指南都将 Azure Function 配置为 authLevel"
设置为 anonymous
。
仔细阅读 this blog 后,似乎还可以配置其他身份验证级别(尽管很棘手)。不幸的是,承诺的后续博文尚未(尚未)撰写。
任何人都可以帮助我阐明我将如何着手进行设置吗?
要控制函数主机在启动时使用的主密钥 - 而不是生成随机密钥 - 准备我们自己的 host_secrets.json
文件,如
{
"masterKey": {
"name": "master",
"value": "asGmO6TCW/t42krL9CljNod3uG9aji4mJsQ7==",
"encrypted": false
},
"functionKeys": [{
"name": "default",
"value": "asGmO6TCW/t42krL9CljNod3uG9aji4mJsQ7==",
"encrypted": false
}]
}
然后将此文件放入Function宿主(Dockerfile
)指定的secrets文件夹中:
对于 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 API and Key management API。
在 my blog 中,我描述了将 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
我找到了适合我的解决方案,尽管这个 post 已经过时了。我的目标是 运行 在 Docker 容器中使用 function authLevel 的 Http Trigger Azure Function。为此,我使用以下 Docker 图片:Azure Functions Python 来自 Docker hub.
在存储库准备就绪后,我将创建的容器推送到 Azure 容器注册表。我想通过 Azure Function 运行 我的容器无服务器。所以我按照 following post 并在我的 Azure 门户中创建了一个新的 Azure Functions。
因此,容器内容对应一个Azure Function Image,容器本身的运行是通过一个Azure Function通过Azure实现的。这种方式可能并不总是流行,但提供了在那里托管容器的优势。可以通过 Deployment Center.
从 Azure 容器注册表中轻松选择容器要通过 function authLevel 访问容器映像,Azure Function ~3 无法创建主机密钥,因为这是在容器内管理的。所以我进行了如下操作:
- 自定义我的 function.json
"authLevel": "function", "type": "httpTrigger",
- 提供一个存储帐户,以便 Azure 函数可以在那里获取配置。在那里创建一个新容器。
azure-webjobs-secrets
- 使用您的 Azure 函数的名称在容器内创建一个目录。
my-function-name
- A host.json 现在可以存储在目录中。这包含 master 密钥。
{"masterKey": { "name": "master", "value": "myprivatekey", "encrypted": false }, "functionKeys": [ ] }
- 现在必须配置 Azure Functions 才能访问存储帐户。必须将以下值添加到配置中。
AzureWebJobsStorage = Storage Account Connection String
WEBSITE_CONTENTAZUREFILECONNECTIONSTRING = Storage Account Connection String
WEBSITE_CONTENTSHARE = my-function-name
从现在开始,存储的 Azure Functions 主密钥可用。因此,容器 API 通过 authLevel function 配置,并且只能使用相应的密钥访问。
URL: https://my-function-name.azurewebsites.net/api/helloworld
HEADER: x-functions-key = myprivatekey