Proteggere l'insieme di credenziali delle chiaviSecure your key vault

Insieme di credenziali delle chiavi di Azure è un servizio cloud che consente di proteggere le chiavi di crittografia e i segreti (ad esempio, certificati, stringhe di connessione e password) per le applicazioni cloud.Azure Key Vault is a cloud service that safeguards encryption keys and secrets (such as certificates, connection strings, passwords) for your cloud applications. Poiché questi dati sono riservati e importanti per l'azienda, è opportuno limitare l'accesso agli insiemi di credenziali delle chiavi alle applicazioni e agli utenti autorizzati.Since this data is sensitive and business critical, you want to secure access to your key vaults so that only authorized applications and users can access key vault. Questo articolo offre una panoramica del modello di accesso all'insieme di credenziali delle chiavi, illustra i criteri di autenticazione e autorizzazione e spiega come proteggere l'accesso all'insieme di credenziali delle chiavi per le applicazioni cloud presentando un esempio.This article provides an overview of key vault access model, explains authentication and authorization, and describes how to secure access to key vault for your cloud applications with an example.

PanoramicaOverview

L'accesso a un insieme di credenziali delle chiavi è controllato tramite due interfacce separate: piano di gestione e piano dati.Access to a key vault is controlled through two separate interfaces: management plane and data plane. Per entrambi i piani, sono richieste opportune procedure di autenticazione e autorizzazione prima che un chiamante (un utente o un'applicazione) possa ottenere l'accesso all'insieme di credenziali delle chiavi.For both planes proper authentication and authorization is required before a caller (a user or an application) can get access to key vault. L'autenticazione stabilisce l'identità del chiamante, mentre l'autorizzazione determina le operazioni che il chiamante è autorizzato a eseguire.Authentication establishes the identity of the caller, while authorization determines what operations the caller is allowed to perform.

Per l'autenticazione, sia il piano di gestione sia il piano dati usano Azure Active Directory.For authentication both management plane and data plane use Azure Active Directory. Per l'autorizzazione, il piano di gestione usa il controllo degli accessi in base al ruolo, mentre il piano dati usa i criteri di accesso dell'insieme di credenziali delle chiavi.For authorization, management plane uses role-based access control (RBAC) while data plane uses key vault access policy.

Ecco una breve panoramica degli argomenti trattati:Here is a brief overview of the topics covered:

Autenticazione tramite Azure Active Directory: questa sezione spiega come un chiamante esegue l'autenticazione con Azure Active Directory per accedere a un insieme di credenziali delle chiavi tramite il piano di gestione e il piano dati.Authentication using Azure Active Directory - This section explains how a caller authenticates with Azure Active Directory to access a key vault via management plane and data plane.

Piano di gestione e piano dati: questi sono i due piani usati per accedere all'insieme di credenziali delle chiavi.Management plane and data plane - Management plane and data plane are two access planes used for accessing your key vault. Ogni piano di accesso supporta operazioni specifiche.Each access plane supports specific operations. Questa sezione descrive gli endpoint di accesso, le operazioni supportate e il metodo di controllo di accesso usato da ogni piano.This section describes the access endpoints, operations supported, and access control method used by each plane.

Controllo di accesso al piano di gestione: questa sezione illustra come consentire l'accesso alle operazioni del piano di gestione tramite il controllo degli accessi in base al ruolo.Management plane access control - In this section we'll look at allowing access to management plane operations using role-based access control.

Controllo di accesso al piano dati: questa sezione descrive come usare i criteri di accesso dell'insieme di credenziali delle chiavi per controllare l'accesso al piano dati.Data plane access control - This section describes how to use key vault access policy to control data plane access.

Esempio: questo esempio spiega come configurare il controllo di accesso per l'insieme di credenziali delle chiavi in modo da consentire a tre diversi team (team responsabile della sicurezza, sviluppatori/operatori e revisori) di eseguire attività specifiche per sviluppare, gestire e monitorare un'applicazione in Azure.Example - This example describes how to setup access control for your key vault to allow three different teams (security team, developers/operators, and auditors) to perform specific tasks to develop, manage and monitor an application in Azure.

Autenticazione tramite Azure Active DirectoryAuthentication using Azure Active Directory

