运行GitHub Actions中Terraform工作流时遇Azure租户不存在错误如何解决
你遇到的报错核心是Azure AD身份验证失败,返回AADSTS90002错误码代表提交的租户ID(Tenant ID)不存在,导致GitHub Actions无法获取Azure存储账号的访问密钥,进而无法初始化Terraform的后端存储。
原始报错信息:
Error: Failed to get existing workspaces: Error retrieving keys for Storage Account "xxxxx": azure.BearerAuthorizer#WithAuthorization: Failed to refresh the Token for request to https://management.azure.com/subscriptions//resourceGroups/XXXXXX/providers/Microsoft.Storage/storageAccounts/xxxx/listKeys?api-version=2016-01-01: StatusCode=400 -- Original Error: adal: Refresh request failed. Status Code = '400'. Response body: {"error":"invalid_request","error_description":"AADSTS90002: Tenant '*' not found. This may happen if there are no active subscriptions for the tenant. Check to make sure you have the correct tenant ID. Check with your subscription administrator.
- 核对GitHub仓库Secrets配置
检查你存在GitHub仓库>Settings>Secrets and variables>Actions下的四个Azure凭据参数是否正确:AZURE_CLIENT_ID(Azure服务主体应用ID)、AZURE_CLIENT_SECRET(服务主体客户端密钥)、AZURE_TENANT_ID(Azure AD租户ID)、AZURE_SUBSCRIPTION_ID(Azure订阅ID)
注意不要把租户ID和订阅ID、资源组名称混淆,你可以在Azure Portal的Azure AD服务首页直接复制官方提供的租户ID - 验证服务主体权限与归属
确认你创建的Azure服务主体归属于你填写的租户下,且已经被授予目标订阅的Contributor权限,同时针对存储Terraform状态文件的存储账户,额外授予服务主体Storage Account Key Operator Service Role权限。 - 检查Terraform后端配置
核对你Terraform代码中azurerm后端配置的tenant_id、subscription_id、resource_group_name、storage_account_name、container_name参数,确保和Azure中实际的资源信息完全一致,无拼写错误。 - 核对GitHub Actions工作流逻辑
确认工作流中Azure登录步骤在terraform init之前执行,且登录步骤的参数引用正确,标准登录配置如下:- uses: azure/login@v1 with: client-id: ${{ secrets.AZURE_CLIENT_ID }} tenant-id: ${{ secrets.AZURE_TENANT_ID }} subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }} client-secret: ${{ secrets.AZURE_CLIENT_SECRET }} - 排查租户与订阅状态
如果你使用的是企业/学校租户,确认租户没有限制第三方服务的访问权限,同时确认你的Azure订阅处于激活状态,没有过期或被禁用。
内容的提问来源于stack exchange,提问作者G_S

