Share via


Oktatóanyag: Szerepkör-hozzárendelési feltétel hozzáadása a blobokhoz való hozzáférés korlátozásához az Azure PowerShell használatával

A szerepkör-hozzárendelés a legtöbb esetben megadja az Azure-erőforrásokhoz szükséges engedélyeket. Előfordulhat azonban, hogy egy szerepkör-hozzárendelési feltétel hozzáadásával részletesebb hozzáférés-vezérlést szeretne biztosítani.

Ebben az oktatóanyagban az alábbiakkal fog megismerkedni:

  • Feltétel hozzáadása szerepkör-hozzárendeléshez
  • Blobok hozzáférésének korlátozása blobindexcímke alapján

Fontos

Az Azure attribútumalapú hozzáférés-vezérlés (Azure ABAC) általánosan elérhető (GA) az Azure Blob Storage, az Azure Data Lake Storage Gen2 és az Azure Queues szolgáltatáshoz requestvaló hozzáférés szabályozásához a resourceenvironmentstandard és principal a prémium szintű tárfiókok teljesítményszintjeiben egyaránt. Jelenleg a tároló metaadat-erőforrásattribútuma és a listablobok kérelemattribútuma előzetes verzióban érhető el. Az Azure Storage-hoz készült ABAC szolgáltatásállapotával kapcsolatos teljes információkért tekintse meg az Azure Storage feltételfunkcióinak állapotát.

A bétaverziójú, előzetes verziójú vagy másként még általánosan nem elérhető Azure-szolgáltatások jogi feltételeit lásd: Kiegészítő használati feltételek a Microsoft Azure előzetes verziójú termékeihez.

Előfeltételek

A szerepkör-hozzárendelési feltételek hozzáadásának vagy szerkesztésének előfeltételeiről további információt a Feltételek előfeltételei című témakörben talál.

Feltétel

Ebben az oktatóanyagban egy adott címkével korlátozza a blobokhoz való hozzáférést. Hozzáadhat például egy feltételt egy szerepkör-hozzárendeléshez, hogy a Chandra csak a Project=Cascade címkével rendelkező fájlokat tudja olvasni.

Egy feltétellel rendelkező szerepkör-hozzárendelés diagramja.

Ha Chandra a Project=Cascade címke nélkül próbál egy blobot olvasni, a hozzáférés nem engedélyezett.

A Blobok olvasási hozzáférését bemutató ábra a Project=Cascade címkével.

Így néz ki a feltétel a kódban:

(
    (
        !(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'}
        AND NOT
        SubOperationMatches{'Blob.List'})
    )
    OR
    (
        @Resource[Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags:Project<$key_case_sensitive$>] StringEquals 'Cascade'
    )
)

1. lépés: Előfeltételek telepítése

  1. Indítson el egy PowerShell-ablakot.

  2. A Get-InstalledModule használatával ellenőrizze a telepített modulok verzióit.

    Get-InstalledModule -Name Az
    Get-InstalledModule -Name Az.Resources
    Get-InstalledModule -Name Az.Storage
    
  3. Ha szükséges, az Install-Module használatával telepítse az Az, az Az.Resources és az Az.Storage modulokhoz szükséges verziókat.

    Install-Module -Name Az -RequiredVersion 5.5.0
    Install-Module -Name Az.Resources -RequiredVersion 3.2.1
    Install-Module -Name Az.Storage -RequiredVersion 2.5.2-preview -AllowPrerelease
    
  4. Zárja be és nyissa meg újra a PowerShellt a munkamenet frissítéséhez.

2. lépés: Bejelentkezés az Azure-ba

  1. Használja az Csatlakozás-AzAccount parancsot, és kövesse a megjelenő utasításokat, hogy felhasználói hozzáférés Rendszergazda istratorként vagy tulajdonosként jelentkezzen be a címtárba.

    Connect-AzAccount
    
  2. A Get-AzSubscription használatával listázhatja az összes előfizetését.

    Get-AzSubscription
    
  3. Határozza meg az előfizetés azonosítóját, és inicializálja a változót.

    $subscriptionId = "<subscriptionId>"
    
  4. Állítsa be az előfizetést aktív előfizetésként.

    $context = Get-AzSubscription -SubscriptionId $subscriptionId
    Set-AzContext $context
    

3. lépés: Felhasználó létrehozása

  1. A New-MgUser használatával létrehozhat egy felhasználót, vagy megkereshet egy meglévő felhasználót. Ez az oktatóanyag a Chandrát használja példaként.

  2. Inicializálja a felhasználó objektumazonosítójának változóját.

    $userObjectId = "<userObjectId>"
    

