c# - 用 C# 编写的 WebJob 可以创建 Azure 数据库吗?

标签 c# database azure authentication azure-webjobs

本周我一直在使用 PowerShell 为我们的部署创建一个新的 Azure 环境,最后一部分要求使用 C# 编写的 WebJob 来接受来自队列的消息并创建一个新数据库并创建如下结构必填。

我想知道这里是否有人以前做过此操作,我找到了 .NET 的 azure 管理库,其中包含数据库创建的示例,但我坚持授权,因为这将通过后端进程完成?

我是否可以在我的 Azure 环境中创建信任,以允许我的 WebJob 连接 Azure(尽管应用程序在同一订阅中运行)并创建新数据库?

目前我真的没有任何代码更像想法,这就是我寻求帮助的原因:)

我假设我会使用类似的东西来进行身份验证?

var credentials = SdkContext.AzureCredentialsFactory.FromServicePrincipal(
            "clientid",
            "clientsecret",
            "tenantid",
            AzureEnvironment.AzureGlobalCloud);

        // Connect to Azure
        var azure = Azure.Authenticate(credentials).WithDefaultSubscription();

我认为我可能需要在 Azure 本身中做一些事情来信任 WebJob 有权创建新的 Azure 数据库,但这是我不确定的部分。

在 PowerShell 中,我通过让 PS 调出 Microsoft Live 登录屏幕来完成身份验证,但这对于没有 UI 的 WebJob 来说并不实用。

希望这是有道理的,有人可以为我解释一下吗?

最佳答案

你走在正确的道路上。

您必须为 WebJob 创建一个服务主体,它本质上是应用程序的凭据。您将获得它的客户端 ID 和密码(即应用程序的用户名和密码),它可用于针对 Azure Active Directory 进行身份验证,并获取访问 token 来调用 API(例如 Azure 的管理 API)。

您可以在此处查看如何在 Azure AD 中创建应用程序(这也会创建服务主体):https://learn.microsoft.com/en-us/azure/azure-resource-manager/resource-group-create-service-principal-portal#create-an-azure-active-directory-application

然后,您可以为任何资源/资源组/订阅上的服务主体分配角色。由于您需要它能够创建资源,因此它至少应该是资源组上的贡献者。如果您还需要创建资源组

所以:

  1. 按照文档中的说明创建应用
  2. 按照文档中的说明向应用添加 key (客户端 key )
  3. 复制客户端 ID 和 key + 租户 ID,因为稍后使用 API 时需要它们
  4. 通过门户为服务主体分配一个或多个角色
  5. 您现在可以使用您获得的凭据编写程序(这个库非常好:https://learn.microsoft.com/en-us/dotnet/azure/dotnet-sdk-azure-concepts?view=azure-dotnet)
<小时/>

有关存储 secret 的简短说明:

您应该小心客户端 key ,它本质上是一个密码。 至少,您应该将其存储在 Web 应用程序的应用程序设置中,而不是代码中。更好的方法是将 Azure Key Vault 与 Azure AD 托管服务标识结合使用:https://joonasw.net/view/azure-ad-managed-service-identity .

关于c# - 用 C# 编写的 WebJob 可以创建 Azure 数据库吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47099578/

相关文章:

c# - 如何拼接很少重叠的图像?

c# - 如何获取文件的最后修改日期?

c# - 从 Outlook 2010 中的选定邮件项目获取信息

mysql - 在 MySQL 中对多个数据运行相同 SELECT 的最简单方法

c - 如何在 postgres 扩展中定义动态字符串数据类型?

可筛选与可搜索的 Azure 搜索性能过滤表

c# - 方法 X 不支持转换为 SQL - bool 值和日期时间

php - 使用数据库中已有的值更新数据库的值

azure - 云中自定义客户端服务器应用程序的负载平衡

azure - 使用 ADF 的数据 block 或函数?