Zarządzanie eksfiltracją danych na kontach usługi Azure Storage przy użyciu zasad punktu końcowego usługi sieci wirtualnej przy użyciu interfejsu wiersza polecenia platformy Azure

Zasady punktu końcowego usługi dla sieci wirtualnej umożliwiają stosowanie kontroli dostępu na kontach usługi Azure Storage z poziomu sieci wirtualnej za pośrednictwem punktów końcowych usługi. Jest to klucz do zabezpieczania obciążeń, zarządzania dozwolonymi kontami magazynu i miejscami dozwolonymi eksfiltracji danych. W tym artykule omówiono sposób wykonywania następujących zadań:

  • Utwórz sieć wirtualną i dodaj podsieć.
  • Włączanie punktu końcowego usługi dla usługi Azure Storage.
  • Utwórz dwa konta usługi Azure Storage i zezwól na dostęp do sieci z utworzonej powyżej podsieci.
  • Utwórz zasady punktu końcowego usługi, aby zezwolić na dostęp tylko do jednego z kont magazynu.
  • Wdróż maszynę wirtualną w podsieci.
  • Potwierdź dostęp do dozwolonego konta magazynu z podsieci.
  • Upewnij się, że odmowa dostępu do konta magazynu z podsieci jest niedozwolona.

Jeśli nie masz subskrypcji platformy Azure, przed rozpoczęciem utwórz bezpłatne konto platformy Azure.

Wymagania wstępne

  • Ten artykuł wymaga wersji 2.0.28 lub nowszej interfejsu wiersza polecenia platformy Azure. W przypadku korzystania z usługi Azure Cloud Shell najnowsza wersja jest już zainstalowana.

Tworzenie sieci wirtualnej

Przed utworzeniem sieci wirtualnej należy utworzyć grupę zasobów dla sieci wirtualnej i wszystkie inne zasoby utworzone w tym artykule. Utwórz grupę zasobów za pomocą polecenia az group create. W poniższym przykładzie tworzona jest grupa zasobów o nazwie myResourceGroup w lokalizacji eastus.

az group create \
  --name myResourceGroup \
  --location eastus

Utwórz sieć wirtualną z jedną podsiecią za pomocą polecenia az network vnet create.

az network vnet create \
  --name myVirtualNetwork \
  --resource-group myResourceGroup \
  --address-prefix 10.0.0.0/16 \
  --subnet-name Private \
  --subnet-prefix 10.0.0.0/24

Włączanie punktu końcowego usługi

W tym przykładzie punkt końcowy usługi dla microsoft.Storage jest tworzony dla podsieci Private:

az network vnet subnet create \
  --vnet-name myVirtualNetwork \
  --resource-group myResourceGroup \
  --name Private \
  --address-prefix 10.0.0.0/24 \
  --service-endpoints Microsoft.Storage

Ograniczanie dostępu sieciowego dla podsieci

Utwórz sieciową grupę zabezpieczeń za pomocą polecenia az network nsg create. Poniższy przykład tworzy sieciową grupę zabezpieczeń o nazwie myNsgPrivate.

az network nsg create \
  --resource-group myResourceGroup \
  --name myNsgPrivate

Skojarz sieciowa grupa zabezpieczeń z podsiecią Prywatną za pomocą polecenia az network vnet subnet update. Poniższy przykład kojarzy sieciowa grupa zabezpieczeń myNsgPrivate z podsiecią Private :

az network vnet subnet update \
  --vnet-name myVirtualNetwork \
  --name Private \
  --resource-group myResourceGroup \
  --network-security-group myNsgPrivate

Utwórz reguły zabezpieczeń za pomocą polecenia az network nsg rule create. Następująca reguła zezwala na dostęp wychodzący do publicznych adresów IP przypisanych do usługi Azure Storage:

az network nsg rule create \
  --resource-group myResourceGroup \
  --nsg-name myNsgPrivate \
  --name Allow-Storage-All \
  --access Allow \
  --protocol "*" \
  --direction Outbound \
  --priority 100 \
  --source-address-prefix "VirtualNetwork" \
  --source-port-range "*" \
  --destination-address-prefix "Storage" \
  --destination-port-range "*"

Każda sieciowa grupa zabezpieczeń zawiera kilka domyślnych reguł zabezpieczeń. Reguła, która następuje po zastąpieniu domyślnej reguły zabezpieczeń, która zezwala na dostęp wychodzący do wszystkich publicznych adresów IP. Opcja destination-address-prefix "Internet" uniemożliwia dostęp wychodzący do wszystkich publicznych adresów IP. Poprzednia reguła zastępuje tę regułę ze względu na wyższy priorytet, co umożliwia dostęp do publicznych adresów IP usługi Azure Storage.

az network nsg rule create \
  --resource-group myResourceGroup \
  --nsg-name myNsgPrivate \
  --name Deny-Internet-All \
  --access Deny \
  --protocol "*" \
  --direction Outbound \
  --priority 110 \
  --source-address-prefix "VirtualNetwork" \
  --source-port-range "*" \
  --destination-address-prefix "Internet" \
  --destination-port-range "*"