4. lépés: Tároló beállítása

  1. A New-AzStorageAccount használatával hozzon létre egy olyan tárfiókot, amely kompatibilis a blobindex funkcióval. További információ: Azure Blob-adatok kezelése és megkeresése blobindexcímkékkel.

  2. A New-AzStorageContainer használatával hozzon létre egy új blobtárolót a tárfiókon belül, és állítsa a névtelen hozzáférési szintet Privát (névtelen hozzáférés nélkül) értékre.

  3. A Set-AzStorageBlobContent használatával töltsön fel egy szövegfájlt a tárolóba.

  4. Adja hozzá a következő blobindexcímkét a szövegfájlhoz. További információ: Blobindexcímkék használata adatok kezeléséhez és kereséséhez az Azure Blob Storage-ban.

    Feljegyzés

    A blobok emellett támogatják a felhasználó által meghatározott kulcs-érték metaadatok tárolását is. Bár a metaadatok hasonlóak a blobindex-címkékhez, a blobindex-címkéket feltételekkel kell használnia.

    Kulcs Érték
    Project Cascade
  5. Töltsön fel egy második szöveges fájlt a tárolóba.

  6. Adja hozzá a következő blobindexcímkét a második szövegfájlhoz.

    Kulcs Érték
    Project Baker
  7. Inicializálja a következő változókat a használt névvel.

    $resourceGroup = "<resourceGroup>"
    $storageAccountName = "<storageAccountName>"
    $containerName = "<containerName>"
    $blobNameCascade = "<blobNameCascade>"
    $blobNameBaker = "<blobNameBaker>"
    

5. lépés: Szerepkör hozzárendelése feltétellel

  1. Inicializálja a Storage Blob Adatolvasó szerepkör változóit.

    $roleDefinitionName = "Storage Blob Data Reader"
    $roleDefinitionId = "2a2b9908-6ea1-4ae2-8e65-a410df84e7d1"
    
  2. Inicializálja az erőforráscsoport hatókörét.

    $scope = "/subscriptions/$subscriptionId/resourceGroups/$resourceGroup"
    
  3. Inicializálja a feltételt.

    $condition = "((!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'} AND NOT SubOperationMatches{'Blob.List'})) OR (@Resource[Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags:Project<`$key_case_sensitive`$>] StringEquals 'Cascade'))"
    

    A PowerShellben, ha a feltétel dollárjelet ($) tartalmaz, előtaggal (') kell előtaggal rendelkeznie. Ez a feltétel például dollárjelekkel tagozza a címkekulcs nevét.

  4. Inicializálja a feltétel verzióját és leírását.

    $conditionVersion = "2.0"
    $description = "Read access to blobs with the tag Project=Cascade"
    
  5. A New-AzRoleAssignment használatával hozzárendelheti a Storage Blob-adatolvasó szerepkört egy feltétellel a felhasználóhoz egy erőforráscsoport hatókörében.

    New-AzRoleAssignment -ObjectId $userObjectId -Scope $scope -RoleDefinitionId $roleDefinitionId -Description $description -Condition $condition -ConditionVersion $conditionVersion
    

    A kimenet például a következő lehet:

    RoleAssignmentId   : /subscriptions/<subscriptionId>/resourceGroups/<resourceGroup>/providers/Microso
                         ft.Authorization/roleAssignments/<roleAssignmentId>
    Scope              : /subscriptions/<subscriptionId>/resourceGroups/<resourceGroup>
    DisplayName        : Chandra
    SignInName         : chandra@contoso.com
    RoleDefinitionName : Storage Blob Data Reader
    RoleDefinitionId   : 2a2b9908-6ea1-4ae2-8e65-a410df84e7d1
    ObjectId           : <userObjectId>
    ObjectType         : User
    CanDelegate        : False
    Description        : Read access to blobs with the tag Project=Cascade
    ConditionVersion   : 2.0
    Condition          : ((!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'} AND NOT
                         SubOperationMatches{'Blob.List'})) OR
                         (@Resource[Microsoft.Storage/storageAccounts/blobServices/co
                         ntainers/blobs/tags:Project<$key_case_sensitive$>] StringEquals 'Cascade'))
    

6. lépés: (Nem kötelező) A feltétel megtekintése az Azure Portalon

  1. Az Azure Portalon nyissa meg az erőforráscsoportot.

  2. Válassza a Hozzáférés-vezérlés (IAM) lehetőséget.

  3. A Szerepkör-hozzárendelések lapon keresse meg a szerepkör-hozzárendelést.

  4. A Feltétel oszlopban válassza a Nézet/Szerkesztés lehetőséget a feltétel megtekintéséhez.

Képernyőkép az Azure Portal szerepkör-hozzárendelési feltételének hozzáadásáról.

