概要 †Azure Blobストレージの任意のコンテナに対してアクセス制限をかける例を記載する。 目次 †
Blobストレージの構成 †AzureのBlobストレージは以下の通り構成される。 + ストレージアカウント + ストレージコンテナ + Blobファイル この記事で構成するアクセス制限 †この記事では下図の通り、特定のストレージコンテナに対して参照権限のみを有するユーザ用の環境を構築する。 + ストレージアカウントA + ストレージコンテナ1 + ファイル1 + ファイル2 + ストレージコンテナ2 + ファイル1 + ファイル2 ┐ | この範囲の参照のみ可能 ┘ Blobストレージへのアクセス方法 †Storage Explorer から Blobストレージにアクセスする場合、以下の方法でアクセス方法を追加する事ができるが、当記事では (1) (2) を使用して前述のアクセス制限を実現する環境を構築する。
環境構築 †ログイン †az login リソースの作成 †Azure CLI を使用して以下の通りリソースを作成する。 # リージョン region=japanwest # 各リソース名の接頭文字(少なくともストレージアカウント名は世界でユニークなIDになる必要あり) prefix=XXXXXX resourceGroup=${prefix}resourcegroup storageAccountName=${prefix}straccount1 storageContainer1=${prefix}strcontainer1 storageContainer2=${prefix}strcontainer2 storageSku=Standard_LRS # リソースグループの作成 echo "az group create ( $resourceGroup ) " az group create \ --name $resourceGroup \ --location $region # ストレージアカウントの作成 echo "az storage account create ( $storageAccountName )" az storage account create \ --name $storageAccountName \ --location $region \ --resource-group $resourceGroup \ --sku $storageSku # Storageコンテナ1の作成 echo "az storage container create ( $storageContainer1 )" az storage container create \ --name $storageContainer1 \ --resource-group $resourceGroup \ --account-name $storageAccountName # Storageコンテナ2の作成 echo "az storage container create ( $storageContainer2 )" az storage container create \ --name $storageContainer2 \ --resource-group $resourceGroup \ --account-name $storageAccountName # コンテナにファイルを追加 for ((i=1; i<=2; i++)); do echo "no: ${i}" cat <<_EOF1_ > sample${i}.txt sample${i} line1 sample${i} line2 _EOF1_ # コンテナ1に追加 echo "az storage blob upload ( sample${i}.txt -> $storageContainer1 )" az storage blob upload --account-name $storageAccountName -f sample${i}.txt -c $storageContainer1 -n sample${i}.txt # コンテナ2に追加 echo "az storage blob upload ( sample${i}.txt -> $storageContainer2 )" az storage blob upload --account-name $storageAccountName -f sample${i}.txt -c $storageContainer2 -n sample${i}.txt done ユーザの作成 及び 権限の割当 †subscriptionId=XXXXXXXX-XXXX-XXXX-XXXXXXXXXXXXXXXXX prefix=XXXXXX resourceGroup=${prefix}resourcegroup storageAccountName=${prefix}straccount1 storageContainer2=${prefix}strcontainer2 # ユーザの作成 userSp=sampleuser@devmagata.onmicrosoft.com az ad user create --display-name "sampleuser" --password "samplepw!" --user-principal-name $userSp # 作成したユーザにコンテナ2への参照権限を付与 echo "role create" az role assignment create \ --role "Storage Blob Data Reader" \ --assignee $userSp \ --scope "/subscriptions/${subscriptionId}/resourceGroups/${resourceGroup}/providers/Microsoft.Storage/storageAccounts/${storageAccountName}/blobServices/default/containers/$storageContainer2" # コンテナのURLを表示 echo "Container URL: https://${storageAccountName}.blob.core.windows.net/$storageContainer2" ちなみに割り当てられるロールの一覧は以下のコマンドで確認できる。 az role definition list --out table スコープについては https://docs.microsoft.com/ja-jp/azure/storage/common/storage-auth-aad-rbac-cli を参照。 Storage Explorer の設定 †作成したユーザのプリンシパル名を入力し Sign in。 Next押下すると Microsoft Authenticator による認証を求められる。 ※skipも可能(14日間) ここまでの操作で対象のアカウントが追加されている事が確認できる。 引き続いてこのアカウント情報を利用してコンテナ2のみをアタッチしていく。
コンテナ2のみがアタッチされている事が確認できる。 ちなみに以下のコマンドでストレージアカウント自体の閲覧権限を付与すると、ストレージアカウント配下のコンテナ一覧も確認する事ができるようになる。 az role assignment create \ --role "Reader" \ --assignee $userSp \ --scope "/subscriptions/${subscriptionId}/resourceGroups/${resourceGroup}/providers/Microsoft.Storage/storageAccounts/$storageAccountName" ただし、コンテナ1の方はBlobの閲覧権限を付与していないので、配下のデータを見ることはできない。 |