Quando si crea un insieme di credenziali delle chiavi in una sottoscrizione di Azure, questo viene automaticamente associato al tenant di Azure Active Directory relativo alla sottoscrizione.When you create a key vault in an Azure subscription, it is automatically associated with the subscription's Azure Active Directory tenant. Per accedere all'insieme di credenziali delle chiavi, tutti i chiamanti (utenti e applicazioni) devono essere registrati in questo tenantAll callers (users and applications) must be registered in this tenant to access this key vault. e inoltre un'applicazione o un utente deve autenticarsi con Azure Active Directory.An application or a user must authenticate with Azure Active Directory to access key vault. Queste considerazioni sono valide sia per il piano di gestione sia per il piano dati.This applies to both management plane and data plane access. In entrambi i casi, un'applicazione può accedere a un insieme di credenziali delle chiavi in due modi:In both cases, an application can access key vault in two ways:

  • accesso utente+app: in genere questo meccanismo viene usato per le applicazioni che accedono all'insieme di credenziali delle chiavi per conto di un utente connesso.user+app access - usually this is for applications that access key vault on behalf of a signed-in user. Azure PowerShell e il portale di Azure offrono un esempio di questo tipo di accesso.Azure PowerShell, Azure Portal are examples of this type of access. Esistono due modi per concedere l'accesso agli utenti: gli utenti possono accedere all'insieme di credenziali delle chiavi da qualsiasi applicazione oppure solo da un'applicazione specifica, definita identità composta.There are two ways to grant access to users: one way is to grant access to users so they can access key vault from any application and the other way is to grant a user access to key vault only when they use a specific application (referred to as compound identity).
  • accesso solo app: questo meccanismo viene usato per le applicazioni che eseguono servizi daemon, processi in background e così via. L'accesso all'insieme di credenziali delle chiavi viene concesso all'identità dell'applicazione.app-only access - for applications that run daemon services, background jobs etc. The application's identity is granted access to the key vault.

In entrambi i casi, l'applicazione esegue l'autenticazione con Azure Active Directory usando uno dei metodi di autenticazione supportati e acquisisce un token.In both types of applications, the application authenticates with Azure Active Directory using any of the supported authentication methods and acquires a token. Il metodo di autenticazione usato dipende dal tipo di applicazione.Authentication method used depends on the application type. L'applicazione usa quindi questo token e invia una richiesta API REST all'insieme di credenziali delle chiavi.Then the application uses this token and sends REST API request to key vault. In caso di accesso al piano di gestione, le richieste vengono instradate attraverso l'endpoint di Azure Resource Manager.In case of management plane access the requests are routed through Azure Resource Manager endpoint. Quando invece si accede al piano dati, le applicazioni interagiscono direttamente con un endpoint dell'insieme di credenziali delle chiavi.When accessing data plane, the applications talks directly to a key vault endpoint. Sono disponibili informazioni più dettagliate sull'intero flusso di autenticazione.See more details on the whole authentication flow.

Il nome della risorsa per cui l'applicazione richiede un token è diverso a seconda che l'applicazione acceda al piano di gestione o al piano dati.The resource name for which the application requests a token is different depending on whether the application is accessing management plane or data plane. Di conseguenza, il nome della risorsa corrisponde all'endpoint del piano di gestione o a quello del piano dati descritto nella tabella di una sezione successiva, a seconda dell'ambiente di Azure.Hence the resource name is either management plane or data plane endpoint described in the table in a later section, depending on the Azure environment.

L'uso di un solo meccanismo per l'autenticazione a entrambi i piani presenta specifici vantaggi:Having one single mechanism for authentication to both management and data plane has its own benefits:

  • Le organizzazioni possono controllare l'accesso a tutti gli insiemi di credenziali delle chiavi in modo centralizzato.Organizations can centrally control access to all key vaults in their organization
  • Se un utente lascia l'organizzazione, perde immediatamente l'accesso a tutti gli insiemi di credenziali delle chiavi all'interno dell'organizzazione.If a user leaves, they instantly lose access to all key vaults in the organization
  • Le organizzazioni possono personalizzare l'autenticazione tramite le opzioni disponibili in Azure Active Directory, ad esempio abilitando l'autenticazione a più fattori per maggiore sicurezza.Organizations can customize authentication via the options in Azure Active Directory (for example, enabling multi-factor authentication for added security)

Piano di gestione e piano datiManagement plane and data plane

Insieme di credenziali delle chiavi è un servizio di Azure disponibile tramite il modello di distribuzione Azure Resource Manager.Azure Key Vault is an Azure service available via Azure Resource Manager deployment model. Quando si crea un insieme di credenziali delle chiavi, si ottiene un contenitore virtuale nel quale è possibile creare altri oggetti come chiavi, segreti e certificati.When you create a key vault, you get a virtual container inside which you can create other objects like keys, secrets, and certificates. Si accede quindi all'insieme di credenziali delle chiavi usando il piano di gestione e il piano dati per eseguire operazioni specifiche.Then you access your key vault using management plane and data plane to perform specific operations. L'interfaccia del piano di gestione viene usata per gestire l'insieme di credenziali delle chiavi, ad esempio per creare, eliminare e aggiornare gli attributi dell'insieme e impostare criteri di accesso per il piano dati.Management plane interface is used to manage your key vault itself, such as creating, deleting, updating key vault attributes and setting access policies for data plane. L'interfaccia del piano dati viene usata per aggiungere, eliminare, modificare e usare le chiavi, i segreti e i certificati archiviati nell'insieme di credenziali delle chiavi.Data plane interface is used to add, delete, modify, and use the keys, secrets, and certificates stored in your key vault.