7. lépés: A feltétel tesztelése

  1. Nyisson meg egy új PowerShell-ablakot.

  2. Az Csatlakozás-AzAccount használatával jelentkezzen be Chandra néven.

    Connect-AzAccount
    
  3. Inicializálja a következő változókat a használt névvel.

    $storageAccountName = "<storageAccountName>"
    $containerName = "<containerName>"
    $blobNameBaker = "<blobNameBaker>"
    $blobNameCascade = "<blobNameCascade>"
    
  4. A New-AzStorageContext használatával létrehozhat egy adott környezetet a tárfiók egyszerűbb eléréséhez.

    $bearerCtx = New-AzStorageContext -StorageAccountName $storageAccountName
    
  5. A Get-AzStorageBlob használatával próbálja meg beolvasni a Baker-projekthez tartozó fájlt.

    Get-AzStorageBlob -Container $containerName -Blob $blobNameBaker -Context $bearerCtx 
    

    Íme egy példa a kimenetre. Figyelje meg, hogy a hozzáadott feltétel miatt nem tudja olvasni a fájlt.

    Get-AzStorageBlob : This request is not authorized to perform this operation using this permission. HTTP Status Code:
    403 - HTTP Error Message: This request is not authorized to perform this operation using this permission.
    ErrorCode: AuthorizationPermissionMismatch
    ErrorMessage: This request is not authorized to perform this operation using this permission.
    RequestId: <requestId>
    Time: Sat, 24 Apr 2021 13:26:25 GMT
    At line:1 char:1
    + Get-AzStorageBlob -Container $containerName -Blob $blobNameBaker -Con ...
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : CloseError: (:) [Get-AzStorageBlob], StorageException
        + FullyQualifiedErrorId : StorageException,Microsoft.WindowsAzure.Commands.Storage.Blob.Cmdlet.GetAzureStorageBlob
       Command
    
  6. Olvassa el a Kaszkádolt projekthez tartozó fájlt.

    Get-AzStorageBlob -Container $containerName -Blob $blobNameCascade -Context $bearerCtx 
    

    Íme egy példa a kimenetre. Figyelje meg, hogy elolvashatja a fájlt, mert a címkéje Project=Cascade.

       AccountName: <storageAccountName>, ContainerName: <containerName>
    
    Name                 BlobType  Length          ContentType                    LastModified         AccessTier SnapshotT
                                                                                                                  ime
    ----                 --------  ------          -----------                    ------------         ---------- ---------
    CascadeFile.txt      BlockBlob 7               text/plain                     2021-04-24 05:35:24Z Hot
    

8. lépés: (Nem kötelező) A feltétel szerkesztése

  1. A másik PowerShell-ablakban használja a Get-AzRoleAssignment parancsot a hozzáadott szerepkör-hozzárendelés lekéréséhez.

    $testRa = Get-AzRoleAssignment -Scope $scope -RoleDefinitionName $roleDefinitionName -ObjectId $userObjectId
    
  2. Módosítsa a feltételt.

    $condition = "((!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'} AND NOT SubOperationMatches{'Blob.List'})) OR (@Resource[Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags:Project<`$key_case_sensitive`$>] StringEquals 'Cascade' OR @Resource[Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags:Project<`$key_case_sensitive`$>] StringEquals 'Baker'))"
    
  3. Inicializálja a feltételt és a leírást.

    $testRa.Condition = $condition
    $testRa.Description = "Read access to blobs with the tag Project=Cascade or Project=Baker"
    
  4. A Set-AzRoleAssignment használatával frissítse a szerepkör-hozzárendelés feltételét.

    Set-AzRoleAssignment -InputObject $testRa -PassThru
    

    A kimenet például a következő lehet:

    RoleAssignmentId   : /subscriptions/<subscriptionId>/resourceGroups/<resourceGroup>/providers/Microso
                         ft.Authorization/roleAssignments/<roleAssignmentId>
    Scope              : /subscriptions/<subscriptionId>/resourceGroups/<resourceGroup>
    DisplayName        : Chandra
    SignInName         : chandra@contoso.com
    RoleDefinitionName : Storage Blob Data Reader
    RoleDefinitionId   : 2a2b9908-6ea1-4ae2-8e65-a410df84e7d1
    ObjectId           : <userObjectId>
    ObjectType         : User
    CanDelegate        : False
    Description        : Read access to blobs with the tag Project=Cascade or Project=Baker
    ConditionVersion   : 2.0
    Condition          : ((!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'} AND NOT
                         SubOperationMatches{'Blob.List'})) OR
                         (@Resource[Microsoft.Storage/storageAccounts/blobServices/co
                         ntainers/blobs/tags:Project<$key_case_sensitive$>] StringEquals 'Cascade' OR @Resource[Microsoft.S
                         torage/storageAccounts/blobServices/containers/blobs/tags:Project<$key_case_sensitive$>]
                         StringEquals 'Baker'))
    

9. lépés: Erőforrások törlése

  1. A Remove-AzRoleAssignment használatával eltávolíthatja a hozzáadott szerepkör-hozzárendelést és feltételt.

    Remove-AzRoleAssignment -ObjectId $userObjectId -RoleDefinitionName $roleDefinitionName -ResourceGroupName $resourceGroup
    
  2. Törölje a létrehozott tárfiókot.

  3. Törölje a létrehozott felhasználót.

Következő lépések