我有一个服务主体,它是某个存储容器中的数据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使其在没有访问密钥的情况下工作?
1条答案
按热度按时间ddrv8njm1#
是的,这是经典的RTFM时刻。根据https://developer.hashicorp.com/terraform/language/settings/backends/azurerm,我可以在后端配置中设置
use_azuread_auth = true
。我测试了它,它确实有效。