Le due interfacce sono accessibili tramite endpoint diversi (vedere la tabella).The management plane and data plane interfaces are accessed through different endpoints (see table). La seconda colonna della tabella indica i nomi DNS per questi endpoint in diversi ambienti di Azure.The second column in the table describes the DNS names for these endpoints in different Azure environments. La terza colonna descrive le operazioni che è possibile eseguire da ogni piano di accesso.The third column describes the operations you can perform from each access plane. Ognuno dei piani ha anche uno specifico meccanismo di controllo di accesso: per il piano di gestione viene usato il controllo degli accessi in base al ruolo di Azure Resource Manager, mentre per il piano dati vengono usati i criteri di accesso dell'insieme di credenziali delle chiavi.Each access plane also has its own access control mechanism: for management plane access control is set using Azure Resource Manager Role-Based Access Control (RBAC), while for data plane access control is set using key vault access policy.

Piano di accessoAccess plane Endpoint di accessoAccess endpoints OperazioniOperations Meccanismo di controllo di accessoAccess control mechanism
Piano di gestioneManagement plane Globale:Global:
management.azure.com:443management.azure.com:443

Azure per la Cina:Azure China:
management.chinacloudapi.cn:443management.chinacloudapi.cn:443

Azure per enti pubblici statunitensi:Azure US Government:
management.usgovcloudapi.net:443management.usgovcloudapi.net:443

Azure per la Germania:Azure Germany:
management.microsoftazure.de:443management.microsoftazure.de:443
Creare/Leggere/Aggiornare/Eliminare l'insieme di credenziali delle chiaviCreate/Read/Update/Delete key vault
Impostare criteri di accesso per l'insieme di credenziali delle chiaviSet access policies for key vault
Impostare tag per l'insieme di credenziali delle chiaviSet tags for key vault
Controllo degli accessi in base al ruolo di Azure Resource ManagerAzure Resource Manager Role-Based Access Control (RBAC)
Piano datiData plane Globale:Global:
<nome-insiemecredenziali>.vault.azure.net:443<vault-name>.vault.azure.net:443

Azure per la Cina:Azure China:
<nome-insiemecredenziali>.vault.azure.cn:443<vault-name>.vault.azure.cn:443

Azure per enti pubblici statunitensi:Azure US Government:
<nome-insiemecredenziali>.vault.usgovcloudapi.net:443<vault-name>.vault.usgovcloudapi.net:443

Azure per la Germania:Azure Germany:
<nome-insiemecredenziali>.vault.microsoftazure.de:443<vault-name>.vault.microsoftazure.de:443
Per le chiavi: Decrypt, Encrypt, UnwrapKey, WrapKey, Verify, Sign, Get, List, Update, Create, Import, Delete, Backup, RestoreFor Keys: Decrypt, Encrypt, UnwrapKey, WrapKey, Verify, Sign, Get, List, Update, Create, Import, Delete, Backup, Restore

Per i segreti: Get, List, Set, DeleteFor secrets: Get, List, Set, Delete
Criteri di accesso dell'insieme di credenziali delle chiaviKey vault access policy

I controlli di accesso al piano di gestione e al piano dati funzionano in maniera indipendente.The management plane and data plane access controls work independently. Se ad esempio si vuole concedere l'accesso a un'applicazione per l'uso di chiavi in un insieme di credenziali delle chiavi, è necessario concedere solo autorizzazioni di accesso al piano dati tramite criteri di accesso dell'insieme di credenziali delle chiavi. Non sono necessarie autorizzazioni di accesso al piano di gestione per l'applicazione.For example, if you want to grant an application access to use keys in a key vault, you only need to grant data plane access permissions using key vault access policies and no management plane access is needed for this application. Al contrario, se si vuole che un utente sia in grado di leggere i tag e le proprietà dell'insieme di credenziali, senza avere accesso a chiavi, segreti o certificati, è possibile concedere all'utente l'accesso "read" usando il controllo degli accessi in base al ruolo e non è necessario l'accesso al piano dati.And conversely, if you want a user to be able to read vault properties and tags, but not have any access to keys, secrets, or certificates, you can grant this user, 'read' access using RBAC and no access to data plane is required.

Controllo di accesso al piano di gestioneManagement plane access control

Il piano di gestione è costituito da operazioni che interessano l'insieme di credenziali delle chiavi.The management plane consists of operations that affect the key vault itself. È ad esempio possibile creare o eliminare un insieme di credenziali,For example, you can create or delete a key vault. ottenere l'elenco degli insiemi di credenziali di una sottoscrizione,You can get a list of vaults in a subscription. recuperare le proprietà dell'insieme (come SKU e tag), nonché impostare i criteri di accesso che controllano le applicazioni e gli utenti autorizzati ad accedere alle chiavi e ai segreti nell'insieme di credenziali delle chiavi.You can retrieve key vault properties (such as SKU, tags) and set key vault access policies that control the users and applications that can access keys and secrets in the key vault. Il controllo di accesso al piano di gestione è basato sul controllo degli accessi in base al ruolo.Management plane access control uses RBAC. Per l'elenco completo delle operazioni relative all'insieme di credenziali delle chiavi che possono essere eseguite tramite il piano di gestione, vedere la tabella nella sezione precedente.See the complete list of key vault operations that can be performed via management plane in the table in preceding section.

Controllo degli accessi in base al ruoloRole-based Access Control (RBAC)

