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
Il controllo degli accessi basato su attributi (ABAC) di Azure 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 assegna 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 l'interfaccia della riga di comando di Azure per aggiungere una condizione di controllo degli accessi di Azure basato su attributi (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 l'elenco completo delle azioni e degli attributi supportati, vedere 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.
- interfaccia della riga di comando di Azure 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: Accedere ad Azure
Usare az login e seguire le istruzioni per accedere come amministratore o proprietariodell'accesso utente.
az loginUsare az account show per ottenere l'ID sottoscrizione.
az account showInizializza una variabile con l'ID della tua sottoscrizione.
subscriptionId="<subscriptionId>"
Passaggio 2: Creare un utente
Usare az ad user create per creare un utente o trovare un utente esistente. Questo articolo usa User1 come esempio.
Inizializzare una variabile con l'ID oggetto dell'utente.
userObjectId="<userObjectId>"
Passaggio 3: Configurare Key Vault
Note
I comandi in questo articolo usano la sintassi Bash (variable="value" e $variable). Se vengono eseguiti da Windows PowerShell o PowerShell 7, usare invece la sintassi delle variabili di PowerShell ($variable = "value") e ignorare la nota di espansione della cronologia Bash nel passaggio 4. I az comandi stessi sono identici in entrambe le shell.
Usare az keyvault create per creare un insieme di credenziali che usa Azure RBAC come modello di autorizzazioni.
az keyvault create --name "<keyVaultName>" --resource-group "<resourceGroup>" --location "<location>" --enable-rbac-authorization trueConcedere 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, i ruoli del piano di controllo, ad esempio Proprietario o Collaboratore, non concedono l'accesso ai valori dei segreti. Senza un ruolo nel piano dati,
az keyvault secret setnon riesce con un errore(Forbidden) Caller is not authorized to perform action on resourceper l'azioneMicrosoft.KeyVault/vaults/secrets/setSecret/action.myObjectId=$(az ad signed-in-user show --query id -o tsv) vaultScope="/subscriptions/$subscriptionId/resourceGroups/<resourceGroup>/providers/Microsoft.KeyVault/vaults/<keyVaultName>" az role assignment create --assignee-object-id $myObjectId --assignee-principal-type User --role "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. Utente dei segreti di Key Vault è 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 az keyvault secret set per creare un segreto denominato
test-app-secret1.az keyvault secret set --vault-name "<keyVaultName>" --name "test-app-secret1" --value "<secretValue>"Note
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.az keyvault secret set --vault-name "<keyVaultName>" --name "test-db-password" --value "<secretValue>"Inizializzare le variabili con i nomi usati.
resourceGroup="<resourceGroup>" keyVaultName="<keyVaultName>" secretNameAllowed="test-app-secret1" secretNameDenied="test-db-password"
Passaggio 4: 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.
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'))"Per l'azione
Get secret, questa condizione consente la lettura di un segreto solo se il nome inizia contest-app. Tutte le altre azioni (non-getSecret) non subiscono modifiche.Note
La condizione deve essere una stringa a riga singola. Le condizioni su più righe non sono accettate. Se si compila la condizione su più righe, appiattirla per prima. Per esempio:
condition=$(echo "$condition" | tr -s ' \n' ' ')In Bash, se l'espansione della cronologia è abilitata, è possibile che venga visualizzato
bash: !: event not founda causa del punto esclamativo (!) nella condizione. Disabilitare l'espansione della cronologia conset +H, quindi riabilitarla in un secondo momento conset -H.Inizializzare la versione e la descrizione della condizione.
conditionVersion="2.0" description="Read access to secrets whose names start with test-app"Usa az role assignment create per assegnare il ruolo Key Vault Secrets User con una condizione all'utente a livello di gruppo di risorse.
az role assignment create --assignee-object-id $userObjectId --scope $scope --role $roleDefinitionId --description "$description" --condition "$condition" --condition-version $conditionVersionOutput di esempio:
{ "canDelegate": null, "condition": "((!(ActionMatches{'Microsoft.KeyVault/vaults/secrets/getSecret/action'})) OR (@Resource[Microsoft.KeyVault/vaults/secrets:name] StringStartsWith 'test-app'))", "conditionVersion": "2.0", "description": "Read access to secrets whose names start with test-app", "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroup}/providers/Microsoft.Authorization/roleAssignments/{roleAssignmentId}", "name": "{roleAssignmentId}", "principalId": "{userObjectId}", "principalType": "User", "resourceGroup": "{resourceGroup}", "roleDefinitionId": "/subscriptions/{subscriptionId}/providers/Microsoft.Authorization/roleDefinitions/4633458b-17de-408a-b874-0445c86b69e6", "scope": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroup}", "type": "Microsoft.Authorization/roleAssignments" }
Passaggio 5: Testare la condizione
Aprire una nuova finestra di comando.
Usare az login per accedere come User1.
az loginInizializzare le variabili usate in precedenza.
keyVaultName="<keyVaultName>" secretNameAllowed="test-app-secret1" secretNameDenied="test-db-password"Usare az keyvault secret show per provare a leggere il segreto negato.
az keyvault secret show --vault-name $keyVaultName --name $secretNameDeniedEsempio di output. Si noti che la lettura ha esito negativo a causa della condizione:
(Forbidden) Caller is not authorized to perform action on resource. If role assignments, deny assignments or role definitions changed recently, please observe propagation time. ... Code: ForbiddenByRbacLeggere il segreto il cui nome inizia con
test-app.az keyvault secret show --vault-name $keyVaultName --name $secretNameAllowedEsempio di output. Si noti che è possibile leggere il segreto perché il nome inizia con
test-app:{ "attributes": { }, "contentType": null, "id": "https://<keyVaultName>.vault.azure.net/secrets/test-app-secret1/<version>", "name": "test-app-secret1", "tags": {}, "value": "<secretValue>" }
Passaggio 6: (Facoltativo) Modificare la condizione
Nella finestra di comando originale usare az role assignment list per ottenere l'assegnazione di ruolo aggiunta.
az role assignment list --assignee $userObjectId --resource-group $resourceGroupCreare un file JSON con il formato seguente e aggiornare le
conditionproprietà edescriptionper consentire anche i segreti i cui nomi iniziano conapi-.{ "canDelegate": null, "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-'))", "conditionVersion": "2.0", "description": "Read access to secrets whose names start with test-app or api-", "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroup}/providers/Microsoft.Authorization/roleAssignments/{roleAssignmentId}", "name": "{roleAssignmentId}", "principalId": "{userObjectId}", "principalName": "user1@contoso.com", "principalType": "User", "resourceGroup": "{resourceGroup}", "roleDefinitionId": "/subscriptions/{subscriptionId}/providers/Microsoft.Authorization/roleDefinitions/4633458b-17de-408a-b874-0445c86b69e6", "roleDefinitionName": "Key Vault Secrets User", "scope": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroup}", "type": "Microsoft.Authorization/roleAssignments" }Usare az role assignment update per aggiornare la condizione.
az role assignment update --role-assignment "./path/roleassignment.json"
Passaggio 7: Pulire le risorse
Usare az role assignment delete per rimuovere l'assegnazione e la condizione del ruolo.
az role assignment delete --assignee $userObjectId --role "$roleDefinitionName" --resource-group $resourceGroupEliminare il Key Vault 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 Azure PowerShell (anteprima)
- Risolvere i problemi relativi alle condizioni di assegnazione dei ruoli di Azure
- Risolvere i problemi di accesso per Azure Key Vault