如何处理在每个 API 调用中使用 header 身份验证的自定义连接器?
How to handle a Custom Connector that uses header authentication in each API call?
我有一个 Azure 逻辑应用程序,它使用我通过导入 Postman Collection 创建的自定义连接器。我的连接器调用的 RESTful API 在每个请求中需要 3 次身份验证 headers:UserName
、Secret
、ApiIntegrationCode
。因为它需要三个特别命名的参数,所以我认为任何身份验证预设都不适合我。
我知道我可以保护各种连接器的输入和输出。我一直在考虑将敏感信息存储在我在每个 运行 中查询的 SQL table 中,并将值存储在我传递给每个自定义连接器的 API 来电。
这是否是保护敏感数据不被可能有权访问我的逻辑应用程序的人看到的可行方法?我可以在每次调用中传递这些 headers 的最安全方法是什么?
在这方面,(消费)逻辑应用程序中没有太多选择。
您对逻辑应用程序的选择
朝着正确方向迈出的第一步是将敏感信息放入逻辑应用程序的 Azure Key Vault and use the corresponding connector 中,以便从那里检索数据。这比为此目的查询 SQL table 更容易实现和更安全。
您可以做的第二件事是为进行 API 调用的连接器激活 secure inputs。这确保传递给这些连接器的敏感信息在逻辑应用程序的 运行 历史记录和 Azure Log Analytics 等连接服务中被混淆。
这种方法的问题在于,任何对您的逻辑应用程序不仅具有读取权限的人都可以继续并停用安全输入设置或创建一个转储 Key Vault 内容的步骤。您可以使用 RBAC 来控制对逻辑应用程序的访问,但这当然意味着管理开销。
备选方案:API 管理服务
如果您无论如何都希望允许其他开发人员更改逻辑应用程序而不向他们公开 API 秘密,您可以考虑使用某种中间层与 API 进行通信。 Azure API Management Service (APIM) 是这里的选项之一。
您将在 Key Vault 中管理您的敏感信息,并通过“命名值”将它们注入您的 APIM 实例。然后,您可以将 API 添加为 APIM 中的后端,并将其公开给您的逻辑应用程序。
这里的优点是您可以使用可以频繁循环的 APIM subscription keys 来安全访问您的 API。您还可以将对原始 API 的访问限制为仅那些需要逻辑应用可用的调用。
APIM 是否适合您取决于您的用例,因为它需要付出一定的代价。即使是开发者计划,每月也要花费大约 50 美元:https://azure.microsoft.com/en-us/pricing/details/api-management/
备选方案:Azure 函数
您可以使用一个简单的 Azure Function that serves as a middle tier between your Logic App and your API. This function can be configured to pull the sensitive data from a Key Vault and can also be secured via a function access key,您可以定期续订。
如果您运行在消费计划中使用这些功能,这是一个非常便宜的选择:https://azure.microsoft.com/en-us/pricing/details/functions/
我有一个 Azure 逻辑应用程序,它使用我通过导入 Postman Collection 创建的自定义连接器。我的连接器调用的 RESTful API 在每个请求中需要 3 次身份验证 headers:UserName
、Secret
、ApiIntegrationCode
。因为它需要三个特别命名的参数,所以我认为任何身份验证预设都不适合我。
我知道我可以保护各种连接器的输入和输出。我一直在考虑将敏感信息存储在我在每个 运行 中查询的 SQL table 中,并将值存储在我传递给每个自定义连接器的 API 来电。
这是否是保护敏感数据不被可能有权访问我的逻辑应用程序的人看到的可行方法?我可以在每次调用中传递这些 headers 的最安全方法是什么?
在这方面,(消费)逻辑应用程序中没有太多选择。
您对逻辑应用程序的选择
朝着正确方向迈出的第一步是将敏感信息放入逻辑应用程序的 Azure Key Vault and use the corresponding connector 中,以便从那里检索数据。这比为此目的查询 SQL table 更容易实现和更安全。
您可以做的第二件事是为进行 API 调用的连接器激活 secure inputs。这确保传递给这些连接器的敏感信息在逻辑应用程序的 运行 历史记录和 Azure Log Analytics 等连接服务中被混淆。
这种方法的问题在于,任何对您的逻辑应用程序不仅具有读取权限的人都可以继续并停用安全输入设置或创建一个转储 Key Vault 内容的步骤。您可以使用 RBAC 来控制对逻辑应用程序的访问,但这当然意味着管理开销。
备选方案:API 管理服务
如果您无论如何都希望允许其他开发人员更改逻辑应用程序而不向他们公开 API 秘密,您可以考虑使用某种中间层与 API 进行通信。 Azure API Management Service (APIM) 是这里的选项之一。
您将在 Key Vault 中管理您的敏感信息,并通过“命名值”将它们注入您的 APIM 实例。然后,您可以将 API 添加为 APIM 中的后端,并将其公开给您的逻辑应用程序。
这里的优点是您可以使用可以频繁循环的 APIM subscription keys 来安全访问您的 API。您还可以将对原始 API 的访问限制为仅那些需要逻辑应用可用的调用。
APIM 是否适合您取决于您的用例,因为它需要付出一定的代价。即使是开发者计划,每月也要花费大约 50 美元:https://azure.microsoft.com/en-us/pricing/details/api-management/
备选方案:Azure 函数
您可以使用一个简单的 Azure Function that serves as a middle tier between your Logic App and your API. This function can be configured to pull the sensitive data from a Key Vault and can also be secured via a function access key,您可以定期续订。
如果您运行在消费计划中使用这些功能,这是一个非常便宜的选择:https://azure.microsoft.com/en-us/pricing/details/functions/