Ogni sottoscrizione di Azure è associata a un'istanza di Azure Active Directory.Each Azure subscription has an Azure Active Directory. A utenti, gruppi e applicazioni di questa directory può essere concesso l'accesso per gestire le risorse della sottoscrizione di Azure che usano il modello di distribuzione Azure Resource Manager.Users, groups, and applications from this directory can be granted access to manage resources in the Azure subscription that use the Azure Resource Manager deployment model. Questo approccio è definito controllo degli accessi in base al ruolo.This type of access control is referred to as Role-Based Access Control (RBAC). Per gestire l'accesso è possibile usare il portale di Azure, gli strumenti dell'interfaccia della riga di comando di Azure, PowerShell o le API REST di Azure Resource Manager.To manage this access, you can use the Azure portal, the Azure CLI tools, PowerShell, or the Azure Resource Manager REST APIs.

Con il modello di Azure Resource Manager si crea l'insieme di credenziali delle chiavi in un gruppo di risorse e si controlla l'accesso al piano di gestione dell'insieme di credenziali delle chiavi usando Azure Active Directory.With the Azure Resource Manager model, you create your key vault in a resource group and control access to the management plane of this key vault by using Azure Active Directory. È ad esempio possibile consentire agli utenti o a un gruppo di gestire gli insiemi di credenziali delle chiavi in un gruppo di risorse specifico.For example, you can grant users or a group ability to manage key vaults in a specific resource group.

È possibile concedere l'accesso a utenti, gruppi e applicazioni in un ambito specifico assegnando i ruoli Controllo degli accessi in base al ruolo appropriati.You can grant access to users, groups and applications at a specific scope by assigning appropriate RBAC roles. Ad esempio, per concedere l'accesso a un utente in modo che possa gestire insiemi di credenziali delle chiavi, si assegna all'utente un ruolo predefinito "key vault Contributor" in un ambito specifico.For example, to grant access to a user to manage key vaults you would assign a predefined role 'key vault Contributor' to this user at a specific scope. In questo caso, l'ambito può essere una sottoscrizione, un gruppo di risorse o semplicemente un insieme di credenziali delle chiavi.The scope in this case would be either a subscription, a resource group, or just a specific key vault. Un ruolo assegnato a livello di sottoscrizione si applica a tutti i gruppi di risorse e a tutte le risorse nell'ambito della sottoscrizione.A role assigned at subscription level applies to all resource groups and resources within that subscription. Un ruolo assegnato a livello di gruppo di risorse si applica a tutte le risorse di tale gruppo.A role assigned at resource group level applies to all resources in that resource group. Un ruolo assegnato per una risorsa specifica si applica solo a tale risorsa.A role assigned for a specific resource only applies to that resource. Esistono diversi ruoli predefiniti (vedere Controllo degli accessi in base al ruolo: ruoli predefiniti) e, se questi non soddisfano specifiche esigenze, è possibile definire anche ruoli personalizzati.There are several predefined roles (see RBAC: Built-in roles), and if the predefined roles do not fit your needs you can also define your own roles.

Importante

Si noti che, se un utente dispone di autorizzazioni di collaboratore (controllo degli accessi in base al ruolo) per un piano di gestione dell'insieme di credenziali delle chiavi, può concedere a se stesso l'accesso al piano dati impostando i criteri di accesso dell'insieme di credenziali delle chiavi, che controllano l'accesso al piano dati.Note that if a user has Contributor permissions (RBAC) to a key vault management plane, she can grant herself access to data plane, by setting key vault access policy, which controls access to data plane. È pertanto consigliabile controllare rigorosamente gli utenti che dispongono dei diritti di accesso di collaboratore all'insieme di credenziali delle chiavi per avere la sicurezza che solo le persone autorizzate possano accedere e gestire insiemi di credenziali delle chiavi, chiavi, segreti e certificati.Therefore, it is recommended to tightly control who has 'Contributor' access to your key vaults to ensure only authorized persons can access and manage your key vaults, keys, secrets, and certificates.

Controllo di accesso al piano datiData plane access control

Il piano dati dell'insieme di credenziali delle chiavi è costituito da operazioni che influiscono sugli oggetti in un insieme di credenziali delle chiavi, ad esempio chiavi, segreti e certificati.The key vault data plane consists of operations that affect the objects in a key vault, such as keys, secrets, and certificates. Sono incluse le operazioni relative alle chiavi, come la creazione, l'importazione, l'aggiornamento, la generazione di un elenco, il backup e il ripristino, le operazioni di crittografia, come la firma, la verifica, la crittografia, la decrittografia, l'esecuzione e la rimozione del wrapping, nonché l'impostazione di tag e altri attributi per le chiavi.This includes key operations such as create, import, update, list, backup, and restore keys, cryptographic operations such as sign, verify, encrypt, decrypt, wrap, and unwrap, and set tags and other attributes for keys. Analogamente, per i segreti sono incluse le operazioni per ottenere, impostare, elencare ed eliminare i segreti.Similarly, for secrets it includes, get, set, list, delete.

