Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Este artículo es la segunda parte de una serie de tutoriales de cuatro partes. La primera parte ofrece una introducción a las claves administradas por el cliente, sus características y las consideraciones a tener en cuenta antes de habilitar una en su registro. Este artículo le guía a través de los pasos para habilitar una clave administrada por el cliente mediante la CLI de Azure, el Azure Portal o una plantilla de Azure Resource Manager.
Requisitos previos
- Instale la CLI de Azure o prepárese para usar Azure Cloud Shell
- Inicie sesión en Azure Portal.
Habilite una clave administrada por el cliente mediante la CLI de Azure
Crear un grupo de recursos
Ejecute el comando az group create para crear un grupo de recursos que contenga el almacén de claves, el registro de contenedor y otros recursos necesarios:
az group create --name <resource-group-name> --location <location>
Crear una identidad administrada asignada por el usuario
Configure una identidad administrada asignada por el usuario para el Registro para que pueda acceder a la clave de cifrado:
Ejecute el comando az identity create para crear la identidad administrada:
az identity create \ --resource-group <resource-group-name> \ --name <managed-identity-name>En la salida del comando, anote los valores
idyprincipalIdpara configurar el acceso del registro a la clave:{ "clientId": "00001111-aaaa-2222-bbbb-3333cccc4444", "clientSecretUrl": "https://control-eastus.identity.azure.net/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/myresourcegroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myidentityname/credentials?tid=aaaabbbb-0000-cccc-1111-dddd2222eeee&oid=aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb&aid=00001111-aaaa-2222-bbbb-3333cccc4444", "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/myresourcegroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myresourcegroup", "location": "eastus", "name": "myidentityname", "principalId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "resourceGroup": "myresourcegroup", "tags": {}, "tenantId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "type": "Microsoft.ManagedIdentity/userAssignedIdentities" }Por comodidad, almacena los valores
idyprincipalIden variables de entorno:identityID=$(az identity show --resource-group <resource-group-name> --name <managed-identity-name> --query 'id' --output tsv) identityPrincipalID=$(az identity show --resource-group <resource-group-name> --name <managed-identity-name> --query 'principalId' --output tsv)
Crear y configurar un Key Vault
Ejecute el comando az keyvault create para crear un almacén de claves donde pueda almacenar una clave administrada por el cliente para el cifrado del registro.
De forma predeterminada, el nuevo almacén de claves habilita automáticamente la configuración de eliminación temporal. Para evitar la pérdida de datos por el borrado accidental de claves o almacenes de claves, se recomienda activar el ajuste de protección de purga:
az keyvault create --name <key-vault-name> \ --resource-group <resource-group-name> \ --enable-purge-protectionPara mayor comodidad, tome nota del id. de recurso del almacén de claves y almacene el valor en variables de entorno:
keyvaultID=$(az keyvault show --resource-group <resource-group-name> --name <key-vault-name> --query 'id' --output tsv)
Habilitación de los servicios de confianza para acceder al almacén de claves
Si el almacén de claves está protegido con un firewall o una red virtual (punto de conexión privado), debe habilitar la configuración de red para permitir el acceso mediante servicios de confianza de Azure. Para más información, vea Configurar la configuración de red de Azure Key Vault.
Habilite las identidades administradas para acceder a Key Vault
Hay dos maneras de permitir que las identidades administradas accedan al almacén de claves.
La primera opción es configurar la política de acceso para el almacén de claves y establecer los permisos de las claves para el acceso con una identidad administrada asignada por el usuario:
Ejecute el comando az keyvault set policy. Pase el valor de la variable de entorno previamente creada y almacenada:
principalID.Establezca los permisos de clave en
get,unwrapKeyywrapKey:az keyvault set-policy \ --resource-group <resource-group-name> \ --name <key-vault-name> \ --object-id $identityPrincipalID \ --key-permissions get unwrapKey wrapKey
La segunda opción es usar el control de acceso basado en rol (RBAC) de Azure para asignar permisos a la identidad administrada asignada por el usuario y acceder al almacén de claves. Ejecute el comando az role assignment create y asigne el rol Key Vault Crypto Service Encryption User a una identidad administrada asignada por el usuario:
az role assignment create --assignee $identityPrincipalID \
--role "Key Vault Crypto Service Encryption User" \
--scope $keyvaultID
Creación de una clave en el almacén de claves y obtención del identificador de clave
Ejecute el comando az keyvault key create para crear una clave en el almacén de claves:
az keyvault key create \ --name <key-name> \ --vault-name <key-vault-name>En el resultado del comando, tome nota del identificador de la clave (
kid):[...] "key": { "crv": null, "d": null, "dp": null, "dq": null, "e": "AQAB", "k": null, "keyOps": [ "encrypt", "decrypt", "sign", "verify", "wrapKey", "unwrapKey" ], "kid": "https://mykeyvault.vault.azure.net/keys/mykey/<version>", "kty": "RSA", [...]Para mayor comodidad, guarde el formato que elija para el identificador de la clave en la variable de entorno
$keyID. Puede usar un identificador de clave con o sin versión.
Rotación de claves
Puede elegir la rotación manual o automática de claves.
El cifrado de un registro con una clave administrada por el cliente que tiene una versión de la clave permitirá únicamente la rotación manual de la clave en Azure Container Registry. En este ejemplo se almacena la propiedad kid de la clave:
keyID=$(az keyvault key show \
--name <keyname> \
--vault-name <key-vault-name> \
--query 'key.kid' --output tsv)
Al cifrar un registro con una clave administrada por el cliente mediante la omisión de una versión de clave se habilitará la rotación automática de claves para detectar una nueva versión de clave en Azure Key Vault. En este ejemplo se quita la versión de la propiedad kid de la clave:
keyID=$(az keyvault key show \
--name <keyname> \
--vault-name <key-vault-name> \
--query 'key.kid' --output tsv)
keyID=$(echo $keyID | sed -e "s/\/[^/]*$//")
Creación y configuración de un HSM administrado
Debe aprovisionar y activar un HSM administrado para poder crear claves o asignar roles de plano de datos. Siga inicio rápido: Aprovisionamiento y activación de un HSM administrado mediante el CLI de Azure y, a continuación, vuelva a este artículo.
Si el cortafuegos de HSM administrado está habilitado, configure servicios de confianza u otro acceso de red antes de crear el registro. Para más información, consulte Seguridad de red para Managed HSM.
El usuario que crea la clave de cifrado necesita un rol de HSM administrado que permita la creación de claves, como Managed HSM Crypto User. Para más información, consulte Administración de roles del plano de datos de HSM administrado.
Cree una clave de RSA-HSM que admita la encapsulación de claves:
az keyvault key create \
--hsm-name <managed-hsm-name> \
--name <key-name> \
--kty RSA-HSM \
--ops wrapKey unwrapKey
HSM administrado usa RBAC local en lugar de las directivas de acceso de Key Vault. Asigne el rol Managed HSM Crypto Service Encryption User a la identidad asignada por el usuario. En el ejemplo siguiente se limita la asignación a la clave que usa el Registro:
az keyvault role assignment create \
--hsm-name <managed-hsm-name> \
--role "Managed HSM Crypto Service Encryption User" \
--assignee-object-id $identityPrincipalID \
--assignee-principal-type MSI \
--scope /keys/<key-name>
Almacene el identificador de clave con su versión para la rotación manual:
keyID=$(az keyvault key show \
--hsm-name <managed-hsm-name> \
--name <key-name> \
--query 'key.kid' --output tsv)
Para habilitar la rotación automática de claves, quite la versión del identificador de clave:
keyID=$(echo $keyID | sed -e "s/\/[^/]*$//")
Note
Un URI de clave HSM administrado usa el formato https://<managed-hsm-name>.managedhsm.azure.net/keys/<key-name>/<version>. El sufijo DNS puede variar según la nube de Azure.
Creación de un registro con una clave administrada por el cliente
Ejecute el comando az acr create para crear un registro de contenedor en el nivel de servicio Premium y habilitar la clave administrada por el cliente.
Pase los valores de identificación de la identidad administrada (
id) y de la clave (kid) almacenados en las variables de entorno en los pasos anteriores:az acr create \ --resource-group <resource-group-name> \ --name <container-registry-name> \ --identity $identityID \ --key-encryption-key $keyID \ --sku Premium
Mostrar el estado de cifrado
Ejecute el comando az acr encryption show para mostrar el estado del cifrado del registro con una clave administrada por el cliente:
az acr encryption show --name <container-registry-name>
Según la clave que se use para encriptar el Registro, el resultado es similar a:
{
"keyVaultProperties": {
"identity": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"keyIdentifier": "https://myvault.vault.azure.net/keys/myresourcegroup/abcdefg123456789...",
"keyRotationEnabled": true,
"lastKeyRotationTimestamp": xxxxxxxx
"versionedKeyIdentifier": "https://myvault.vault.azure.net/keys/myresourcegroup/abcdefg123456789...",
},
"status": "enabled"
}
Habilitar una clave administrada por el cliente mediante Azure Portal
Crear una identidad administrada asignada por el usuario
Para crear una identidad administrada para recursos de Azure asignada por el usuario en Azure Portal.
Siga los pasos para crear una identidad asignada por el usuario.
Guarde el nombre de la identidad para usarlo en pasos posteriores.
Crear un Key Vault
Siga los pasos de Inicio rápido: Creación de un almacén de claves mediante Azure Portal.
Al crear un almacén de claves para una clave administrada por el cliente, en la pestaña Datos básicos, habilite el valor Protección de purga. Esta configuración ayuda a evitar la pérdida de datos por la eliminación accidental de claves o almacenes de claves.
Habilitación de los servicios de confianza para acceder al almacén de claves
Si el almacén de claves está protegido con un firewall o una red virtual (punto de conexión privado), habilite la configuración de red para permitir el acceso mediante servicios de confianza de Azure. Para más información, vea Configurar la configuración de red de Azure Key Vault.
Habilite las identidades administradas para acceder a Key Vault
Hay dos maneras de permitir que las identidades administradas accedan al almacén de claves.
La primera opción es configurar la directiva de acceso para el cofre de claves y establecer los permisos de las claves para el acceso con una identidad administrada asignada por el usuario:
- Vaya a su Key Vault.
- Seleccione Configuración>Directivas de acceso > +Agregar directiva de acceso.
- Seleccione Permisos de clave y luego seleccione Obtener, Desajustar clave y Encapsular clave.
- En Seleccionar la entidad de seguridad, seleccione el nombre de recurso de la identidad administrada asignada por el usuario.
- Seleccione Agregar y después seleccione Guardar.
La otra opción es asignar el rol RBAC Key Vault Crypto Service Encryption User a la identidad administrada asignada por el usuario en el ámbito del almacén de claves. Para ver los pasos detallados, vea Asignar roles de Azure mediante Azure Portal.
Creación y configuración de un HSM administrado
- Siga inicio rápido: Aprovisionamiento y activación de un HSM administrado mediante el portal de Azure.
- Asegúrese de que el usuario que crea la clave de cifrado tiene un rol de HSM administrado que permite la creación de claves, como Managed HSM Crypto User.
- En Configuración, seleccione Claves y, a continuación, cree o importe una clave RSA-HSM que admita las operaciones
wrapKeyyunwrapKey. - En Configuración, seleccione RBAC local.
- Agregue la asignación del rol Managed HSM Crypto Service Encryption User para la identidad asignada por el usuario. Para aplicar el principio de privilegio mínimo, asigne el rol en el ámbito de la clave de cifrado. Para más información, consulte Administración de roles del plano de datos de HSM administrado.
- Si el firewall de HSM administrado está habilitado, configure servicios de confianza u otro acceso a la red. Para más información, consulte Seguridad de red para Managed HSM.
Importante
Azure Container Registry no crea ni actualiza las asignaciones de roles de HSM administrado. Configure la asignación de roles antes de crear el Registro o cambiar su clave de cifrado.
Crear una clave en un almacén de claves
Cree una clave en el almacén de claves y úsela para cifrar el registro. Siga estos pasos si desea seleccionar una versión de clave específica como clave administrada por el cliente. También es posible que tenga que crear una clave antes de crear el registro si el acceso al almacén de claves está restringido a un punto de conexión privado o a redes seleccionadas.
- Vaya a su Key Vault.
- Seleccione Configuración> > Claves.
- Seleccione +Generar o importar y escriba un nombre único para la clave.
- Acepte el resto de los valores predeterminados y, a continuación, seleccione Crear.
- Tras la creación, seleccione la clave y, después, la versión actual. Copie el identificador de clave para la versión de la clave.
Crear un registro de contenedores
Seleccione Crear un recurso>Contenedores>Registro de contenedor.
En la pestaña Básico, seleccione o cree un grupo de recursos y, a continuación, escriba un nombre para el registro. En SKU, seleccione Premium.
En la pestaña Cifrado, para Clave administrada por el cliente, seleccione Habilitado.
En Identidad, seleccione la identidad administrada que ha creado.
En Cifrado, elija una de las siguientes opciones:
- Elija Seleccionar desde Key Vault y, a continuación, seleccione una key vault existente o HSM administrado y una clave. Seleccione Crear nuevo para crear un almacén de claves y una clave. La clave que se selecciona no está versionada y permite la rotación automática de la clave.
- Seleccione Introducir URI de clave y proporcione el identificador de una clave de Key Vault o de Managed HSM existente. Puede proporcionar un URI de clave con versión (para una clave que se debe girar manualmente) o un URI de clave sin versión (lo que permite la rotación automática de claves).
Si un firewall de HSM administrado impide que el portal muestre las claves, permita la dirección IP del cliente o seleccione Introducir URI de clave. Permitir los servicios de confianza permite que Azure Container Registry llegue al HSM administrado, pero no permite que un cliente fuera del límite de red configurado use el selector de claves.
Seleccione Revisar + crear.
Seleccione Crear para desplegar la instancia del registro.
Mostrar el estado de cifrado
Para ver el estado de cifrado del registro en el portal, vaya al registro. En Configuración, seleccione Cifrado.
Habilitar una clave administrada por el cliente mediante una plantilla de Resource Manager
Puede usar una plantilla de Resource Manager para crear un registro de contenedor y habilitar el cifrado con una clave administrada por el cliente almacenada en Key Vault o HSM administrado.
Antes de implementar la plantilla, cree la identidad asignada por el usuario y configure su acceso a la clave:
- Para Key Vault, conceda a la identidad los permisos
get,wrapKeyyunwrapKeymediante una directiva de acceso o el rol RBAC de Azure Usuario de cifrado del servicio criptográfico de Key Vault. - Para HSM administrado, asigne a la identidad el rol RBAC local de Managed HSM Crypto Service Encryption User en el ámbito de la clave.
La plantilla declara la identidad existente para que el registro pueda depender de ella. Implemente la plantilla en el mismo grupo de recursos que la identidad.
Copie el siguiente contenido de una plantilla del Resource Manager en un nuevo archivo y guárdelo como CMKtemplate.json:
{ "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "parameters": { "registry_name": { "type": "String" }, "identity_name": { "type": "String" }, "kek_id": { "type": "String" } }, "resources": [ { "type": "Microsoft.ContainerRegistry/registries", "apiVersion": "2019-12-01-preview", "name": "[parameters('registry_name')]", "location": "[resourceGroup().location]", "sku": { "name": "Premium", "tier": "Premium" }, "identity": { "type": "UserAssigned", "userAssignedIdentities": { "[resourceID('Microsoft.ManagedIdentity/userAssignedIdentities', parameters('identity_name'))]": {} } }, "dependsOn": [ "[resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', parameters('identity_name'))]" ], "properties": { "adminUserEnabled": false, "encryption": { "status": "enabled", "keyVaultProperties": { "identity": "[reference(resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', parameters('identity_name')), '2018-11-30').clientId]", "keyIdentifier": "[parameters('kek_id')]" } }, "networkRuleSet": { "defaultAction": "Allow", "virtualNetworkRules": [], "ipRules": [] }, "policies": { "quarantinePolicy": { "status": "disabled" }, "trustPolicy": { "type": "Notary", "status": "disabled" }, "retentionPolicy": { "days": 7, "status": "disabled" } } } }, { "type": "Microsoft.ManagedIdentity/userAssignedIdentities", "apiVersion": "2018-11-30", "name": "[parameters('identity_name')]", "location": "[resourceGroup().location]" } ] }Siga los pasos de las secciones anteriores para crear los siguientes recursos:
- Identidad administrada asignada por el usuario, identificada por nombre
- Key Vault o clave de Managed HSM, identificada por identificador de clave
- Permisos de Key Vault requeridos o asignación de roles de RBAC local de HSM administrado
Ejecute el comando az deployment group create para crear el registro con el archivo de plantilla anterior. Proporcione un nuevo nombre del Registro, el nombre de identidad administrada asignada por el usuario existente y el identificador de clave que creó.
az deployment group create \ --resource-group <resource-group-name> \ --template-file CMKtemplate.json \ --parameters \ registry_name=<registry-name> \ identity_name=<managed-identity> \ kek_id=<key-id>Ejecute el comando az acr encryption show para que muestre el estado de cifrado del registro:
az acr encryption show --name <registry-name>
Siguientes pasos
Pase al siguiente artículo para ver cómo rotar las claves administradas por el cliente, actualizar las versiones de clave y revocar una clave administrada por el cliente.