Aktivera en kundhanterad nyckel
Den här artikeln är del två i en självstudieserie i fyra delar. Del ett innehåller en översikt över kundhanterade nycklar, deras funktioner och överväganden innan du aktiverar en i registret. Den här artikeln beskriver hur du aktiverar en kundhanterad nyckel med hjälp av Azure CLI, Azure Portal eller en Azure Resource Manager-mall.
Förutsättningar
- Installera Azure CLI eller förbered för att använda Azure Cloud Shell.
- Logga in på Azure-portalen.
Aktivera en kundhanterad nyckel med hjälp av Azure CLI
Skapa en resursgrupp
Kör kommandot az group create för att skapa en resursgrupp som ska innehålla ditt nyckelvalv, containerregister och andra nödvändiga resurser:
az group create --name <resource-group-name> --location <location>
Skapa en användartilldelad hanterad identitet
Konfigurera en användartilldelad hanterad identitet för registret så att du kan komma åt nyckelvalvet:
Kör kommandot az identity create för att skapa den hanterade identiteten:
az identity create \ --resource-group <resource-group-name> \ --name <managed-identity-name>
Anteckna värdena och
principalId
i kommandoutdataid
för att konfigurera registeråtkomst med nyckelvalvet:{ "clientId": "xxxx2bac-xxxx-xxxx-xxxx-192cxxxx6273", "clientSecretUrl": "https://control-eastus.identity.azure.net/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcegroups/myresourcegroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myidentityname/credentials?tid=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx&oid=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx&aid=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/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" }
För enkelhetens
id
skull lagrar du värdena ochprincipalId
i miljövariabler: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)
Skapa ett nyckelvalv
Kör kommandot az keyvault create för att skapa ett nyckelvalv där du kan lagra en kundhanterad nyckel för registerkryptering.
Som standard aktiverar det nya nyckelvalvet automatiskt inställningen mjuk borttagning . För att förhindra dataförlust från oavsiktlig borttagning av nycklar eller nyckelvalv rekommenderar vi att du aktiverar rensningsskyddsinställningen:
az keyvault create --name <key-vault-name> \ --resource-group <resource-group-name> \ --enable-purge-protection
För enkelhetens skull bör du anteckna nyckelvalvets resurs-ID och lagra värdet i miljövariabler:
keyvaultID=$(az keyvault show --resource-group <resource-group-name> --name <key-vault-name> --query 'id' --output tsv)
Aktivera betrodda tjänster för åtkomst till nyckelvalvet
Om nyckelvalvet är i skydd med en brandvägg eller ett virtuellt nätverk (privat slutpunkt) måste du aktivera nätverksinställningarna för att tillåta åtkomst med betrodda Azure-tjänster. Mer information finns i Konfigurera nätverksinställningar för Azure Key Vault.
Aktivera hanterade identiteter för åtkomst till nyckelvalvet
Det finns två sätt att aktivera hanterade identiteter för åtkomst till ditt nyckelvalv.
Det första alternativet är att konfigurera åtkomstprincipen för nyckelvalvet och ange nyckelbehörigheter för åtkomst med en användartilldelad hanterad identitet:
Kör kommandot az keyvault set policy. Skicka det tidigare skapade och lagrade miljövariabelvärdet för
principalID
.Ange nyckelbehörigheter till
get
,unwrapKey
ochwrapKey
:az keyvault set-policy \ --resource-group <resource-group-name> \ --name <key-vault-name> \ --object-id $identityPrincipalID \ --key-permissions get unwrapKey wrapKey
Det andra alternativet är att använda rollbaserad åtkomstkontroll i Azure (RBAC) för att tilldela behörigheter till den användartilldelade hanterade identiteten och få åtkomst till nyckelvalvet. Kör kommandot az role assignment create och tilldela Key Vault Crypto Service Encryption User
rollen till en användartilldelad hanterad identitet:
az role assignment create --assignee $identityPrincipalID \
--role "Key Vault Crypto Service Encryption User" \
--scope $keyvaultID
Skapa en nyckel och hämta nyckel-ID:t
Kör kommandot az keyvault key create för att skapa en nyckel i nyckelvalvet:
az keyvault key create \ --name <key-name> \ --vault-name <key-vault-name>
Anteckna nyckel-ID:t (
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", [...]
För enkelhetens skull lagrar du det format som du väljer för nyckel-ID:t i
$keyID
miljövariabeln. Du kan använda ett nyckel-ID med eller utan version.
Nyckelrotation
Du kan välja manuell eller automatisk nyckelrotation.
Om du krypterar ett register med en kundhanterad nyckel som har en nyckelversion tillåts endast manuell nyckelrotation i Azure Container Registry. I det här exemplet lagras nyckelns kid
egenskap:
keyID=$(az keyvault key show \
--name <keyname> \
--vault-name <key-vault-name> \
--query 'key.kid' --output tsv)
Om du krypterar ett register med en kundhanterad nyckel genom att utelämna en nyckelversion aktiveras automatisk nyckelrotation för att identifiera en ny nyckelversion i Azure Key Vault. Det här exemplet tar bort versionen från nyckelns kid
egenskap:
keyID=$(az keyvault key show \
--name <keyname> \
--vault-name <key-vault-name> \
--query 'key.kid' --output tsv)
keyID=$(echo $keyID | sed -e "s/\/[^/]*$//")
Skapa ett register med en kundhanterad nyckel
Kör kommandot az acr create för att skapa ett register på Premium-tjänstnivån och aktivera den kundhanterade nyckeln.
Skicka värdena för hanterat identitets-ID (
id
) och nyckel-ID (kid
) som lagras i miljövariablerna i föregående steg:az acr create \ --resource-group <resource-group-name> \ --name <container-registry-name> \ --identity $identityID \ --key-encryption-key $keyID \ --sku Premium
Visa krypteringsstatus
Kör kommandot az acr encryption show för att visa status för registerkryptering med en kundhanterad nyckel:
az acr encryption show --name <container-registry-name>
Beroende på vilken nyckel som används för att kryptera registret liknar utdata:
{
"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"
}
Aktivera en kundhanterad nyckel med hjälp av Azure Portal
Skapa en användartilldelad hanterad identitet
Så här skapar du en användartilldelad hanterad identitet för Azure-resurser i Azure Portal:
Följ stegen för att skapa en användartilldelad identitet.
Spara identitetens namn om du vill använda det i senare steg.
Skapa ett nyckelvalv
Följ stegen i Snabbstart: Skapa ett nyckelvalv med hjälp av Azure Portal.
När du skapar ett nyckelvalv för en kundhanterad nyckel aktiverar du inställningen Rensa skydd på fliken Grundläggande. Den här inställningen hjälper till att förhindra dataförlust från oavsiktlig borttagning av nycklar eller nyckelvalv.
Aktivera betrodda tjänster för åtkomst till nyckelvalvet
Om nyckelvalvet är i skydd med en brandvägg eller ett virtuellt nätverk (privat slutpunkt) aktiverar du nätverksinställningen för att tillåta åtkomst med betrodda Azure-tjänster. Mer information finns i Konfigurera nätverksinställningar för Azure Key Vault.
Aktivera hanterade identiteter för åtkomst till nyckelvalvet
Det finns två sätt att aktivera hanterade identiteter för åtkomst till ditt nyckelvalv.
Det första alternativet är att konfigurera åtkomstprincipen för nyckelvalvet och ange nyckelbehörigheter för åtkomst med en användartilldelad hanterad identitet:
- Gå till ditt nyckelvalv.
- Välj Inställningar>Åtkomstprinciper > +Lägg till åtkomstprincip.
- Välj Nyckelbehörigheter och välj sedan Hämta, Packa upp nyckel och Radbryt nyckel.
- I Välj huvudnamn väljer du resursnamnet för din användartilldelade hanterade identitet.
- Välj Lägg tilloch välj sedan Spara.
Det andra alternativet är att tilldela Key Vault Crypto Service Encryption User
RBAC-rollen till den användartilldelade hanterade identiteten i key vault-omfånget. Läs mer om att tilldela roller i Tilldela Azure-roller via Azure Portal.
Skapa en nyckel
Skapa en nyckel i nyckelvalvet och använd den för att kryptera registret. Följ de här stegen om du vill välja en specifik nyckelversion som en kundhanterad nyckel. Du kan också behöva skapa en nyckel innan du skapar registret om åtkomsten till nyckelvalvet är begränsad till en privat slutpunkt eller valda nätverk.
- Gå till ditt nyckelvalv.
- Välj Inställningar>Nycklar.
- Välj +Generera/importera och ange ett unikt namn för nyckeln.
- Acceptera de återstående standardvärdena och välj sedan Skapa.
- När du har skapat den väljer du nyckeln och väljer sedan den aktuella versionen. Kopiera nyckelidentifieraren för nyckelversionen.
Skapa ett containerregister
- Välj Skapa en resurs>Containers>Container Registry.
- På fliken Grundläggande väljer eller skapar du en resursgrupp och anger sedan ett registernamn. I SKU väljer du Premium.
- På fliken Kryptering väljer du Aktiverad för Kundhanterad nyckel.
- För Identitet väljer du den hanterade identitet som du skapade.
- För Kryptering väljer du något av följande alternativ:
- Välj Välj från Key Vault och välj sedan ett befintligt nyckelvalv och nyckel eller välj Skapa ny. Nyckeln som du väljer är oversionerad och aktiverar automatisk nyckelrotation.
- Välj Ange nyckel-URI och ange identifieraren för en befintlig nyckel. Du kan ange antingen en versionsnyckel-URI (för en nyckel som måste roteras manuellt) eller en oversionerad nyckel-URI (som möjliggör automatisk nyckelrotation). I föregående avsnitt finns steg för att skapa en nyckel.
- Välj Granska + skapa.
- Välj Skapa för att distribuera registerinstansen.
Visa krypteringsstatus
Om du vill se krypteringsstatusen för registret i portalen går du till registret. Under Inställningar väljer du Kryptering.
Aktivera en kundhanterad nyckel med hjälp av en Resource Manager-mall
Du kan använda en Resource Manager-mall för att skapa ett containerregister och aktivera kryptering med en kundhanterad nyckel:
Kopiera följande innehåll i en Resource Manager-mall till en ny fil och spara det som CMKtemplate.json:
{ "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "parameters": { "vault_name": { "defaultValue": "", "type": "String" }, "registry_name": { "defaultValue": "", "type": "String" }, "identity_name": { "defaultValue": "", "type": "String" }, "kek_id": { "type": "String" } }, "variables": {}, "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.KeyVault/vaults/accessPolicies", "apiVersion": "2018-02-14", "name": "[concat(parameters('vault_name'), '/add')]", "dependsOn": [ "[resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', parameters('identity_name'))]" ], "properties": { "accessPolicies": [ { "tenantId": "[subscription().tenantId]", "objectId": "[reference(resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', parameters('identity_name')), '2018-11-30').principalId]", "permissions": { "keys": [ "get", "unwrapKey", "wrapKey" ] } } ] } }, { "type": "Microsoft.ManagedIdentity/userAssignedIdentities", "apiVersion": "2018-11-30", "name": "[parameters('identity_name')]", "location": "[resourceGroup().location]" } ] }
Följ stegen i föregående avsnitt för att skapa följande resurser:
- Nyckelvalv, identifierat med namn
- Nyckelvalvsnyckel identifierad med nyckel-ID
Kör kommandot az deployment group create för att skapa registret med hjälp av föregående mallfil. Ange ett nytt registernamn och ett användartilldelat hanterat identitetsnamn, tillsammans med nyckelvalvets namn och nyckel-ID som du skapade.
az deployment group create \ --resource-group <resource-group-name> \ --template-file CMKtemplate.json \ --parameters \ registry_name=<registry-name> \ identity_name=<managed-identity> \ vault_name=<key-vault-name> \ key_id=<key-vault-key-id>
Kör kommandot az acr encryption show för att visa status för registerkryptering:
az acr encryption show --name <registry-name>
Nästa steg
Gå vidare till nästa artikel för att gå igenom roterande kundhanterade nycklar, uppdatera nyckelversioner och återkalla en kundhanterad nyckel.