L'accesso al piano dati viene concesso impostando criteri di accesso per un insieme di credenziali delle chiavi.Data plane access is granted by setting access policies for a key vault. Per essere in grado di impostare i criteri di accesso per un insieme di credenziali delle chiavi, un utente, un gruppo o un'applicazione deve disporre delle autorizzazioni di collaboratore (controllo degli accessi in base al ruolo) per il piano di gestione relativo a tale insieme.A user, group, or an application must have Contributor permissions (RBAC) for management plane for a key vault to be able to set access policies for that key vault. A un utente, un gruppo o un'applicazione può essere concesso l'accesso per eseguire operazioni specifiche relative a segreti o chiavi in un insieme di credenziali delle chiavi.A user, group, or application can be granted access to perform specific operations for keys or secrets in a key vault. Per un insieme di credenziali delle chiavi sono supportate fino a 16 voci di criteri di accesso.Key vault support up to 16 access policy entries for a key vault. Per concedere a più utenti l'accesso del piano dati a un insieme di credenziali delle chiavi, creare un gruppo di sicurezza di Azure Active Directory e aggiungere utenti a tale gruppo.Create an Azure Active Directory security group and add users to that group to grant data plane access to several users to a key vault.

Criteri di accesso di Key VaultKey vault Access Policies

I criteri di accesso di Key Vault concedono autorizzazioni separate per chiavi, segreti e certificati.Key vault access policies grant permissions to keys, secrets and certificates separately. È ad esempio possibile concedere a un utente l'accesso alle chiavi, ma non le autorizzazioni per i segreti.For example, you can give a user access to only keys, but no permissions for secrets. Tuttavia, le autorizzazioni per accedere a chiavi, segreti o certificati vengono definite a livello di insieme di credenziali.However, permissions to access keys or secrets or certificates are at the vault level. In altre parole, i criteri di accesso dell'insieme di credenziali delle chiavi non supportano le autorizzazioni a livello di oggetto.In other words, key vault access policy does not support object level permissions. Per impostare i criteri di accesso per un insieme di credenziali delle chiavi è possibile usare il portale di Azure, gli strumenti dell'interfaccia dalla riga di comando di Azure, PowerShell o le API REST di gestione dell'insieme di credenziali delle chiavi.You can use Azure portal, the Azure CLI tools, PowerShell, or the key vault Management REST APIs to set access policies for a key vault.

Importante

Si noti che i criteri di accesso dell'insieme di credenziali delle chiavi si applicano a livello di insieme di credenziali.Note that key vault access policies apply at the vault level. Ad esempio, quando a un utente viene concessa l'autorizzazione per creare ed eliminare chiavi, potrà eseguire tali operazioni su tutte le chiavi dell'insieme di credenziali.For example, when a user is granted permission to create and delete keys, she can perform those operations on all keys in that key vault.

EsempioExample

Si supponga di voler sviluppare un'applicazione che usa un certificato per SSL, il servizio Archiviazione di Azure per archiviare i dati e una chiave RSA a 2048 bit per le operazioni di firma.Let's say you are developing an application that uses a certificate for SSL, Azure storage for storing data, and uses an RSA 2048-bit key for sign operations. Si supponga inoltre che tale applicazione venga eseguita in una macchina virtuale (o in un set di scalabilità di macchine virtuali).Let's say this application is running in a VM (or a VM Scale Set). È possibile usare un insieme di credenziali delle chiavi per archiviare tutti i segreti dell'applicazione e anche per archiviare il certificato bootstrap usato dall'applicazione per l'autenticazione con Azure Active Directory.You can use a key vault to store all the application secrets, and use key vault to store the bootstrap certificate that is used by the application to authenticate with Azure Active Directory.

Ecco un riepilogo delle chiavi e dei segreti da archiviare in un insieme di credenziali delle chiavi.So, here's a summary of all the keys and secrets to be stored in a key vault.

  • Certificato SSL: usato per SSL.SSL Cert - used for SSL
  • Chiave di archiviazione: usata per ottenere l'accesso all'account di archiviazione.Storage Key - used to get access to Storage account
  • Chiave RSA a 2048 bit: usata per le operazioni di firma.RSA 2048-bit key - used for sign operations
  • Certificato bootstrap: usato per eseguire l'autenticazione ad Azure Active Directory, per ottenere l'accesso all'insieme di credenziali delle chiavi in modo da recuperare la chiave di archiviazione e usare la chiave RSA per la firma.Bootstrap certificate - used to authenticate to Azure Active Directory, to get access to key vault to fetch the storage key and use the RSA key for signing.