Poniższa reguła zezwala na ruch SSH przychodzący do podsieci z dowolnego miejsca. Reguła zastępuje domyślną regułę zabezpieczeń, która zakazuje całego ruchu przychodzącego z Internetu. Protokół SSH jest dozwolony w podsieci, aby można było przetestować łączność w późniejszym kroku.

az network nsg rule create \
  --resource-group myResourceGroup \
  --nsg-name myNsgPrivate \
  --name Allow-SSH-All \
  --access Allow \
  --protocol Tcp \
  --direction Inbound \
  --priority 120 \
  --source-address-prefix "*" \
  --source-port-range "*" \
  --destination-address-prefix "VirtualNetwork" \
  --destination-port-range "22"

Ograniczanie dostępu sieciowego do kont usługi Azure Storage

W tej sekcji wymieniono kroki ograniczania dostępu do sieci dla konta usługi Azure Storage z danej podsieci w sieci wirtualnej za pośrednictwem punktu końcowego usługi.

Tworzenie konta magazynu

Utwórz dwa konta usługi Azure Storage za pomocą polecenia az storage account create.

storageAcctName1="allowedstorageacc"

az storage account create \
  --name $storageAcctName1 \
  --resource-group myResourceGroup \
  --sku Standard_LRS \
  --kind StorageV2

storageAcctName2="notallowedstorageacc"

az storage account create \
  --name $storageAcctName2 \
  --resource-group myResourceGroup \
  --sku Standard_LRS \
  --kind StorageV2

Po utworzeniu kont magazynu pobierz parametry połączenia dla kont magazynu do zmiennej za pomocą polecenia az storage account show-connection-string. Parametry połączenia służy do tworzenia udziału plików w późniejszym kroku.

saConnectionString1=$(az storage account show-connection-string \
  --name $storageAcctName1 \
  --resource-group myResourceGroup \
  --query 'connectionString' \
  --out tsv)

saConnectionString2=$(az storage account show-connection-string \
  --name $storageAcctName2 \
  --resource-group myResourceGroup \
  --query 'connectionString' \
  --out tsv)

Wyświetl zawartość zmiennej i zanotuj wartość AccountKey zwróconą w danych wyjściowych, ponieważ jest używana w późniejszym kroku.

echo $saConnectionString1

echo $saConnectionString2

Tworzenie udziału plików w ramach konta magazynu

Utwórz udział plików na koncie magazynu za pomocą polecenia az storage share create. W późniejszym kroku ten udział plików jest instalowany w celu potwierdzenia dostępu sieciowego do niego.

az storage share create \
  --name my-file-share \
  --quota 2048 \
  --connection-string $saConnectionString1 > /dev/null

az storage share create \
  --name my-file-share \
  --quota 2048 \
  --connection-string $saConnectionString2 > /dev/null

Odmowa dostępu sieciowego do konta magazynu

Domyślnie konta magazynu akceptują połączenia sieciowe od klientów w dowolnej sieci. Aby ograniczyć dostęp do wybranych sieci, zmień domyślną akcję na Odmów za pomocą polecenia az storage account update. Kiedy dostęp sieciowy jest blokowany, konto magazynu nie jest dostępne z żadnej sieci.

az storage account update \
  --name $storageAcctName1 \
  --resource-group myResourceGroup \
  --default-action Deny

az storage account update \
  --name $storageAcctName2 \
  --resource-group myResourceGroup \
  --default-action Deny

Włączanie dostępu do sieci z podsieci sieci wirtualnej

Zezwalaj na dostęp sieciowy do konta magazynu z podsieci Prywatnej za pomocą polecenia az storage account network-rule add.

az storage account network-rule add \
  --resource-group myResourceGroup \
  --account-name $storageAcctName1 \
  --vnet-name myVirtualNetwork \
  --subnet Private

az storage account network-rule add \
  --resource-group myResourceGroup \
  --account-name $storageAcctName2 \
  --vnet-name myVirtualNetwork \
  --subnet Private

Stosowanie zasad w celu zezwolenia na dostęp do prawidłowego konta magazynu

Zasady punktu końcowego usługi platformy Azure są dostępne tylko dla usługi Azure Storage. Dlatego włączymy punkt końcowy usługi dla microsoft.Storage w tej podsieci na potrzeby tej przykładowej konfiguracji.

Zasady punktu końcowego usługi są stosowane za pośrednictwem punktów końcowych usługi. Zaczniemy od utworzenia zasad punktu końcowego usługi. Następnie utworzymy definicje zasad w ramach tych zasad dla kont usługi Azure Storage, które mają zostać zatwierdzone dla tej podsieci

Tworzenie zasad punktu końcowego usługi

az network service-endpoint policy create \
  --resource-group myResourceGroup \
  --name mysepolicy \
  --location eastus

Zapisz identyfikator URI zasobu dla dozwolonego konta magazynu w zmiennej. Przed wykonaniem poniższego polecenia zastąp ciąg <your-subscription-id> rzeczywistą wartością identyfikatora subskrypcji.

