概要

Azure Blobストレージの任意のコンテナに対してアクセス制限をかける例を記載する。
※基本的に全てCLIで行う。

目次

Blobストレージの構成

AzureのBlobストレージは以下の通り構成される。

+ ストレージアカウント
    + ストレージコンテナ
        + Blobファイル

この記事で構成するアクセス制限

この記事では下図の通り、特定のストレージコンテナに対して参照権限のみを有するユーザ用の環境を構築する。

+ ストレージアカウントA
    + ストレージコンテナ1
        + ファイル1
        + ファイル2
    + ストレージコンテナ2
        + ファイル1
        + ファイル2
 
 
 

  
┐
| この範囲の参照のみ可能
┘

Blobストレージへのアクセス方法

Storage Explorer から Blobストレージにアクセスする場合、以下の方法でアクセス方法を追加する事ができるが、当記事では (1) (2) を使用して前述のアクセス制限を実現する環境を構築する。

Noアクセス方法説明
1Azureアカウントを追加するAzureアカウント情報を使用して参照/更新可能なストレージアカウントやコンテナを参照する方式
2AD(Active Directory)を使用してリソースを追加する1とほぼ同じだが、特定のコンテナのみをアタッチする事ができる
3接続文字列を使用するストレージアカウントの作成時に生成される接続文字列(ストレージアカウント及びキー)を使用して操作可能なリソースを参照/更新する方式
この方式の場合、ストレージアカウント配下の全てのリソースが参照/変更となる。
4Shared Access Signature(SAS) URI を使用するTODO:
5ストレージアカウント名とキーを使用する3と同じ
6ローカルエミュレータにアタッチするローカルで起動しているストレージエミュレータにアタッチする

環境構築

ログイン

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 の設定

strex1.png

strex2.png

strex3.png

作成したユーザのプリンシパル名を入力し Sign in。
strex4.png

Next押下すると Microsoft Authenticator による認証を求められる。 ※skipも可能(14日間)
strex5.png

ここまでの操作で対象のアカウントが追加されている事が確認できる。

strex6.png

引き続いてこのアカウント情報を利用してコンテナ2のみをアタッチしていく。

strex1.png

strex7.png

strex8.png

strex9.png
※権限の割当時に表示されたコンテナURLを入力する。

strexA.png

コンテナ2のみがアタッチされている事が確認できる。
strexB.png

ちなみに以下のコマンドでストレージアカウント自体の閲覧権限を付与すると、ストレージアカウント配下のコンテナ一覧も確認する事ができるようになる。

az role assignment create \
    --role "Reader" \
    --assignee $userSp \
    --scope "/subscriptions/${subscriptionId}/resourceGroups/${resourceGroup}/providers/Microsoft.Storage/storageAccounts/$storageAccountName"

strexC.png

ただし、コンテナ1の方はBlobの閲覧権限を付与していないので、配下のデータを見ることはできない。
strexD.png


添付ファイル: filestrexD.png 3件 [詳細] filestrexC.png 3件 [詳細] filestrexB.png 3件 [詳細] filestrex6.png 3件 [詳細] filestrexA.png 3件 [詳細] filestrex9.png 3件 [詳細] filestrex8.png 3件 [詳細] filestrex7.png 3件 [詳細] filestrex5.png 3件 [詳細] filestrex4.png 3件 [詳細] filestrex3.png 3件 [詳細] filestrex2.png 4件 [詳細] filestrex1.png 4件 [詳細]

トップ   差分 バックアップ リロード   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2020-08-02 (日) 21:24:04 (5d)