Si considerino ora le persone coinvolte nella gestione, nella distribuzione e nel controllo dell'applicazione.Now let's meet the people who are managing, deploying and auditing this application. In questo esempio verranno usati tre ruoli.We'll use three roles in this example.

  • Team responsabile della sicurezza: si tratta in genere di personale IT con ruoli di responsabilità che si occupa della salvaguardia di segreti, ad esempio i certificati SSL, le chiavi RSA usate per la firma, le stringhe di connessione per i database e le chiavi dell'account di archiviazione.Security team - These are typically IT staff from the 'office of the CSO (Chief Security Officer)' or equivalent, responsible for the proper safekeeping of secrets such as SSL certificates, RSA keys used for signing, connection strings for databases, storage account keys.
  • Sviluppatori/operatori: si tratta di persone che sviluppano l'applicazione e la distribuiscono in Azure.Developers/operators - These are the folks who develop this application and then deploy it in Azure. In genere, non fanno parte del team responsabile della sicurezza e pertanto non dovrebbero disporre dei diritti di accesso ai dati sensibili, come i certificati SSL e le chiavi RSA, a cui però dovrebbe accedere l'applicazione che distribuiscono.Typically, they are not part of the security team, and hence they should not have access to any sensitive data, such as SSL certificates, RSA keys, but the application they deploy should have access to those.
  • Revisori: si tratta in genere di un insieme diverso di persone, distinte dagli sviluppatori e dal personale IT generale,Auditors - This is usually a different set of people, isolated from the developers and general IT staff. che hanno il compito di verificare la correttezza dell'uso e della gestione di certificati, chiavi e così via e garantire la conformità agli standard di sicurezza dei dati.Their responsibility is to review proper use and maintenance of certificates, keys, etc. and ensure compliance with data security standards.

Esiste anche un altro ruolo che non rientra nell'ambito di questa applicazione, ma che è importante menzionare, ossia l'amministratore della sottoscrizione (o del gruppo di risorse).There is one more role that is outside the scope of this application, but relevant here to be mentioned, and that would be the subscription (or resource group) administrator. L'amministratore della sottoscrizione imposta le autorizzazioni di accesso iniziali per il team responsabile della sicurezza.Subscription administrator sets up initial access permissions for the security team. In questo esempio si presuppone che l'amministratore della sottoscrizione abbia concesso al team l'accesso a un gruppo di risorse in cui sono incluse tutte le risorse necessarie per l'applicazione.Here we assume that the subscription administrator has granted access to the security team to a resource group in which all the resources needed for this application reside.

Ora verranno esaminate le azioni eseguite da ogni ruolo nel contesto di questa applicazione.Now let's see what actions each role performs in the context of this application.

  • Team responsabile della sicurezzaSecurity team
    • Creare insiemi di credenziali delle chiaviCreate key vaults
    • Attivare la registrazione degli insiemi di credenziali delle chiaviTurns on key vault logging
    • Aggiungere chiavi o segretiAdd keys/secrets
    • Creare una copia di backup delle chiavi per il ripristino di emergenzaCreate backup of keys for disaster recovery
    • Impostare i criteri di accesso dell'insieme di credenziali delle chiavi per concedere a utenti e applicazioni le autorizzazioni di eseguire operazioni specificheSet key vault access policy to grant permissions to users and applications to perform specific operations
    • Distribuire periodicamente chiavi o segretiPeriodically roll keys/secrets
  • Sviluppatori/operatoriDevelopers/operators
    • Ottenere riferimenti a certificati bootstrap e SSL (identificazioni personali), alla chiave di archiviazione (URI del segreto) e alla chiave di firma (URI della chiave) dal team responsabile della sicurezzaGet references to bootstrap and SSL certs (thumbprints), storage key (secret URI) and signing key (Key URI) from security team
    • Sviluppare e distribuire l'applicazione che accede a chiavi e segreti a livello di codiceDevelop and deploy application that accesses keys and secrets programmatically
  • RevisoriAuditors
    • Esaminare i log di utilizzo per verificare che la chiave o il segreto sia usato correttamente e sia conforme agli standard di sicurezza dei datiReview usage logs to confirm proper key/secret use and compliance with data security standards

Ora verranno esaminate le autorizzazioni di accesso all'insieme di credenziali delle chiavi richieste da ogni ruolo (e dall'applicazione) per eseguire le attività assegnate.Now let's see what access permissions to key vault are needed by each role (and the application) to perform their assigned tasks.

Ruolo utenteUser Role Autorizzazioni del piano di gestioneManagement plane permissions Autorizzazioni del piano datiData plane permissions
Team responsabile della sicurezzaSecurity Team key vault Contributorkey vault Contributor Chiavi: backup, create, delete, get, import, list, restoreKeys: backup, create, delete, get, import, list, restore
Segreti: allSecrets: all
Sviluppatori/operatoriDevelopers/Operator Autorizzazione di distribuzione dell'insieme di credenziali delle chiavi per consentire alle macchine virtuali distribuite di recuperare i segreti da tale insiemekey vault deploy permission so that the VMs they deploy can fetch secrets from the key vault NessunaNone
RevisoriAuditors NessunaNone Chiavi: listKeys: list
Segreti: listSecrets: list
ApplicazioneApplication NessunaNone Chiavi: signKeys: sign
Segreti: getSecrets: get

Nota

I revisori devono disporre dell'autorizzazione list per le chiavi e i segreti in modo da poter esaminare gli attributi di chiavi e segreti che non vengono riportati nei log, come i tag e le date di attivazione e scadenza.Auditors need list permission for keys and secrets so they can inspect attributes for keys and secrets that are not emitted in the logs, such as tags, activation and expiration dates.

