Az Azure Blob Storage közös hozzáférésű jogosultságkódjaival korlátozhatja az adatokhoz való hozzáférést a HDInsightban
A HDInsight teljes hozzáféréssel rendelkezik a fürthöz társított Azure Blob Storage-fiókok adataihoz. A blobtároló közös hozzáférésű jogosultságkódjaival korlátozhatja az adatokhoz való hozzáférést. A közös hozzáférésű jogosultságkódok (SAS) az Azure Blob Storage-fiókok egyik funkciója, amely lehetővé teszi az adatokhoz való hozzáférés korlátozását. Például csak olvasási hozzáférés biztosítása az adatokhoz.
Fontos
Az Apache Rangert használó megoldások esetében fontolja meg a tartományhoz csatlakoztatott HDInsight használatát. További információ: Tartományhoz csatlakoztatott HDInsight konfigurálása .
Figyelmeztetés
A HDInsightnak teljes hozzáféréssel kell rendelkeznie a fürt alapértelmezett tárolóhoz.
Előfeltételek
Egy SSH-ügyfél. További információért lásd: Csatlakozás a HDInsighthoz (Apache Hadoop) SSH-val.
Egy meglévő tároló.
A PowerShell használata esetén szüksége lesz az Az modulra.
Ha az Azure CLI-t szeretné használni, de még nem telepítette, tekintse meg az Azure CLI telepítését ismertető cikket.
Python használata esetén a 2.7-es vagy újabb verzió.
C# használata esetén a Visual Studio 2013-ás vagy újabb verziójának kell lennie.
A tárfiók URI-sémája. Ez a séma az
wasb://
Azure Blob Storage-hoz,abfs://
Azure Data Lake Storage Gen2 vagyadl://
Azure Data Lake Storage Gen1-hez készült. Ha az Azure Blob Storage esetében engedélyezve van a biztonságos átvitel, az URI a következő leszwasbs://
: .Egy meglévő HDInsight-fürt, amelyhez közös hozzáférésű jogosultságkódot szeretne hozzáadni. Ha nem, a Azure PowerShell használatával létrehozhat egy fürtöt, és hozzáadhat közös hozzáférésű jogosultságkódot a fürt létrehozása során.
A példafájlok innen: https://github.com/Azure-Samples/hdinsight-dotnet-python-azure-storage-shared-access-signature. Ez az adattár a következő elemeket tartalmazza:
- Egy Visual Studio-projekt, amely tárolót, tárolt szabályzatot és SAS-t hozhat létre a HDInsighttal való használatra
- Egy Python-szkript, amely képes tárolót, tárolt szabályzatot és SAS-t létrehozni a HDInsighttal való használatra
- Egy PowerShell-szkript, amely létrehozhat egy HDInsight-fürtöt, és konfigurálhatja az SAS használatára. Az alábbiakban egy frissített verziót használunk.
- Mintafájl:
hdinsight-dotnet-python-azure-storage-shared-access-signature-master\sampledata\sample.log
Közös hozzáférésű jogosultságkódok
A közös hozzáférésű jogosultságkódoknak két formája van:
Ad hoc
: Az SAS kezdő időpontja, lejárati ideje és engedélyei mind meg vannak adva az SAS URI-n.Stored access policy
: Egy tárolt hozzáférési szabályzat definiálva van egy erőforrástárolón, például egy blobtárolón. Egy szabályzat egy vagy több közös hozzáférésű jogosultságkód korlátozásainak kezelésére használható. Ha egy SAS-t egy tárolt hozzáférési szabályzathoz társít, az SAS örökli a tárolt hozzáférési szabályzathoz meghatározott korlátozásokat – a kezdési időpontot, a lejárati időt és az engedélyeket.
A két űrlap közötti különbség egy kulcsfontosságú forgatókönyv esetében fontos: a visszavonás. Az SAS egy URL-cím, így bárki, aki beszerezi az SAS-t, használhatja. Nem számít, ki kérte, hogy kezdje. Ha egy SAS nyilvánosan van közzétéve, a világon bárki használhatja. Az elosztott SAS mindaddig érvényes, amíg a négy dolog egyike meg nem történik:
Az SAS-en megadott lejárati idő el lesz érve.
A rendszer eléri az SAS által hivatkozott tárolt hozzáférési szabályzatban megadott lejárati időt. A következő forgatókönyvek a lejárati idő elérését okozzák:
- Az időintervallum lejárt.
- A tárolt hozzáférési szabályzatot úgy módosítjuk, hogy a lejárati idő a múltban legyen. Az SAS visszavonásának egyik módja a lejárati idő módosítása.
Az SAS által hivatkozott tárolt hozzáférési szabályzat törlődik, ami a SAS visszavonásának egy másik módja. Ha a tárolt hozzáférési szabályzatot ugyanazzal a névvel hozza létre újra, az előző szabályzat összes SAS-jogkivonata érvényes lesz (ha az SAS lejárati ideje nem telt el). Ha vissza szeretné vonni az SAS-t, mindenképpen használjon másik nevet, ha a jövőben újra létrehozza a hozzáférési szabályzatot egy lejárati idővel.
Az SAS létrehozásához használt fiókkulcs újra létrejön. A kulcs újragenerálása az előző kulcsot használó összes alkalmazás hitelesítésének meghiúsulását okozza. Frissítse az összes összetevőt az új kulcsra.
Fontos
A közös hozzáférésű jogosultságkód URI-ja az aláírás létrehozásához használt fiókkulcshoz és a társított tárolt hozzáférési szabályzathoz (ha van ilyen) van társítva. Ha nincs megadva tárolt hozzáférési szabályzat, a közös hozzáférésű jogosultságkód visszavonásának egyetlen módja a fiókkulcs módosítása.
Javasoljuk, hogy mindig tárolt hozzáférési szabályzatokat használjon. Tárolt szabályzatok használatakor visszavonhatja az aláírásokat, vagy szükség szerint meghosszabbíthatja a lejárati dátumot. A dokumentum lépései tárolt hozzáférési szabályzatokkal hoznak létre SAS-t.
A közös hozzáférésű jogosultságkódokkal kapcsolatos további információkért lásd : Az SAS-modell ismertetése.
Tárolt szabályzat és SAS létrehozása
Mentse az egyes metódusok végén létrehozott SAS-jogkivonatot. A jogkivonat a következő kimenethez hasonlóan fog kinézni:
?sv=2018-03-28&sr=c&si=myPolicyPS&sig=NAxefF%2BrR2ubjZtyUtuAvLQgt%2FJIN5aHJMj6OsDwyy4%3D
A PowerShell használata
Cserélje le RESOURCEGROUP
a , STORAGEACCOUNT
és STORAGECONTAINER
értéket a meglévő tároló megfelelő értékeire. Módosítsa a könyvtárat a paraméterrehdinsight-dotnet-python-azure-storage-shared-access-signature-master
, vagy módosítsa úgy, -File
hogy az tartalmazza a abszolút elérési útját.Set-AzStorageblobcontent
Adja meg a következő PowerShell-parancsot:
$resourceGroupName = "RESOURCEGROUP"
$storageAccountName = "STORAGEACCOUNT"
$containerName = "STORAGECONTAINER"
$policy = "myPolicyPS"
# Login to your Azure subscription
$sub = Get-AzSubscription -ErrorAction SilentlyContinue
if(-not($sub))
{
Connect-AzAccount
}
# If you have multiple subscriptions, set the one to use
# Select-AzSubscription -SubscriptionId "<SUBSCRIPTIONID>"
# Get the access key for the Azure Storage account
$storageAccountKey = (Get-AzStorageAccountKey `
-ResourceGroupName $resourceGroupName `
-Name $storageAccountName)[0].Value
# Create an Azure Storage context
$storageContext = New-AzStorageContext `
-StorageAccountName $storageAccountName `
-StorageAccountKey $storageAccountKey
# Create a stored access policy for the Azure storage container
New-AzStorageContainerStoredAccessPolicy `
-Container $containerName `
-Policy $policy `
-Permission "rl" `
-ExpiryTime "12/31/2025 08:00:00" `
-Context $storageContext
# Get the stored access policy or policies for the Azure storage container
Get-AzStorageContainerStoredAccessPolicy `
-Container $containerName `
-Context $storageContext
# Generates an SAS token for the Azure storage container
New-AzStorageContainerSASToken `
-Name $containerName `
-Policy $policy `
-Context $storageContext
<# Removes a stored access policy from the Azure storage container
Remove-AzStorageContainerStoredAccessPolicy `
-Container $containerName `
-Policy $policy `
-Context $storageContext
#>
# upload a file for a later example
Set-AzStorageblobcontent `
-File "./sampledata/sample.log" `
-Container $containerName `
-Blob "samplePS.log" `
-Context $storageContext
Az Azure parancssori felület használata
Ebben a szakaszban a változók használata Windows-környezeten alapul. A bash vagy más környezetek esetében kisebb eltérésekre lesz szükség.
Cserélje le
STORAGEACCOUNT
a ésSTORAGECONTAINER
a értéket a meglévő tároló megfelelő értékeire.# set variables set AZURE_STORAGE_ACCOUNT=STORAGEACCOUNT set AZURE_STORAGE_CONTAINER=STORAGECONTAINER #Login az login # If you have multiple subscriptions, set the one to use # az account set --subscription SUBSCRIPTION # Retrieve the primary key for the storage account az storage account keys list --account-name %AZURE_STORAGE_ACCOUNT% --query "[0].{PrimaryKey:value}" --output table
Állítsa a lekért elsődleges kulcsot egy változóra későbbi használatra. Cserélje le
PRIMARYKEY
a elemet az előző lépésben lekért értékre, majd írja be az alábbi parancsot:#set variable for primary key set AZURE_STORAGE_KEY=PRIMARYKEY
Módosítsa a könyvtárat a paraméterre
hdinsight-dotnet-python-azure-storage-shared-access-signature-master
, vagy módosítsa úgy,--file
hogy az tartalmazza a abszolút elérési útját.az storage blob upload
Hajtsa végre a többi parancsot:# Create stored access policy on the containing object az storage container policy create --container-name %AZURE_STORAGE_CONTAINER% --name myPolicyCLI --account-key %AZURE_STORAGE_KEY% --account-name %AZURE_STORAGE_ACCOUNT% --expiry 2025-12-31 --permissions rl # List stored access policies on a containing object az storage container policy list --container-name %AZURE_STORAGE_CONTAINER% --account-key %AZURE_STORAGE_KEY% --account-name %AZURE_STORAGE_ACCOUNT% # Generate a shared access signature for the container az storage container generate-sas --name %AZURE_STORAGE_CONTAINER% --policy-name myPolicyCLI --account-key %AZURE_STORAGE_KEY% --account-name %AZURE_STORAGE_ACCOUNT% # Reversal # az storage container policy delete --container-name %AZURE_STORAGE_CONTAINER% --name myPolicyCLI --account-key %AZURE_STORAGE_KEY% --account-name %AZURE_STORAGE_ACCOUNT% # upload a file for a later example az storage blob upload --container-name %AZURE_STORAGE_CONTAINER% --account-key %AZURE_STORAGE_KEY% --account-name %AZURE_STORAGE_ACCOUNT% --name sampleCLI.log --file "./sampledata/sample.log"
A Python használata
Nyissa meg a fájlt, cserélje le storage_account_name
a SASToken.py
, storage_account_key
és storage_container_name
értéket a meglévő tároló megfelelő értékeire, majd futtassa a szkriptet.
Előfordulhat, hogy végre kell hajtania a következő pip install --upgrade azure-storage
hibaüzenetet ImportError: No module named azure.storage
: .
A C# használata
Nyissa meg a megoldást a Visual Studióban.
A Megoldáskezelő kattintson a jobb gombbal a SASExample projektre, és válassza a Tulajdonságok lehetőséget.
Válassza a Beállítások lehetőséget , és adjon meg értékeket a következő bejegyzésekhez:
Elem Leírás StorageConnectionString Annak a tárfióknak a kapcsolati sztring, amelyhez tárolt szabályzatot és SAS-t szeretne létrehozni. A formátumnak ott kell lennie DefaultEndpointsProtocol=https;AccountName=myaccount;AccountKey=mykey
, aholmyaccount
a tárfiók neve, ésmykey
a tárfiók kulcsa.ContainerName A tárfiók azon tárolója, amelyhez korlátozni szeretné a hozzáférést. SASPolicyName A tárolt szabályzat létrehozásához használandó név. FileToUpload A tárolóba feltöltött fájl elérési útja. Futtassa a projektet. Mentse az SAS-szabályzat jogkivonatát, a tárfiók nevét és a tároló nevét. Ezek az értékek akkor használatosak, ha a tárfiókot a HDInsight-fürthöz társítja.
Az SAS használata a HDInsighttal
HDInsight-fürt létrehozásakor meg kell adnia egy elsődleges tárfiókot. További tárfiókokat is megadhat. A tárterület hozzáadásának mindkét módszeréhez teljes hozzáférés szükséges a használt tárfiókokhoz és tárolókhoz.
A tárolóhoz való hozzáférés korlátozásához használjon közös hozzáférésű jogosultságkódot. Adjon hozzá egy egyéni bejegyzést a fürt központi helyének konfigurációjába. A bejegyzést a fürt létrehozása során a PowerShell használatával vagy a fürt Ambari használatával történő létrehozása után is hozzáadhatja.
SAS-t használó fürt létrehozása
Cserélje le CLUSTERNAME
a , RESOURCEGROUP
, DEFAULTSTORAGEACCOUNT
, STORAGECONTAINER
, STORAGEACCOUNT
és TOKEN
értéket a megfelelő értékekre. Adja meg a PowerShell-parancsokat:
$clusterName = 'CLUSTERNAME'
$resourceGroupName = 'RESOURCEGROUP'
# Replace with the Azure data center you want to the cluster to live in
$location = 'eastus'
# Replace with the name of the default storage account TO BE CREATED
$defaultStorageAccountName = 'DEFAULTSTORAGEACCOUNT'
# Replace with the name of the SAS container CREATED EARLIER
$SASContainerName = 'STORAGECONTAINER'
# Replace with the name of the SAS storage account CREATED EARLIER
$SASStorageAccountName = 'STORAGEACCOUNT'
# Replace with the SAS token generated earlier
$SASToken = 'TOKEN'
# Default cluster size (# of worker nodes), version, and type
$clusterSizeInNodes = "4"
$clusterVersion = "3.6"
$clusterType = "Hadoop"
# Login to your Azure subscription
$sub = Get-AzSubscription -ErrorAction SilentlyContinue
if(-not($sub))
{
Connect-AzAccount
}
# If you have multiple subscriptions, set the one to use
# Select-AzSubscription -SubscriptionId "<SUBSCRIPTIONID>"
# Create an Azure Storage account and container
New-AzStorageAccount `
-ResourceGroupName $resourceGroupName `
-Name $defaultStorageAccountName `
-Location $location `
-SkuName Standard_LRS `
-Kind StorageV2 `
-EnableHttpsTrafficOnly 1
$defaultStorageAccountKey = (Get-AzStorageAccountKey `
-ResourceGroupName $resourceGroupName `
-Name $defaultStorageAccountName)[0].Value
$defaultStorageContext = New-AzStorageContext `
-StorageAccountName $defaultStorageAccountName `
-StorageAccountKey $defaultStorageAccountKey
# Create a blob container. This holds the default data store for the cluster.
New-AzStorageContainer `
-Name $clusterName `
-Context $defaultStorageContext
# Cluster login is used to secure HTTPS services hosted on the cluster
$httpCredential = Get-Credential `
-Message "Enter Cluster login credentials" `
-UserName "admin"
# SSH user is used to remotely connect to the cluster using SSH clients
$sshCredential = Get-Credential `
-Message "Enter SSH user credentials" `
-UserName "sshuser"
# Create the configuration for the cluster
$config = New-AzHDInsightClusterConfig
$config = $config | Add-AzHDInsightConfigValue `
-Spark2Defaults @{} `
-Core @{"fs.azure.sas.$SASContainerName.$SASStorageAccountName.blob.core.windows.net"=$SASToken}
# Create the HDInsight cluster
New-AzHDInsightCluster `
-Config $config `
-ResourceGroupName $resourceGroupName `
-ClusterName $clusterName `
-Location $location `
-ClusterSizeInNodes $clusterSizeInNodes `
-ClusterType $clusterType `
-OSType Linux `
-Version $clusterVersion `
-HttpCredential $httpCredential `
-SshCredential $sshCredential `
-DefaultStorageAccountName "$defaultStorageAccountName.blob.core.windows.net" `
-DefaultStorageAccountKey $defaultStorageAccountKey `
-DefaultStorageContainer $clusterName
<# REVERSAL
Remove-AzHDInsightCluster `
-ResourceGroupName $resourceGroupName `
-ClusterName $clusterName
Remove-AzStorageContainer `
-Name $clusterName `
-Context $defaultStorageContext
Remove-AzStorageAccount `
-ResourceGroupName $resourceGroupName `
-Name $defaultStorageAccountName
Remove-AzResourceGroup `
-Name $resourceGroupName
#>
Fontos
Amikor a rendszer a HTTP/s- vagy SSH-felhasználónevet és -jelszót kéri, meg kell adnia egy jelszót, amely megfelel a következő feltételeknek:
- Legalább 10 karakter hosszúságúnak kell lennie.
- Legalább egy számjegyet tartalmaznia kell.
- Legalább egy nem alfanumerikus karaktert tartalmaznia kell.
- Legalább egy nagybetűt vagy kisbetűt tartalmaznia kell.
A szkript végrehajtása egy ideig tart, általában körülbelül 15 percig. Ha a szkript hiba nélkül befejeződik, a fürt létrejött.
Az SAS használata meglévő fürttel
Ha rendelkezik meglévő fürtel, az SAS-t a következő lépésekkel veheti fel a központi hely konfigurációjához:
Nyissa meg a fürt Ambari webes felhasználói felületét. Ennek a lapnak a címe.
https://YOURCLUSTERNAME.azurehdinsight.net
Amikor a rendszer kéri, hitelesítse magát a fürtben a fürt létrehozásakor használt rendszergazdai névvel (rendszergazda) és jelszóval.Lépjen a HDFS-konfigurációk>>speciális>egyéni magwebhelyére.
Bontsa ki az Egyéni magwebhely szakaszt, görgessen a végéhez, majd válassza a Tulajdonság hozzáadása... lehetőséget. Használja a következő értékeket a Kulcs és az Érték beállításhoz:
- Kulcs:
fs.azure.sas.CONTAINERNAME.STORAGEACCOUNTNAME.blob.core.windows.net
- Érték: A korábban végrehajtott metódusok egyike által visszaadott SAS.
Cserélje le
CONTAINERNAME
a elemet a C# vagy SAS alkalmazással használt tárolónévre. Cserélje leSTORAGEACCOUNTNAME
a elemet a használt tárfiók nevére.A kulcs és az érték mentéséhez válassza a Hozzáadás lehetőséget
- Kulcs:
A konfiguráció módosításainak mentéséhez kattintson a Mentés gombra. Amikor a rendszer kéri, adja meg a módosítás leírását ("például SAS-tárhozzáférés hozzáadása"), majd válassza a Mentés lehetőséget.
Kattintson az OK gombra , amikor a módosítások befejeződtek.
Fontos
A módosítás érvénybe lépése előtt több szolgáltatást is újra kell indítania.
Megjelenik egy Újraindítás legördülő lista. Válassza a Minden érintett újraindítása lehetőséget a legördülő listában, majd erősítse meg az Összes újraindítása lehetőséget.
Ismételje meg ezt a folyamatot a MapReduce2 és a YARN esetében.
Miután a szolgáltatások újraindultak, jelölje ki mindegyiket, és tiltsa le a karbantartási módot a Szolgáltatásműveletek legördülő menüből.
Korlátozott hozzáférés tesztelése
Az alábbi lépésekkel ellenőrizheti, hogy csak az SAS-tárfiók elemeit tudja-e olvasni és listázni.
Csatlakozzon a fürthöz. Cserélje le
CLUSTERNAME
a elemet a fürt nevére, és írja be a következő parancsot:ssh sshuser@CLUSTERNAME-ssh.azurehdinsight.net
A tároló tartalmának listázásához használja a következő parancsot a parancssorból:
hdfs dfs -ls wasbs://SASCONTAINER@SASACCOUNTNAME.blob.core.windows.net/
Cserélje le
SASCONTAINER
a elemet az SAS-tárfiókhoz létrehozott tároló nevére. Cserélje leSASACCOUNTNAME
a elemet az SAS-hez használt tárfiók nevére.A lista tartalmazza a tároló és az SAS létrehozásakor feltöltött fájlt.
Az alábbi paranccsal ellenőrizheti, hogy elolvassa-e a fájl tartalmát. Cserélje le az
SASCONTAINER
ésSASACCOUNTNAME
elemet az előző lépésben leírtak szerint. Cserélje lesample.log
a elemet az előző parancsban megjelenített fájl nevére:hdfs dfs -text wasbs://SASCONTAINER@SASACCOUNTNAME.blob.core.windows.net/sample.log
Ez a parancs felsorolja a fájl tartalmát.
Töltse le a fájlt a helyi fájlrendszerbe a következő paranccsal:
hdfs dfs -get wasbs://SASCONTAINER@SASACCOUNTNAME.blob.core.windows.net/sample.log testfile.txt
Ez a parancs letölti a fájlt egy testfile.txtnevű helyi fájlba.
A következő paranccsal töltse fel a helyi fájlt egy testupload.txt nevű új fájlba a SAS-tárolóban:
hdfs dfs -put testfile.txt wasbs://SASCONTAINER@SASACCOUNTNAME.blob.core.windows.net/testupload.txt
A következő szöveghez hasonló üzenet érkezik:
put: java.io.IOException
Ez a hiba azért fordul elő, mert a tárolási hely csak olvasási+listás. Az alábbi paranccsal helyezze az adatokat a fürt alapértelmezett tárolójára, amely írható:
hdfs dfs -put testfile.txt wasbs:///testupload.txt
Ezúttal a műveletnek sikeresen le kell fejeződnie.
Következő lépések
Most, hogy megismerte, hogyan adhat hozzá korlátozott hozzáférésű tárolót a HDInsight-fürthöz, megismerheti a fürt adatainak kezelésének egyéb módjait: