terraform是否可以使用服务主体凭证而不是访问密钥来对azure存储容器进行身份验证?

ygya80vv  于 2023-03-24  发布在  其他
关注(0)|答案(1)|浏览(118)

我有一个服务主体,它是某个存储容器中的数据Blob贡献者。我已检查,可以使用--auth-mode login参数使用Azure CLI上载/下载/删除该容器中的Blob,而无需传递访问密钥。
然而,当我使用相同的服务主体运行terraform init时,目标是相同的存储容器,我得到了这个:

Initializing the backend...
╷
│ Error: Failed to get existing workspaces: Error retrieving keys for Storage Account "app541certfremotebackend": storage.AccountsClient#ListKeys: Failure responding to request: StatusCode=403 -- Original Error: autorest/azure: Service returned an error. Status=403 Code="AuthorizationFailed" Message="The client '53bfcd5f-0906-4043-bda0-84cacf6ce9d0' with object id '53bfcd5f-0906-4043-bda0-84cacf6ce9d0' does not have authorization to perform action 'Microsoft.Storage/storageAccounts/listKeys/action' over scope '/subscriptions/4...d/resourceGroups/a...2/providers/Microsoft.Storage/storageAccounts/a...d' or the scope is invalid. If access was recently granted, please refresh your credentials."
│
│
╵

使用访问键需要我们授予服务主体一个包含操作Microsoft.Storage/storageAccounts/listKeys/action的角色。最接近的内置角色是读取器和数据访问。
我真的不喜欢它,因为这样的访问密钥将不可能访问存储帐户中的所有存储容器?
是否可以通过利用RBAC使其在没有访问密钥的情况下工作?

ddrv8njm

ddrv8njm1#

是的,这是经典的RTFM时刻。根据https://developer.hashicorp.com/terraform/language/settings/backends/azurerm,我可以在后端配置中设置use_azuread_auth = true
我测试了它,它确实有效。

相关问题