Azure 存储为 PowerShell 提供扩展,使用户可使用 Microsoft Entra 凭据登录并运行脚本命令。 使用 Microsoft Entra 凭据登录 PowerShell 时,会返回 OAuth 2.0 访问令牌。 PowerShell 会自动使用该令牌针对 Blob 存储进行后续数据操作授权。 对于支持的操作,无需再通过命令传递帐户密钥或 SAS 令牌。
可通过 Azure 基于角色的访问控制 (Azure RBAC) 向 Microsoft Entra 安全主体分配对 Blob 数据的权限。 有关 Azure 存储中 Azure 角色的详细信息,请参阅分配用于访问 Blob 数据的 Azure 角色。
Azure 存储扩展支持针对 blob 数据的操作。 可调用的操作取决于向 Microsoft Entra 安全主体授予的权限,此安全主体用于登录 PowerShell。 对 Azure 存储容器的权限通过 Azure RBAC 进行分配。 例如,如果为你分配了“Blob 数据读取者”角色,你可以运行从容器读取数据的脚本命令。 如果为你分配了“Blob 数据参与者”角色,你可以运行脚本命令来读取、写入或删除容器或其中所含数据。
若要详细了解针对容器的每个 Azure 存储操作所需的权限,请参阅使用 OAuth 令牌调用存储操作。
重要
在使用 Azure 资源管理器 ReadOnly 锁锁定了某个存储帐户时,不允许为该存储帐户执行列出密钥操作。 “列出密钥”是 POST 操作,并且在为该帐户配置了 ReadOnly 锁时,所有的 POST 操作都会被阻止 。 因此,当帐户被 ReadOnly 锁锁定时,还没有帐户密钥的用户必须使用 Microsoft Entra 凭据来访问 Blob 数据。 在 PowerShell 中,包含 -UseConnectedAccount
参数,以使用 Microsoft Entra 凭据创建 AzureStorageContext 对象。
若要使用 Azure PowerShell 登录并使用 Microsoft Entra 凭据针对 Azure 存储运行后续操作,请创建存储上下文用于引用存储帐户,并包含-UseConnectedAccount
参数。
以下示例演示了如何在 Azure PowerShell 中使用 Microsoft Entra 凭据,在新的存储帐户中创建容器。 请务必将尖括号中的占位符值替换为你自己的值:
使用 Connect-AzAccount 命令登录到 Azure 帐户。
Connect-AzAccount -Environment AzureChinaCloud
若要详细了解如何使用 PowerShell 登录 Azure,请参阅使用 Azure PowerShell 登录。
调用 New-AzResourceGroup 创建 Azure 资源组。
$resourceGroup = "sample-resource-group-ps" $location = "chinaeast2" New-AzResourceGroup -Name $resourceGroup -Location $location
调用 New-AzStorageAccount 创建存储帐户。
$storageAccount = New-AzStorageAccount -ResourceGroupName $resourceGroup ` -Name "<storage-account>" ` -SkuName Standard_LRS ` -Location $location ` -AllowBlobPublicAccess $false
调用 New-AzStorageContext 获取用于指定新存储帐户的存储帐户上下文。 对存储帐户执行操作时,可以引用上下文而不是重复传入凭据。 包含
-UseConnectedAccount
参数,以使用 Microsoft Entra 凭据调用任何后续数据操作:$ctx = New-AzStorageContext -StorageAccountName "<storage-account>" -UseConnectedAccount
创建容器之前,请向自己分配存储 Blob 数据参与者角色。 即使你是帐户所有者,也需要显式权限才能针对存储帐户执行数据操作。 有关分配 Azure 角色的详细信息,请参阅分配用于访问 Blob 数据的 Azure 角色。
重要
传播 Azure 角色分配可能需要花费几分钟时间。
调用 New-AzStorageContainer 创建容器。 由于此调用使用在前面步骤中创建的上下文,因此将使用你的 Microsoft Entra 凭据创建容器。
$containerName = "sample-container" New-AzStorageContainer -Name $containerName -Context $ctx