我不明白。我创建一个 Azure 存储帐户。我向服务主体授予了存储帐户的存储 Blob 数据贡献者和存储队列数据贡献者权限。
我在 Terraform 中的后端配置是:
backend "azurerm" {
storage_account_name = "storage_account"
container_name = "tfstate"
key = "terraform.tfstate"
client_id = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
subscription_id = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
tenant_id = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
use_azuread_auth = true
}
}
但是,当我运行 terraform init 时,我得到:
Error: Failed to get existing workspaces: containers.Client#ListBlobs: Failure responding to request: StatusCode=403 -- Original Error: autorest/azure: Service returned an error. Status=403 Code="AuthorizationPermissionMismatch" Message="This request is not authorized to perform this operation using this permission.\nRequestId:18cdcac5-001e-002d-18b1-9a6185000000\nTime:2024-04-30T03:47:06.1161648Z"
除了将 SPN 的 IAM 添加到存储帐户之外,有关存储帐户的其他所有内容都是默认的。
我在网上看到的所有指南几乎都建议相同的事情(IAM 权限),但在我的一生中,我无法让它发挥作用。
已解决:https://192dot.medium.com/azure-storage-account-disable-shared-key-access-312f7cebef6c
当我将容器切换到“Entra ID”时,带有 SPN 的 terraform init 将按预期工作。