Oltre alle autorizzazioni per l'insieme di credenziali delle chiavi, tutti e tre i ruoli devono poter accedere anche ad altre risorse,Besides permission to key vault, all three roles also need access to other resources. ad esempio essere in grado di distribuire macchine virtuali (o app Web e così via). Anche gli sviluppatori/operatori devono disporre dei diritti di accesso di collaboratore a questi tipi di risorse.For example, to be able to deploy VMs (or Web Apps etc.) Developers/Operators also need 'Contributor' access to those resource types. Per i revisori è necessario l'accesso in lettura all'account di archiviazione in cui vengono archiviati i log dell'insieme di credenziali delle chiavi.Auditors need read access to the storage account where the key vault logs are stored.

Poiché l'obiettivo principale di questo articolo è quello di illustrare la protezione dell'accesso all'insieme di credenziali delle chiavi, vengono presentati solo i concetti pertinenti a questo argomento, ignorando i dettagli relativi alla distribuzione di certificati, all'accesso a chiavi e segreti a livello di codice e così via, che sono trattati in altri documenti.Since the focus of this article is securing access to your key vault, we only illustrate the relevant portions pertaining to this topic and skip details regarding deploying certificates, accessing keys and secrets programmatically etc. Those details are already covered elsewhere. La distribuzione dei certificati archiviati nell'insieme di credenziali delle chiavi alle macchine virtuali viene descritta in un post di blog, mentre è disponibile codice di esempio che illustra come usare un certificato bootstrap per autenticarsi ad Azure Active Directory e ottenere l'accesso all'insieme di credenziali delle chiavi.Deploying certificates stored in key vault to VMs is covered in a blog post, and there is sample code available that illustrates how to use bootstrap certificate to authenticate to Azure AD to get access to key vault.

