Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Note
Azure ABAC per Key Vault è disponibile in anteprima. Alcuni aspetti potrebbero cambiare prima della disponibilità generale. Per le condizioni di anteprima, vedere le condizioni supplementari per l'utilizzo.
Nella maggior parte dei casi, un'assegnazione di ruolo di Azure concede le autorizzazioni necessarie per le risorse di Azure. In alcuni casi, potrebbe essere necessario un controllo di accesso più granulare aggiungendo una condizione di assegnazione di ruolo.
Questo articolo illustra come usare Azure PowerShell per aggiungere una condizione di controllo degli accessi in base agli attributi di Azure (Azure ABAC) a un'assegnazione di ruolo di Key Vault, in modo che un'entità di sicurezza possa leggere solo i segreti i cui nomi iniziano con un prefisso specifico.
Per il set completo di azioni e attributi supportati, vedi Azioni e attributi per le condizioni ABAC di Azure Key Vault (anteprima).
Importante
Le condizioni ABAC funzionano solo se il modello di autorizzazione dell'insieme di credenziali è impostato sul controllo degli accessi in base al ruolo di Azure. I criteri di accesso all'insieme di credenziali legacy non supportano le condizioni.
Prerequisites
- Per informazioni sui prerequisiti per aggiungere o modificare condizioni di assegnazione di ruolo, vedere Prerequisiti delle condizioni.
- L'insieme di credenziali delle chiavi di destinazione deve avere il modello di autorizzazione impostato su controllo degli accessi in base al ruolo di Azure.
- Azure PowerShell installato in locale o usare Azure Cloud Shell.
Condition
In questo articolo si limita l'accesso ai segreti i cui nomi iniziano con test-app. Se l'utente tenta di leggere un segreto senza il prefisso del test-app nome, l'accesso non è consentito.
Ecco come appare la condizione:
(
(
!(ActionMatches{'Microsoft.KeyVault/vaults/secrets/getSecret/action'})
)
OR
(
@Resource[Microsoft.KeyVault/vaults/secrets:name] StringStartsWith 'test-app'
)
)
Passaggio 1: Installare i prerequisiti
Aprire una finestra di PowerShell.
Usare Get-InstalledModule per controllare le versioni dei moduli installati.
Get-InstalledModule -Name Az Get-InstalledModule -Name Az.Resources Get-InstalledModule -Name Az.KeyVault Get-InstalledModule -Name Microsoft.Graph.UsersSe necessario, usare Install-Module per installare le versioni necessarie dei
Azmoduli ,Az.ResourceseAz.KeyVault. È necessario ilMicrosoft.Graph.Usersmodulo solo se si prevede di creare un nuovo utente conNew-MgUsernel passaggio 3. È possibile ignorarlo se si riutilizza un utente esistente.Install-Module -Name Az Install-Module -Name Az.Resources Install-Module -Name Az.KeyVault Install-Module -Name Microsoft.Graph.UsersChiudere e riaprire PowerShell per aggiornare la sessione.
Passaggio 2: Accedere a Azure
Usare Connect-AzAccount e seguire le istruzioni per accedere come amministratore o proprietariodell'accesso utente.
Connect-AzAccountUsare Get-AzSubscription per elencare le sottoscrizioni. Formattare l'output come elenco in modo che gli ID di sottoscrizione completi non siano troncati.
Get-AzSubscription | Format-List Name, Id, TenantIdIn alternativa, visualizzare i risultati in una tabella con una colonna non troncata
Id:Get-AzSubscription | Format-Table Name, Id, State -AutoSizeImpostare la sottoscrizione come sottoscrizione attiva.
$subscriptionId = "<subscriptionId>" $context = Get-AzSubscription -SubscriptionId $subscriptionId Set-AzContext $context
Passaggio 3: Creare un utente
Usare New-MgUser per creare un utente o trovare un utente esistente. Questo articolo usa User1 come esempio.
Note
New-MgUser appartiene al Microsoft.Graph.Users modulo (installato nel passaggio 1), non ai Az moduli. Richiede anche un accesso separato a Microsoft Graph da Connect-AzAccount. Prima di eseguirlo, collegarsi all'ambito User.ReadWrite.All:
Connect-MgGraph -Scopes "User.ReadWrite.All"
Se si riutilizza un utente esistente, è possibile ignorare sia il modulo Microsoft.Graph.Users sia Connect-MgGraph e fornire l'ID oggetto di quell'utente.
Inizializzare una variabile con l'ID oggetto dell'utente.
$userObjectId = "<userObjectId>"
Passaggio 4: Configurare Key Vault
Usa New-AzKeyVault per creare un insieme di credenziali che usa Azure RBAC come modello di autorizzazioni.
New-AzKeyVault -Name "<keyVaultName>" -ResourceGroupName "<resourceGroup>" -Location "<location>"Note
In
Az.KeyVault6.0.0 e versioni successive, Azure RBAC è il modello di autorizzazioni predefinito, quindi non è necessario specificare uno switch aggiuntivo. L'opzione-EnableRbacAuthorizationè stata rimossa nella versione 6.0.0. Se lo includi, il comando ora fallisce conA parameter cannot be found that matches parameter name 'EnableRbacAuthorization'. Usare-DisableRbacAuthorizationsolo se si vuole invece usare in modo esplicito il modello di criteri di accesso all'insieme di credenziali legacy.Se si usa una versione di
Az.KeyVaultprecedente (anteriore alla 6.0.0), RBAC non è predefinito, quindi è necessario aggiungere il flag-EnableRbacAuthorization:New-AzKeyVault -Name "<keyVaultName>" -ResourceGroupName "<resourceGroup>" -Location "<location>" -EnableRbacAuthorizationControllare la versione installata con
Get-InstalledModule -Name Az.KeyVault.Concedere a sé stessi un ruolo del piano dati di Key Vault in modo da poter creare segreti. Quando un insieme di credenziali usa Azure RBAC (impostazione predefinita), i ruoli del piano di controllo, ad esempio Proprietario o Collaboratore, non concedono l'accesso ai valori dei segreti. Senza un ruolo di piano dati,
Set-AzKeyVaultSecretnon riesce conOperation returned an invalid status code 'Forbidden'eAssignment: (not found).# Object ID of the signed-in user (use -UserPrincipalName "you@tenant.com" if this returns nothing) $me = (Get-AzADUser -SignedIn).Id # Scope the assignment to the vault you just created $vaultScope = "/subscriptions/$subscriptionId/resourceGroups/<resourceGroup>/providers/Microsoft.KeyVault/vaults/<keyVaultName>" New-AzRoleAssignment -ObjectId $me ` -RoleDefinitionName "Key Vault Secrets Officer" ` -Scope $vaultScopeNote
Usa Key Vault Secrets Officer per creare e gestire i valori dei segreti oppure Key Vault Administrator per l'accesso completo al piano dati. Key Vault Secrets User è di sola lettura. Dopo aver assegnato un ruolo, attendere 1-5 minuti per la propagazione prima di eseguire il comando successivo. Un
Forbiddenerrore subito dopo l'assegnazione indica in genere che il ruolo non è ancora stato propagato.Usare Set-AzKeyVaultSecret per creare un segreto denominato
test-app-secret1.$secretValue = ConvertTo-SecureString "<secretValue>" -AsPlainText -Force Set-AzKeyVaultSecret -VaultName "<keyVaultName>" -Name "test-app-secret1" -SecretValue $secretValueNote
Il nome del segreto è l'attributo della risorsa valutato dalla condizione. Scegliere i nomi che riflettono il prefisso a cui si prevede di limitare l'accesso.
Creare un secondo segreto denominato
test-db-password.Set-AzKeyVaultSecret -VaultName "<keyVaultName>" -Name "test-db-password" -SecretValue $secretValueInizializzare le variabili con i nomi usati.
$resourceGroup = "<resourceGroup>" $keyVaultName = "<keyVaultName>" $secretNameAllowed = "test-app-secret1" $secretNameDenied = "test-db-password"
Passaggio 5: Assegnare un ruolo con una condizione
Inizializza le variabili del ruolo Utente dei segreti di Key Vault.
$roleDefinitionName = "Key Vault Secrets User" $roleDefinitionId = "4633458b-17de-408a-b874-0445c86b69e6"Inizializzare l'ambito per il gruppo di risorse. Se non si è impostata prima in questa sessione la variabile
$resourceGroup, impostarla sul nome del gruppo di risorse che contiene l'insieme di credenziali delle chiavi.$resourceGroup = "<resourceGroup>" $scope = "/subscriptions/$subscriptionId/resourceGroups/$resourceGroup"Inizializzare la condizione.
$condition = "((!(ActionMatches{'Microsoft.KeyVault/vaults/secrets/getSecret/action'})) OR (@Resource[Microsoft.KeyVault/vaults/secrets:name] StringStartsWith 'test-app'))"Importante
La condizione deve essere una stringa a riga singola. Le condizioni su più righe non sono accettate. Se si compila la condizione in una stringa qui o in più righe, appiattirla per prima:
$condition = $condition -replace '\s+', ' 'In PowerShell, se la condizione include un segno di dollaro (
$), anteporre un apice inverso (`).Inizializzare la versione e la descrizione della condizione.
$conditionVersion = "2.0" $description = "Read access to secrets whose names start with test-app"Usare New-AzRoleAssignment per assegnare all'utente il ruolo Key Vault Secrets User con una condizione a livello di gruppo di risorse.
New-AzRoleAssignment -ObjectId $userObjectId -Scope $scope -RoleDefinitionId $roleDefinitionId -Description $description -Condition $condition -ConditionVersion $conditionVersionOutput di esempio:
RoleAssignmentId : /subscriptions/<subscriptionId>/resourceGroups/<resourceGroup>/providers/Microsoft.Authorization/roleAssignments/<roleAssignmentId> Scope : /subscriptions/<subscriptionId>/resourceGroups/<resourceGroup> DisplayName : User1 SignInName : user1@contoso.com RoleDefinitionName : Key Vault Secrets User RoleDefinitionId : 4633458b-17de-408a-b874-0445c86b69e6 ObjectId : <userObjectId> ObjectType : User CanDelegate : False Description : Read access to secrets whose names start with test-app ConditionVersion : 2.0 Condition : ((!(ActionMatches{'Microsoft.KeyVault/vaults/secrets/getSecret/action'})) OR (@Resource[Microsoft.KeyVault/vaults/secrets:name] StringStartsWith 'test-app'))
Passaggio 6: Testare la condizione
Aprire una nuova finestra di PowerShell.
Usare Connect-AzAccount per accedere come User1.
Connect-AzAccountInizializzare le variabili usate in precedenza.
$keyVaultName = "<keyVaultName>" $secretNameAllowed = "test-app-secret1" $secretNameDenied = "test-db-password"Usare Get-AzKeyVaultSecret per provare a leggere il segreto negato.
Get-AzKeyVaultSecret -VaultName $keyVaultName -Name $secretNameDenied -AsPlainTextEsempio di output. Si noti che la lettura ha esito negativo a causa della condizione:
Get-AzKeyVaultSecret : Operation returned an invalid status code 'Forbidden' Caller is not authorized to perform action on resource. If role assignments, deny assignments or role definitions changed recently, please observe propagation time. ... ForbiddenByRbacLeggere il segreto il cui nome inizia con
test-app.Get-AzKeyVaultSecret -VaultName $keyVaultName -Name $secretNameAllowed -AsPlainTextÈ possibile leggere questo segreto perché il nome inizia con
test-app.
Passaggio 7: (Facoltativo) Modificare la condizione
Nell'altra finestra di PowerShell usare Get-AzRoleAssignment per ottenere l'assegnazione di ruolo aggiunta.
$testRa = Get-AzRoleAssignment -Scope $scope -RoleDefinitionName $roleDefinitionName -ObjectId $userObjectId | Where-Object { $_.Scope -eq $scope }Importante
Get-AzRoleAssignmentrestituisce anche le assegnazioni ereditate da ambiti più elevati, ad esempio lo stesso ruolo assegnato a livello di sottoscrizione. Se l'entità ha questo ruolo in più ambiti,$testRadiventa una matrice e il passaggio successivo ha esito negativo conThe property 'Condition' cannot be found on this object. IlWhere-Object { $_.Scope -eq $scope }filtro mantiene solo l'assegnazione nell'ambito del gruppo di risorse, quindi$testRaè un singolo oggetto.Modificare la condizione per consentire anche i segreti i cui nomi iniziano con
api-.$condition = "((!(ActionMatches{'Microsoft.KeyVault/vaults/secrets/getSecret/action'})) OR (@Resource[Microsoft.KeyVault/vaults/secrets:name] StringStartsWith 'test-app' OR @Resource[Microsoft.KeyVault/vaults/secrets:name] StringStartsWith 'api-'))"Per l'azione
Get secret, questa condizione consente di leggere un segreto solo se il suo nome inizia contest-appoapi-. Tutte le altre azioni passano normalmente attraverso la condizione.Aggiorna la condizione e la descrizione dell'assegnazione.
$testRa.Condition = $condition $testRa.Description = "Read access to secrets whose names start with test-app or api-"Usare Set-AzRoleAssignment per salvare la modifica.
Set-AzRoleAssignment -InputObject $testRa -PassThru
Passaggio 8: Pulire le risorse
Usare Remove-AzRoleAssignment per rimuovere l'assegnazione e la condizione del ruolo.
Remove-AzRoleAssignment -ObjectId $userObjectId -RoleDefinitionName $roleDefinitionName -ResourceGroupName $resourceGroupEliminare l'insieme di credenziali creato.
Eliminare l'utente creato.
Contenuti correlati
- Azioni e attributi per le condizioni ABAC di Azure Key Vault (anteprima)
- Aggiungere condizioni di assegnazione di ruolo per i segreti Key Vault usando interfaccia della riga di comando di Azure (anteprima)
- Risolvere i problemi relativi alle condizioni di assegnazione dei ruoli di Azure
- Risolvere i problemi di accesso per Azure Key Vault