若要使用 Microsoft Entra 凭据访问 Azure 门户中的 Blob 数据,用户必须具有以下角色分配:
- 数据访问角色,例如“存储 Blob 数据读取者”或“存储 Blob 数据参与者”
- 至少分配 Azure 资源管理器“读取者”角色
要了解如何将这些角色分配给用户,请按照 使用 Azure 门户分配 Azure 角色中提供的说明进行操作。
“读取者”角色是一个 Azure 资源管理器角色,可让用户查看存储帐户资源,但不允许修改这些资源。 该角色不提供对 Azure 存储中的数据的读取权限,而只提供对帐户管理资源的读取权限。 “读者”角色是必需的,以便用户可以导航到 Azure 门户中的 blob 容器。
例如,如果在名为 sample-container 的容器级别向用户 Mary 分配“存储 Blob 数据参与者”角色,则会向 Mary 授予对该容器中所有 Blob 的读取、写入和删除访问权限。 但是,如果 Mary 希望在 Azure 门户中查看某个 Blob,“存储 Blob 数据参与者”角色本身无法提供足够的权限用于在门户中导航,因此 Mary 无法查看该 Blob。 必须拥有其他权限,才能在门户中导航和查看门户中显示的其他资源。
必须向用户分配“读者”角色,才能结合使用 Azure 门户与 Microsoft Entra 凭据。 但是,如果已为用户分配具有“Microsoft.Storage/storageAccounts/listKeys/action”权限的角色,则用户可以通过共享密钥授权结合使用门户与存储帐户密钥。 要使用存储帐户密钥,必须允许存储帐户访问共享密钥。 有关允许或禁止共享密钥访问的详细信息,请参阅阻止对 Azure 存储帐户进行共享密钥授权。
你还可以分配 Azure 资源管理器角色,该角色提供比读取者角色更多的权限。 建议将分配尽可能少的权限作为一种安全最佳做法。 有关详细信息,请参阅 Azure RBAC 的最佳做法。
若要使用 PowerShell 为安全主体分配 Azure 角色,请调用 New-AzRoleAssignment 命令。 若要运行该命令,必须具有一个角色,该角色包含在相应范围或更大范围内向你分配的 Microsoft.Authorization/roleAssignments/write 权限。
命令的格式因分配范围而异,但 -ObjectId
和 -RoleDefinitionName
是必需的参数。 虽然不一定非要传递 -Scope
参数的值,但强烈建议传递,以遵守最低特权原则。 通过限制角色和范围,可以限制在安全主体被入侵时面临风险的资源。
-ObjectId
参数是要向其分配角色的用户、组或服务主体的 Microsoft Entra 对象 ID。 若要检索标识符,可以使用 Get-AzADUser 筛选 Azure Microsoft Entra 用户,如以下示例所示。
Get-AzADUser -DisplayName '<Display Name>'
(Get-AzADUser -StartsWith '<substring>').Id
第一个响应返回安全主体,第二个响应返回安全主体的对象 ID。
UserPrincipalName : markpdaniels@contoso.com
ObjectType : User
DisplayName : Mark P. Daniels
Id : ab12cd34-ef56-ab12-cd34-ef56ab12cd34
Type :
ab12cd34-ef56-ab12-cd34-ef56ab12cd34
-RoleDefinitionName
参数值是需要分配给主体的 RBAC 角色的名称。 若要使用 Microsoft Entra 凭据访问 Azure 门户中的 Blob 数据,用户必须具有以下角色分配:
- 数据访问角色,例如“存储 Blob 数据参与者”或“存储 Blob 数据读取者”
- Azure 资源管理器“读者”角色
若要分配范围限定为 Blob 容器或存储帐户的角色,应为 -Scope
参数指定一个包含资源范围的字符串。 此操作符合最低特权原则。“最低特权”是一个信息安全概念,按照此原则,只为用户授予履行其职责所需的最低访问权限级别。 这种做法降低了不必要的特权带来意外损害或故意损害的潜在风险。
容器的范围采用以下格式:
/subscriptions/<subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.Storage/storageAccounts/<storage-account-name>/blobServices/default/containers/<container-name>
存储帐户的范围采用以下格式:
/subscriptions/<subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.Storage/storageAccounts/<storage-account-name>
若要分配范围限定为存储帐户的角色,请为 --scope
参数指定一个包含容器范围的字符串。
以下示例为用户分配“存储 Blob 数据参与者”角色。 角色分配的范围仅限于容器级别。 请务必将括号中的示例值和占位符值 (<>
) 替换为你自己的值:
New-AzRoleAssignment -SignInName <email> `
-RoleDefinitionName "Storage Blob Data Contributor" `
-Scope "/subscriptions/<subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.Storage/storageAccounts/<storage-account-name>/blobServices/default/containers/<container-name>"
以下示例通过指定对象 ID,将“存储 Blob 数据读取者”角色分配给用户。 角色分配的范围仅限于存储帐户级别。 请务必将括号中的示例值和占位符值 (<>
) 替换为你自己的值:
New-AzRoleAssignment -ObjectID "ab12cd34-ef56-ab12-cd34-ef56ab12cd34" `
-RoleDefinitionName "Storage Blob Data Reader" `
-Scope "/subscriptions/<subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.Storage/storageAccounts/<storage-account-name>"
输出应类似如下所示:
RoleAssignmentId : /subscriptions/<subscription ID>/resourceGroups/<Resource Group>/providers/Microsoft.Storage/storageAccounts/<Storage Account>/providers/Microsoft.Authorization/roleAssignments/<Role Assignment ID>
Scope : /subscriptions/<subscription ID>/resourceGroups/<Resource Group>/providers/Microsoft.Storage/storageAccounts/<Storage Account>
DisplayName : Mark Patrick
SignInName : markpdaniels@contoso.com
RoleDefinitionName : Storage Blob Data Reader
RoleDefinitionId : <Role Definition ID>
ObjectId : <Object ID>
ObjectType : User
CanDelegate : False
有关使用 PowerShell 在订阅或资源组范围分配角色的信息,请参阅使用 Azure PowerShell 分配 Azure 角色。
若要使用 Azure CLI 为安全主体分配 Azure 角色,请使用 az role assignment create 命令。 命令的格式因分配范围而异。 若要运行该命令,必须具有一个角色,该角色包含在相应范围或更大范围内向你分配的 Microsoft.Authorization/roleAssignments/write 权限。
若要分配容器范围的角色,请为 --scope
参数指定一个包含容器范围的字符串。 容器的范围采用以下格式:
/subscriptions/<subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.Storage/storageAccounts/<storage-account-name>/blobServices/default/containers/<container-name>
以下示例为用户分配“存储 Blob 数据参与者”角色。 角色分配的范围仅限于容器级别。 请务必将括号中的示例值和占位符值 (<>
) 替换为你自己的值:
az role assignment create \
--role "Storage Blob Data Contributor" \
--assignee <email> \
--scope "/subscriptions/<subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.Storage/storageAccounts/<storage-account-name>/blobServices/default/containers/<container-name>"
以下示例通过指定对象 ID,将“存储 Blob 数据读取者”角色分配给用户。 若要详细了解 --assignee-object-id
和 --assignee-principal-type
参数,请参阅 az role assignment。 在此示例中,角色分配的范围仅限于存储帐户级别。 请务必将括号中的示例值和占位符值 (<>
) 替换为你自己的值:
az role assignment create \
--role "Storage Blob Data Reader" \
--assignee-object-id "ab12cd34-ef56-ab12-cd34-ef56ab12cd34" \
--assignee-principal-type "User" \
--scope "/subscriptions/<subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.Storage/storageAccounts/<storage-account-name>"
若要了解如何使用 Azure CLI 在订阅、资源组或存储帐户范围内分配角色,请参阅使用 Azure CLI 分配 Azure 角色。