La maggior parte delle autorizzazioni di accesso può essere concessa tramite il portale di Azure, ma per concedere autorizzazioni granulari può essere necessario usare Azure PowerShell (o l'interfaccia della riga di comando di Azure).Most of the access permissions can be granted using Azure portal, but to grant granular permissions you may need to use Azure PowerShell (or Azure CLI) to achieve the desired result.

I frammenti di codice di PowerShell seguenti presuppongono quanto segue:The following PowerShell snippets assume:

  • L'amministratore di Azure Active Directory ha creato gruppi di sicurezza che rappresentano i tre ruoli, ovvero Contoso Security Team, Contoso App Devops e Contoso App Auditors.The Azure Active Directory administrator has created security groups that represent the three roles, namely Contoso Security Team, Contoso App Devops, Contoso App Auditors. L'amministratore ha inoltre aggiunto utenti ai gruppi di appartenenza.The administrator has also added users to the groups they belong.
  • ContosoAppRG è il gruppo in cui si trovano tutte le risorse.ContosoAppRG is the resource group where all the resources reside. contosologstorage è l'area in cui vengono archiviati i log.contosologstorage is where the logs are stored.
  • L'insieme di credenziali delle chiavi ContosoKeyVault e l'account di archiviazione usato per i log dell'insieme di credenziali delle chiavi contosologstorage devono trovarsi nello stesso percorso di Azure.Key vault ContosoKeyVault and storage account used for key vault logs contosologstorage must be in the same Azure location

Innanzitutto l'amministratore della sottoscrizione assegna i ruoli "key vault Contributor" e "User Access Administrator" al team responsabile della sicurezza.First the subscription administrator assigns 'key vault Contributor' and 'User Access Administrator' roles to the security team. In questo modo il team può gestire l'accesso ad altre risorse e gli insiemi di credenziali delle chiavi nel gruppo di risorse ContosoAppRG.This allows the security team to manage access to other resources and manage key vaults in the resource group ContosoAppRG.

New-AzureRmRoleAssignment -ObjectId (Get-AzureRmADGroup -SearchString 'Contoso Security Team')[0].Id -RoleDefinitionName "key vault Contributor" -ResourceGroupName ContosoAppRG
New-AzureRmRoleAssignment -ObjectId (Get-AzureRmADGroup -SearchString 'Contoso Security Team')[0].Id -RoleDefinitionName "User Access Administrator" -ResourceGroupName ContosoAppRG

Lo script seguente illustra come il team responsabile della sicurezza può creare un insieme di credenziali delle chiavi, configurare la registrazione e impostare le autorizzazioni di accesso per altri ruoli e per l'applicazione.The following script illustrates how the security team can create a key vault, setup logging, and set access permissions for other roles and the application.

# Create key vault and enable logging
$sa = Get-AzureRmStorageAccount -ResourceGroup ContosoAppRG -Name contosologstorage
$kv = New-AzureRmKeyVault -VaultName ContosoKeyVault -ResourceGroup ContosoAppRG -SKU premium -Location 'westus' -EnabledForDeployment
Set-AzureRmDiagnosticSetting -ResourceId $kv.ResourceId -StorageAccountId $sa.Id -Enabled $true -Categories AuditEvent

# Data plane permissions for Security team
Set-AzureRmKeyVaultAccessPolicy -VaultName ContosoKeyVault -ObjectId (Get-AzureRmADGroup -SearchString 'Contoso Security Team')[0].Id -PermissionsToKeys backup,create,delete,get,import,list,restore -PermissionsToSecrets all

# Management plane permissions for Dev/ops
# Create a new role from an existing role
$devopsrole = Get-AzureRmRoleDefinition -Name "Virtual Machine Contributor"
$devopsrole.Id = $null
$devopsrole.Name = "Contoso App Devops"
$devopsrole.Description = "Can deploy VMs that need secrets from key vault"
$devopsrole.AssignableScopes = @("/subscriptions/<SUBSCRIPTION-GUID>")

# Add permission for dev/ops so they can deploy VMs that have secrets deployed from key vaults
$devopsrole.Actions.Add("Microsoft.KeyVault/vaults/deploy/action")
New-AzureRmRoleDefinition -Role $devopsrole

# Assign this newly defined role to Dev ops security group
New-AzureRmRoleAssignment -ObjectId (Get-AzureRmADGroup -SearchString 'Contoso App Devops')[0].Id -RoleDefinitionName "Contoso App Devops" -ResourceGroupName ContosoAppRG

# Data plane permissions for Auditors
Set-AzureRmKeyVaultAccessPolicy -VaultName ContosoKeyVault -ObjectId (Get-AzureRmADGroup -SearchString 'Contoso App Auditors')[0].Id -PermissionsToKeys list -PermissionsToSecrets list

Il ruolo personalizzato definito può essere assegnato solo alla sottoscrizione in cui viene creato il gruppo di risorse ContosoAppRG.The custom role defined, is only assignable to the subscription where the ContosoAppRG resource group is created. Se gli stessi ruoli personalizzati verranno usati per altri progetti in altre sottoscrizioni, è possibile che all'ambito siano associate più sottoscrizioni.If the same custom roles will be used for other projects in other subscriptions, it's scope could have more subscriptions added.

L'assegnazione di ruoli personalizzati per l'autorizzazione "deploy/action" di sviluppatori/operatori rientra nell'ambito del gruppo di risorse.The custom role assignment for the developers/operators for the "deploy/action" permission is scoped to the resource group. In questo modo, solo le macchine virtuali create nel gruppo di risorse "ContosoAppRG" otterranno i segreti (certificati SSL e bootstrap).This way only the VMs created in the resource group 'ContosoAppRG' will get the secrets (SSL cert and bootstrap cert). Le macchine virtuali create dal team di sviluppatori/operatori in un altro gruppo di risorse non saranno in grado di ottenere questi segreti, anche se conoscono gli URI dei segreti.Any VMs that a member of dev/ops team creates in other resource group will not be able to get these secrets even if they knew the secret URIs.

Questo esempio illustra uno scenario semplice.This example depicts a simple scenario. Gli scenari reali possono essere più complessi e in alcuni casi può essere necessario modificare le autorizzazioni per l'insieme di credenziali delle chiavi in base alle esigenze.Real life scenarios may be more complex and you may need to adjust permissions to your key vault based on your needs. Ad esempio, in questo caso si presuppone che il team responsabile della sicurezza fornisca i riferimenti a chiavi e segreti (URI e identificazioni personali) richiesti dal team di sviluppatori/operatori per inserire riferimenti nelle proprie applicazioni.For example, in our example, we assume that security team will provide the key and secret references (URIs and thumbprints) that developers/operators team need to reference in their applications. Di conseguenza, non è necessario concedere l'accesso al piano dati al team di sviluppatori/operatori.Hence, they don't need to grant developers/operators any data plane access. Si noti inoltre che questo esempio riguarda principalmente la sicurezza dell'insieme di credenziali delle chiavi.Also, note that this example focuses on securing your key vault. Considerazioni simili sono necessarie anche per proteggere macchine virtuali, account di archiviazione e altre risorse di Azure.Similar consideration should be given to secure your VMs, storage accounts and other Azure resources too.

Nota

Nota: questo esempio mostra come l'accesso all'insieme di credenziali delle chiavi verrà bloccato nell'ambiente di produzione.Note: This example shows how key vault access will be locked down in production. Gli sviluppatori devono quindi avere una sottoscrizione o un gruppo di risorse personale su cui dispongono di autorizzazioni complete per gestire gli insiemi di credenziali delle chiavi, le macchine virtuali e l'account di archiviazione in cui sviluppano l'applicazione.The developers should have their own subscription or resourcegroup where they have full permissions to manage their vaults, VMs and storage account where they develop the application.

RisorseResources

Passaggi successiviNext Steps

Per un'esercitazione introduttiva per gli amministratori, vedere Introduzione all'insieme di credenziali delle chiavi di Azure.For a getting started tutorial for an administrator, see Get Started with Azure key vault.

Per altre informazioni sulla registrazione dell'utilizzo per l'insieme di credenziali delle chiavi, vedere Registrazione dell'insieme di credenziali delle chiavi di Azure.For more information about usage logging for key vault, see Azure key vault Logging.

Per altre informazioni sull'uso di chiavi e segreti con l'insieme di credenziali delle chiavi di Azure, vedere About Keys and Secrets (Informazioni su chiavi e segreti).For more information about using keys and secrets with Azure key vault, see About Keys and Secrets.

In caso di domande sull'insieme di credenziali delle chiavi, visitare i forum di Insieme di credenziali delle chiavi di Azure.If you have questions about key vault, visit the Azure key vault Forums