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
Użyj środowiska powłoki Bash w usłudze Azure Cloud Shell. Aby uzyskać więcej informacji, zobacz Szybki start dotyczący powłoki Bash w usłudze Azure Cloud Shell.
Jeśli wolisz uruchamiać polecenia referencyjne interfejsu wiersza polecenia lokalnie, zainstaluj interfejs wiersza polecenia platformy Azure. Jeśli korzystasz z systemu Windows lub macOS, rozważ uruchomienie interfejsu wiersza polecenia platformy Azure w kontenerze Docker. Aby uzyskać więcej informacji, zobacz Jak uruchomić interfejs wiersza polecenia platformy Azure w kontenerze platformy Docker.
Jeśli korzystasz z instalacji lokalnej, zaloguj się do interfejsu wiersza polecenia platformy Azure za pomocą polecenia az login. Aby ukończyć proces uwierzytelniania, wykonaj kroki wyświetlane w terminalu. Aby uzyskać inne opcje logowania, zobacz Logowanie się przy użyciu interfejsu wiersza polecenia platformy Azure.
Po wyświetleniu monitu zainstaluj rozszerzenie interfejsu wiersza polecenia platformy Azure podczas pierwszego użycia. Aby uzyskać więcej informacji na temat rozszerzeń, zobacz Korzystanie z rozszerzeń w interfejsie wiersza polecenia platformy Azure.
Uruchom polecenie az version, aby znaleźć zainstalowane wersje i biblioteki zależne. Aby uaktualnić do najnowszej wersji, uruchom polecenie az upgrade.
- 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 $saConnectionString 1.<
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 $saConnectionString 2.<
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.