【问题标题】:Terraform-Azure: Grant Access to azure resource for groupTerraform-Azure:授予组对 azure 资源的访问权限
【发布时间】:2020-04-08 10:42:35
【问题描述】:

专家,

我有一种情况,我必须将多个 Azure 资源的访问权限授予特定组,而我必须仅使用 Terraform 来执行此操作。 例子: Azure 组名称:India-group(该组中有 5-6 个用户) Azure 订阅名称:印度 Azure 资源 SQL 数据库:SQL-db-1 Azure 资源密钥库:India-key-vlt-1 Azure 资源存储帐户:India-acnt-1 还有更多像 PostgreSQL、存储帐户、blob ......

【问题讨论】:

  • 你有多个资源,我认为有不同的类型可以访问它们或组。因此,您需要为每种资源选择使用哪种类型并自己尝试。社区只能帮你解决问题,但不能为你做所有事情。
  • 那么你能更清楚地更新你的问题吗?
  • 感谢您的评论,查尔斯。我确实理解这一点,因为我是 Terraform 的新手,我只是希望有一些示例 terraform 来授予对具有该角色的资源的访问权限,这就是我提供一些示例名称的原因,然后我将采用相同的方法来实现对于我自己的所有其他资源类型和角色。我会专心学习。但我必须说“非常感谢您宝贵的评论和时间,我真的很感激”。
  • 好吧,我给你举个例子。如果您有更多问题,我也很乐意为您提供帮助。
  • 对您解决问题有帮助吗?请告诉我。

标签: azure terraform-provider-azure azure-resource-group


【解决方案1】:

我认为您不需要关心资源组如何访问资源。您需要关心的是如何在必要时访问资源。

通常,我们使用分配包含适当权限的角色的服务主体来访问资源。你可以看看What is role-based access control (RBAC) for Azure resourcesCreate a service principal via CLI

在 Terraform 中,我假设您想从 KeyVault 中获取机密信息。这是一个例子:

provider "azurerm" {
  features {}
}

resource "azuread_application" "example" {
  name                       = "example"
  homepage                   = "http://homepage"
  identifier_uris            = ["http://uri"]
  reply_urls                 = ["http://replyurl"]
  available_to_other_tenants = false
  oauth2_allow_implicit_flow = true
}

resource "azuread_service_principal" "example" {
  application_id               = azuread_application.example.application_id
  app_role_assignment_required = false

  tags = ["example", "tags", "here"]
}

resource "azurerm_resource_group" "example" {
  name     = "resourceGroup1"
  location = "West US"
}

resource "azurerm_key_vault" "example" {
  name                        = "testvault"
  location                    = azurerm_resource_group.example.location
  resource_group_name         = azurerm_resource_group.example.name
  enabled_for_disk_encryption = true
  tenant_id                   = var.tenant_id
  soft_delete_enabled         = true
  purge_protection_enabled    = false

  sku_name = "standard"

  access_policy {
    tenant_id = var.tenant_id
    object_id = azuread_service_principal.example.object_id

    key_permissions = [
      "get",
    ]

    secret_permissions = [
      "get",
    ]

    storage_permissions = [
      "get",
    ]
  }

  network_acls {
    default_action = "Deny"
    bypass         = "AzureServices"
  }

  tags = {
    environment = "Testing"
  }
}

然后您可以访问密钥库以通过服务主体获取机密或密钥。你也可以看看controls Key Vault via python的例子。

对于其他资源,你需要先了解资源本身,然后才能知道如何以合适的方式访问它。最后,您可以使用 Terraform 来实现它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-25
    • 2019-01-09
    • 1970-01-01
    相关资源
    最近更新 更多