2

次の形式のSAS トークンがあります。

https://name.blob.core.windows.net/container?sv=2015-04-05&sr=b&sig=abc123&se=2017-03-07T12%3A58%3A52Z&sp=rw

AzPowershell で提供されたコマンドレットを使用して、この BLOB にコンテンツをアップロードしようとしています。上記の SAS トークンとファイルをアップロードするだけの API が見つかりません。

このreddit の投稿を読むと、私のオプションは次のようになります。

  1. StorageAccountName(例ではname)、Container(例ではcontainer) 、(SASToken上記の例では)を解析してから/sv=2015-04-05&sr=b&sig=abc123&se=2017-03-07T12%3A58%3A52Z&sp=rwを使用します。これは多かれ少なかれ、この StackOverflow 投稿 ( SAS トークンのみを使用して Azure ストレージ アカウントに接続しますか? )の答えです。New-AzStorageContextSet-AzStorageBlobContent
  2. またはその親族を使用Invoke-WebRequestして、基本的に自分で REST 呼び出しを実行します。

可能な限り多くの提供されたコマンドレットを使用したいAzので、オプション 1 から始めて、これを解析するための API がないようです。私が見つけることができる最も近いのは、この StackOverflow Post ( Using SAS token to upload Blob content ) です。 CloudBlockBlobですが、このクラスが PowerShell で利用できるかどうかは不明です。

これらの目的のために、機能しているように見える正規表現を作成しましたが、おそらく脆弱です。これを行うより良い方法はありますか?

$SASUri = https://name.blob.core.windows.net/container?sv=2015-04-05&sr=b&sig=abc123&se=2017-03-07T12%3A58%3A52Z&sp=rw
$fileToUpload = 'Test.json'

$regex = [System.Text.RegularExpressions.Regex]::Match($SASUri, '(?i)\/+(?<StorageAccountName>.*?)\..*\/(?<Container>.*)\?(?<SASToken>.*)')
$storageAccountName = $regex.Groups['StorageAccountName'].Value
$container = $regex.Groups['Container'].Value
$sasToken = $regex.Groups['SASToken'].Value

$storageContext = New-AzStorageContext -StorageAccountName $storageAccountName -SasToken $sasToken
Set-AzStorageBlobContent -File $fileToUpload -Container $container -Context $storageContext -Force

質問を言い換える

  1. AzSAS URI と SAS トークンを使用してアップロードを許可するコマンドレットはありますか?
  2. (そうでない場合) SAS URI + SAS トークンを解析する API はありますか?
4

1 に答える 1