Попытка создать субъект-службу в Terraform, чтобы стать субъектом-службой в кластере, который я создаю в другом файле. Но при создании ошибка приходит с "azuread_application" "aks_sp"
в файле ниже
data "azurerm_subscription" "current" {}
data "azurerm_client_config" "default" {}
data "azuread_client_config" "defualt" {} # added with azuread 0.8.0
data "azurerm_role_definition" "builtin" {
name = "Contributor"
}
# Resource group is needed to manage users priveleges
resource "azurerm_resource_group" "test_rs" {
name = var.resource_group_name # mwk8ResourceGroup
location = var.location # eastus2
}
# Service principal for cluster
# first you need an azure application
resource "azuread_application" "aks_sp" {
name = var.clustername
homepage = "https://${var.clustername}"
identifier_uris = ["https://${var.clustername}"]
reply_urls = ["https://${var.clustername}"]
available_to_other_tenants = false # default
public_client = false # default
oauth2_allow_implicit_flow = false # default
}
# service principal
resource "azuread_service_principal" "sp" {
application_id = azuread_application.aks_sp.application_id
app_role_assignment_required = false # default
}
# create random password
resource "random_password" "aks_rnd_sp_pwd" {
length = 16
special = true
}
resource "azuread_service_principal_password" "aks_sp_pwd" {
service_principal_id = azuread_service_principal.sp.id
value = random_password.aks_rnd_sp_pwd.result
end_date = "2099-01-01T01:01:01Z"
}
resource "azurerm_role_assignment" "aks_sp_role_assignment" {
scope = data.azurerm_subscription.current.id
role_definition_name = data.azurerm_role_definition.builtin.name
principal_id = azuread_service_principal.sp.id
depends_on = [
azuread_service_principal_password.aks_sp_pwd
]
}
Мне нужен субъект службы в кластере, потому что кластер позже заполнен kubernetes с, а kubernetes нужен субъект службы, чтобы иметь роль участника для динамического c выделения диска. Я получил все это на работу, если я вручную создаю кластер и субъект службы, а затем освобождаю кластер. Но я работаю над тем, чтобы все это было выполнено с помощью terraform, который не работает с этой ошибкой.
Error: graphrbac.ApplicationsClient#Create: Failure responding to request: StatusCode=403 -- Original Error: autorest/azure: Service returned an error. Status=403 Code="Unknown" Message="Unknown service error" Details=[{"odata.error":{"code":"Authorization_RequestDenied","date":"2020-04-29T16:27:42","message":{"lang":"en","value":"Insufficient privileges to complete the operation."},"requestId":"hash"}}]
Я добавил subscription_id
, client_id
, client_secret
и tennant_id
к provider "azuread"
блок, но это, похоже, не решает проблему.
Все проблемы, которые я обнаружил, связанные с этим на github, похоже, содержат недействительные ссылки на документацию от Microsoft и Terraform.
github аналогичная проблема
Я уже создал роль Contributor rba c для подписки и добавил этого Azuread-провайдера, как указано выше. Есть ли шаги, которые мне не хватает? Нужно ли выполнить больше шагов по аутентификации cli? Я работаю через локальный PowerShell с аутентификацией azure с клиентом. Также могут помочь любые обновленные ссылки на документацию.
РЕДАКТИРОВАТЬ 1: Блок провайдера
provider "azurerm" {
version = "~>2.7" # https://github.com/terraform-providers/terraform-provider-azurerm/blob/master/CHANGELOG.md
features {}
}
provider "azuread" {
version = "~>0.8.0" # https://github.com/terraform-providers/terraform-provider-azuread/blob/master/CHANGELOG.md
subscription_id = "subscription_id"
client_id = "app_id" # "appId"
client_secret = "password"
tenant_id = "tennant_id" # "appOwnerTenantId"
}
provider "kubernetes" {
load_config_file = false
host = azurerm_kubernetes_cluster.cluster_1.kube_config.0.host
username = azurerm_kubernetes_cluster.cluster_1.kube_config.0.username
password = azurerm_kubernetes_cluster.cluster_1.kube_config.0.password
client_certificate = base64decode(azurerm_kubernetes_cluster.cluster_1.kube_config.0.client_certificate)
client_key = base64decode(azurerm_kubernetes_cluster.cluster_1.kube_config.0.client_key)
cluster_ca_certificate = base64decode(azurerm_kubernetes_cluster.cluster_1.kube_config.0.cluster_ca_certificate)
}