Blob Storageのコンテナーには、3種類のアクセスポリシーがあります。
- プライベート(パブリック読み取りアクセスなし)
- BLOB(BLOBに限定したパブリック読み取りアクセス)
- コンテナー(コンテナーのBLOB一覧も列挙可能なパブリック読み取りアクセス)
「プライベート」以外のアクセスポリシーは、誰でもアクセスできるようになっているので気をつけたいところです。
自分が管理しているサブスクリプションで、想定外のパブリック公開Blobがないかチェックしたくてコマンドレット作りました。
動作はCloud Shellで試していますが、Azure CLI/PowerShellでサブスクリプションが認証されていれば動くと思います。
Azure CLI
- Cloud Shell(Bash)を開いて実行します
for accountName in `az storage account list --query [].name -o tsv`
do
for containerName in `az storage container list --account-name $accountName --query [].name -o tsv`
do
permitType=`az storage container show-permission --name $containerName --account-name $accountName -o tsv`
if [ "$permitType" != "off" ]; then
echo "acount-name: $accountName, container-name: $containerName, permission-type: $permitType"
fi
done
done
Azure PowerShell
- Cloud Shell(PowerShell)を開いて実行します。
$allStorageAccount = Get-AzureRmStorageAccount
for ($i = 0; $i -lt $allStorageAccount.StorageAccountName.Count; $i++) {
$containerInfo = Get-AzureRmStorageAccount -Name $allStorageAccount.StorageAccountName[$i] -ResourceGroupName $allStorageAccount.ResourceGroupName[$i]
Get-AzureStorageContainer -Context $containerInfo.Context | Where-Object { $_.PublicAccess -ne 'Off' }
}