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 request
való hozzáférés szabályozásához a resource
environment
standard é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.
Ha Chandra a Project=Cascade címke nélkül próbál egy blobot olvasni, a hozzáférés nem engedélyezett.
Í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
Indítson el egy PowerShell-ablakot.
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
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
Zárja be és nyissa meg újra a PowerShellt a munkamenet frissítéséhez.
2. lépés: Bejelentkezés az Azure-ba
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
A Get-AzSubscription használatával listázhatja az összes előfizetését.
Get-AzSubscription
Határozza meg az előfizetés azonosítóját, és inicializálja a változót.
$subscriptionId = "<subscriptionId>"
Á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
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.
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
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.
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.
A Set-AzStorageBlobContent használatával töltsön fel egy szövegfájlt a tárolóba.
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 Töltsön fel egy második szöveges fájlt a tárolóba.
Adja hozzá a következő blobindexcímkét a második szövegfájlhoz.
Kulcs Érték Project Baker 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
Inicializálja a Storage Blob Adatolvasó szerepkör változóit.
$roleDefinitionName = "Storage Blob Data Reader" $roleDefinitionId = "2a2b9908-6ea1-4ae2-8e65-a410df84e7d1"
Inicializálja az erőforráscsoport hatókörét.
$scope = "/subscriptions/$subscriptionId/resourceGroups/$resourceGroup"
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.
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"
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
Az Azure Portalon nyissa meg az erőforráscsoportot.
Válassza a Hozzáférés-vezérlés (IAM) lehetőséget.
A Szerepkör-hozzárendelések lapon keresse meg a szerepkör-hozzárendelést.
A Feltétel oszlopban válassza a Nézet/Szerkesztés lehetőséget a feltétel megtekintéséhez.
7. lépés: A feltétel tesztelése
Nyisson meg egy új PowerShell-ablakot.
Az Csatlakozás-AzAccount használatával jelentkezzen be Chandra néven.
Connect-AzAccount
Inicializálja a következő változókat a használt névvel.
$storageAccountName = "<storageAccountName>" $containerName = "<containerName>" $blobNameBaker = "<blobNameBaker>" $blobNameCascade = "<blobNameCascade>"
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
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
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
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
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'))"
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"
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
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
Törölje a létrehozott tárfiókot.
Törölje a létrehozott felhasználót.