我们的CI管道需要将一些文件备份到Azure Blob存储。我正在这样使用Azure CLI:az storage blob upload-batch -s . -d container/directory --account-name myaccount
在授予服务主体提供者访问权限时,它会按预期工作。但是,我想锁定权限,以便允许服务主体添加文件,但不允许删除文件。所需的权限是什么?
我已经创建了一个自定义角色,赋予它与Storage Blob Data Contributor
相同的权限,但要删除。此操作(以及直接使用Storage Blob Data Contributor
角色)因Storage account ... not found
而失败。好的,然后我继续向Blob服务添加更多读取权限。还不够,现在我正要做Microsoft.Storage/storageAccounts/listKeys/action
。但是,如果我允许它访问存储密钥,那有什么意义呢?使用存储密钥,SP将具有对该帐户的完全访问权限,而我首先要避免使用该帐户。为什么az storage blob upload-batch
请求密钥,我可以防止这种情况发生吗?
答案 0 :(得分:1)
我创建了一个自定义角色,赋予它与Storage Blob Data Contributor减去delete相同的权限。此操作(以及直接使用Storage Blob数据贡献者角色)失败,并显示一个存储帐户...找不到。
我还可以重现您的问题,实际上您所做的可以。诀窍是命令的--auth-mode
参数,如果未指定,默认情况下它将使用key
,然后该命令将在您找到存储时列出您订阅中的所有存储帐户帐户,它将列出该帐户的密钥并使用该密钥上传Blob。
但是,Storage Blob Data Contributor minus delete
没有列出存储帐户的权限,因此您会收到错误消息。
要解决此问题,只需在命令中指定--auth-mode login
,然后它将使用您的服务主体的凭据来获取访问令牌,然后使用该令牌来调用REST API-{{3} }上传blob,原理请参见Put Blob。
az storage blob upload-batch -s . -d container/directory --account-name myaccount --auth-mode login
Authorize access to blobs and queues using Azure Active Directory