在没有 SAS 的情况下将文件上传到存储帐户
upload files to storage account without SAS
我需要在不使用 SAS 的情况下将文件上传到存储帐户。
我创建了一个 "app registration" 并授予参与者访问存储帐户的权限。
如果我想从powershell上传文件?我该怎么做?
首次登录?然后是 azcopy?因为我试过这种方式但是问我要令牌
您可以使用服务主体或证书使用 azcopy 登录,然后将您的文件复制到存储帐户。请参考 this article 了解更多信息。
有很多方法可以做到这一点。既然你提到了 PowerShell,我将在这个例子中使用它。
# The following assumes you have already created the App registration.
# Either through the portal, PS, whatever.
$creds = Get-Credential
# Uername = Application ID
# password = The service principle secret. You need to create this.
Connect-AzAccount `
-Credential $creds `
-Tenant $tenantId `
-ServicePrincipal
# you will need to get the storage accounts context.
# There are a few ways to do this I usually just get the storage account
$context = (Get-AzStorageAccount -Name $saName -ResourceGroupName $rgName).Context
# You will need to give the App Registration permissions to upload the blob.
# If you don't assign permissions this cmdlet will fail.
Set-AzStorageBlobContent `
-Container $containerName `
-File $filePath `
-Blob $blobName `
-Context $context
Azure Powershell, Azure CLI and AzCopy是三种不同的东西,你不应该把它们混在一起。
如果您想使用 powershell 上传带有服务主体的文件,请在创建应用程序注册后,get values for signing in, then create a new application secret。
在你的storage account中,Contributor
角色就够了,但是你要注意,实际上Contributor
没有直接访问blob的权限,它只是让你获取上下文存储帐户,然后使用上下文访问 blob,要直接访问 blob,我们需要评论中提到的 Storage Blob Data Owner/Contributor
。
然后使用下面的脚本(另一个回复中的Get-Credential
是交互的方式,这里是非交互的方式,通常我们使用非交互方式的服务主体来实现自动化)
$azureAplicationId ="<Application-ID>"
$azureTenantId= "<Tenant-ID>"
$azurePassword = ConvertTo-SecureString "<Application-secret>" -AsPlainText -Force
$psCred = New-Object System.Management.Automation.PSCredential($azureAplicationId , $azurePassword)
Connect-AzAccount -Credential $psCred -TenantId $azureTenantId -ServicePrincipal
$context = (Get-AzStorageAccount -ResourceGroupName <group-name> -Name <storageaccount-name>).Context
Set-AzStorageBlobContent -Container <container-name> -File <localfile-path> -Blob <blob-name> -Context $context
我需要在不使用 SAS 的情况下将文件上传到存储帐户。
我创建了一个 "app registration" 并授予参与者访问存储帐户的权限。
如果我想从powershell上传文件?我该怎么做?
首次登录?然后是 azcopy?因为我试过这种方式但是问我要令牌
您可以使用服务主体或证书使用 azcopy 登录,然后将您的文件复制到存储帐户。请参考 this article 了解更多信息。
有很多方法可以做到这一点。既然你提到了 PowerShell,我将在这个例子中使用它。
# The following assumes you have already created the App registration.
# Either through the portal, PS, whatever.
$creds = Get-Credential
# Uername = Application ID
# password = The service principle secret. You need to create this.
Connect-AzAccount `
-Credential $creds `
-Tenant $tenantId `
-ServicePrincipal
# you will need to get the storage accounts context.
# There are a few ways to do this I usually just get the storage account
$context = (Get-AzStorageAccount -Name $saName -ResourceGroupName $rgName).Context
# You will need to give the App Registration permissions to upload the blob.
# If you don't assign permissions this cmdlet will fail.
Set-AzStorageBlobContent `
-Container $containerName `
-File $filePath `
-Blob $blobName `
-Context $context
Azure Powershell, Azure CLI and AzCopy是三种不同的东西,你不应该把它们混在一起。
如果您想使用 powershell 上传带有服务主体的文件,请在创建应用程序注册后,get values for signing in, then create a new application secret。
在你的storage account中,Contributor
角色就够了,但是你要注意,实际上Contributor
没有直接访问blob的权限,它只是让你获取上下文存储帐户,然后使用上下文访问 blob,要直接访问 blob,我们需要评论中提到的 Storage Blob Data Owner/Contributor
。
然后使用下面的脚本(另一个回复中的Get-Credential
是交互的方式,这里是非交互的方式,通常我们使用非交互方式的服务主体来实现自动化)
$azureAplicationId ="<Application-ID>"
$azureTenantId= "<Tenant-ID>"
$azurePassword = ConvertTo-SecureString "<Application-secret>" -AsPlainText -Force
$psCred = New-Object System.Management.Automation.PSCredential($azureAplicationId , $azurePassword)
Connect-AzAccount -Credential $psCred -TenantId $azureTenantId -ServicePrincipal
$context = (Get-AzStorageAccount -ResourceGroupName <group-name> -Name <storageaccount-name>).Context
Set-AzStorageBlobContent -Container <container-name> -File <localfile-path> -Blob <blob-name> -Context $context