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 vagy adl:// 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ő lesz wasbs://: .

  • 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:

  1. Az SAS-en megadott lejárati idő el lesz érve.

  2. 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.
  3. 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.

  4. 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 RESOURCEGROUPa , 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.

  1. Cserélje le STORAGEACCOUNTa és STORAGECONTAINER 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
    
  2. Á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
    
  3. 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.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_namea 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

  1. Nyissa meg a megoldást a Visual Studióban.

  2. A Megoldáskezelő kattintson a jobb gombbal a SASExample projektre, és válassza a Tulajdonságok lehetőséget.

  3. 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 , ahol myaccount a tárfiók neve, és mykey 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.
  4. 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 CLUSTERNAMEa , 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:

  1. 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.

  2. Lépjen a HDFS-konfigurációk>>speciális>egyéni magwebhelyére.

  3. 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 le STORAGEACCOUNTNAME 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

  4. 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.

  5. 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.

  6. 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.

  1. 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
    
  2. 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 le SASACCOUNTNAME 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.

  3. Az alábbi paranccsal ellenőrizheti, hogy elolvassa-e a fájl tartalmát. Cserélje le az SASCONTAINER és SASACCOUNTNAME elemet az előző lépésben leírtak szerint. Cserélje le sample.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.

  4. 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.

  5. 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: