gpt4 book ai didi

azure - Azure API 无法识别来自 Terraform 的服务主体

转载 作者:行者123 更新时间:2023-12-03 00:22:48 24 4
gpt4 key购买 nike

需要对下面的语法进行哪些具体更改,以便 Terraform azurerm 提供程序能够对将使用以下代码创建的服务主体进行身份验证?

问题

第二个 Terraform 模块需要通过 azurerm 提供程序使用在之前以编程方式创建的 client_idclient_secret 向 Azure 进行身份验证,单独的过程。

第二个 Terraform 模块中的提供程序 block 如下所示:

provider "azurerm" {
subscription_id = var.subscriptionId
client_id = var.clientId
client_secret = var.clientSecret
tenant_id = var.tenantId
}

当我们从前面的过程中验证的正确值不被接受为提供程序代码块中的 var.clientIdvar.clientSecret 时,就会出现问题如上所述。

如何创建服务主体:

用于对第二个 Terraform 模块进行身份验证的 client_idclient_secret 当前由第一个创建> Terraform 模块包括以下内容:

resource "azuread_application" "appReg" {
name = var.appName
}

resource "azuread_service_principal" "example-sp" {
application_id = azuread_application.appReg.application_id
}

resource "azuread_service_principal_password" "example-sp_pwd" {
service_principal_id = azuread_service_principal.example-sp.id
value = "long-random-string"
end_date = "2021-06-02T01:02:03Z"
}

data "azurerm_subscription" "thisSubscription" {
subscription_id = var.subscriptionId
}

resource "azurerm_role_assignment" "example-sp_role_assignment" {
scope = data.azurerm_subscription.thisSubscription.id
role_definition_name = "Contributor"
principal_id = azuread_service_principal.example-sp.id
}

resource "azuread_application_app_role" "example-role" {
application_object_id = azuread_application.appReg.id
allowed_member_types = ["User", "Application"]
description = "Admins can manage roles and perform all task actions"
display_name = "Admin"
is_enabled = true
value = "administer"
}

运行上述第一个模块后,Terraform 会报告应用完成,并且我们还能够在 Azure 门户中确认正确的 Active Directory 具有新的应用注册名称 var.appName 和 ID 等于我们在 first 模块 tfstate 文件中找到的内容。

错误消息:

当 Terraform 尝试使用 first 模块创建的服务主体 ID 和 Secret 来应用 第二 模块时,会引发以下错误:

Error: 
Error building account:
Error getting authenticated object ID:
Error listing Service Principals:
autorest.DetailedError{
Original:adal.tokenRefreshError{
message:"adal: Refresh request failed.
Status Code = '400'.
Response body: {
\"error\":\"unauthorized_client\",
\"error_description\":\"AADSTS700016:
Application with identifier 'correct-app-id' was not found in the directory 'the-right-ad-id'.
This can happen if the application has not been installed by the administrator of the tenant or consented to by any user in the tenant.
You may have sent your authentication request to the wrong tenant.\\r\\n
Trace ID: some-trace-id\\r\\n
Correlation ID: correlation-id-redacted\\r\\n
Timestamp: 2020-12-31 19:02:19Z\",
\"error_codes\":[700016],
\"timestamp\":\"2020-12-31 19:02:19Z\",
\"trace_id\":\"some-trace-id\",
\"correlation_id\":\"correlation-id-redacted\",
\"error_uri\":\"https://login.microsoftonline.com/error?code=700016\"
}",
resp:(*http.Response)(0xc000ac2000)},
PackageType:"azure.BearerAuthorizer",
Method:"WithAuthorization",
StatusCode:400,
Message:"Failed to refresh the Token for request to https://graph.windows.net/the-right-ad-id/servicePrincipals?%24filter=appId+eq+%27correct-app-id%27&api-version=1.6",
ServiceError:[]uint8(nil),
Response:(*http.Response)(0xc000ac2000)
}

该错误消息似乎没有帮助,因为我们验证了应用程序已注册到 AAD 实例。

我们如何解决此问题并以编程方式创建 第二个 模块接受并可用的 client_idclient_secret

最佳答案

据我所知,您的 Terraform 代码没有问题。它应该工作正常。但是您收到错误,在租户中找不到该应用程序。所以你需要做的是检查第二个模块中的租户Id是否正确。

关于azure - Azure API 无法识别来自 Terraform 的服务主体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65525116/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com