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

时间:2017-11-03 15:43:46

标签: c# database azure authentication azure-webjobs

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

我想知道这里是否有人这样做过,我找到了.NET的天蓝色管理库,其中包含数据库创建的例子,但我仍然坚持授权,因为这将通过后端流程完成? / p>

我是否可以在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来说是不切实际的。

希望这是有道理的,有人可以为我阐明它吗?

1 个答案:

答案 0 :(得分:6)

你走在正确的轨道上。

您必须为WebJob创建服务主体,这实际上是应用程序的凭据。您将获得客户端ID和密码(应用程序的用户名和密码),可用于对Azure Active Directory进行身份验证,并获取访问令牌以调用API(例如Azure的管理API)。

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

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

创建资源组

所以:

  1. 按照文档
  2. 创建应用
  3. 密钥(客户端密钥)添加到应用程序,如文档
  4. 中所示
  5. 复制客户端ID和密码+租户ID,因为稍后在使用API​​时需要它们
  6. 通过门户网站
  7. 为服务主体分配角色/角色
  8. 您现在可以编写使用您获得的凭据的程序(此库非常好:https://docs.microsoft.com/en-us/dotnet/azure/dotnet-sdk-azure-concepts?view=azure-dotnet
  9. 关于存储机密的简短说明:

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