$serviceResourceId="/subscriptions/<your-subscription-id>/resourceGroups/myResourceGroup/providers/Microsoft.Storage/storageAccounts/allowedstorageacc"

Utwórz i dodaj definicję zasad umożliwiającą powyższe konto usługi Azure Storage do zasad punktu końcowego usługi

az network service-endpoint policy-definition create \
  --resource-group myResourceGroup \
  --policy-name mysepolicy \
  --name mypolicydefinition \
  --service "Microsoft.Storage" \
  --service-resources $serviceResourceId

Zaktualizuj podsieć sieci wirtualnej, aby skojarzyła z nią zasady punktu końcowego usługi utworzone w poprzednim kroku

az network vnet subnet update \
  --vnet-name myVirtualNetwork \
  --resource-group myResourceGroup \
  --name Private \
  --service-endpoints Microsoft.Storage \
  --service-endpoint-policy mysepolicy

Weryfikowanie ograniczenia dostępu do kont usługi Azure Storage

Tworzenie maszyny wirtualnej

Aby przetestować dostęp sieciowy do konta magazynu, wdróż maszynę wirtualną w podsieci.

Utwórz maszynę wirtualną w podsieci Prywatnej za pomocą polecenia az vm create. Jeśli klucze SSH nie istnieją jeszcze w domyślnej lokalizacji kluczy, to polecenie je utworzy. Aby użyć określonego zestawu kluczy, użyj opcji --ssh-key-value.

az vm create \
  --resource-group myResourceGroup \
  --name myVmPrivate \
  --image <SKU linux image> \
  --vnet-name myVirtualNetwork \
  --subnet Private \
  --generate-ssh-keys

W ciągu kilku minut zostanie utworzona maszyna wirtualna. Po utworzeniu zanotuj zwrócone dane wyjściowe publicIpAddress . Ten adres jest używany do uzyskiwania dostępu do maszyny wirtualnej z Internetu w późniejszym kroku.

Potwierdzanie dostępu do konta magazynu

Połączenie SSH z maszyną wirtualną myVmPrivate . Zastąp ciąg publicIpAddress> publicznym adresem IP maszyny wirtualnej myVmPrivate.<

ssh <publicIpAddress>

Utwórz folder dla punktu instalacji:

sudo mkdir /mnt/MyAzureFileShare1

Zainstaluj udział plików platformy Azure w utworzonym katalogu. Przed wykonaniem poniższego polecenia zastąp ciąg storage-account-key> wartością AccountKey z $saPołączenie ionString1.<

sudo mount --types cifs //allowedstorageacc.file.core.windows.net/my-file-share /mnt/MyAzureFileShare1 --options vers=3.0,username=allowedstorageacc,password=<storage-account-key>,dir_mode=0777,file_mode=0777,serverino

Zostanie wyświetlony user@myVmPrivate:~$ monit. Udział plików platformy Azure został pomyślnie zainstalowany w folderze /mnt/MyAzureFileShare.

Potwierdzanie odmowy dostępu do konta magazynu

Z poziomu tej samej maszyny wirtualnej myVmPrivate utwórz katalog dla punktu instalacji:

sudo mkdir /mnt/MyAzureFileShare2

Spróbuj zainstalować udział plików platformy Azure z konta magazynu notallowedstorageacc do utworzonego katalogu. W tym artykule założono, że wdrożono najnowszą wersję dystrybucji systemu Linux. Jeśli używasz wcześniejszych wersji dystrybucji systemu Linux, zobacz Instalowanie w systemie Linux , aby uzyskać dodatkowe instrukcje dotyczące instalowania udziałów plików.

Przed wykonaniem poniższego polecenia zastąp ciąg storage-account-key> wartością AccountKey z $saPołączenie ionString2.<

sudo mount --types cifs //notallowedstorageacc.file.core.windows.net/my-file-share /mnt/MyAzureFileShare2 --options vers=3.0,username=notallowedstorageacc,password=<storage-account-key>,dir_mode=0777,file_mode=0777,serverino

Odmowa dostępu i zostanie wyświetlony mount error(13): Permission denied błąd, ponieważ to konto magazynu nie znajduje się na liście dozwolonych zasad punktu końcowego usługi zastosowanych do podsieci.

Zamknij sesję SSH z maszyną wirtualną myVmPublic .

Czyszczenie zasobów

Gdy grupa zasobów nie jest już potrzebna, użyj polecenia az group delete , aby usunąć grupę zasobów i wszystkie zawarte w niej zasoby.

az group delete --name myResourceGroup --yes

Następne kroki

W tym artykule zastosowano zasady punktu końcowego usługi za pośrednictwem punktu końcowego usługi sieci wirtualnej platformy Azure do usługi Azure Storage. Utworzono konta usługi Azure Storage i ograniczony dostęp sieciowy tylko do niektórych kont magazynu (a tym samym odmówiono innym) z podsieci sieci wirtualnej. Aby dowiedzieć się więcej na temat zasad punktu końcowego usługi, zobacz Omówienie zasad punktów końcowych usługi.