Share via


Ativar uma chave gerida pelo cliente

Este artigo é a segunda parte de uma série de tutoriais de quatro partes. A primeira parte fornece uma descrição geral das chaves geridas pelo cliente, das respetivas funcionalidades e considerações antes de ativar uma no seu registo. Este artigo explica-lhe os passos para ativar uma chave gerida pelo cliente com a CLI do Azure, o portal do Azure ou um modelo de Resource Manager do Azure.

Pré-requisitos

Ativar uma chave gerida pelo cliente com a CLI do Azure

Criar um grupo de recursos

Execute o comando az group create para criar um grupo de recursos que irá conter o cofre de chaves, o registo de contentor e outros recursos necessários:

az group create --name <resource-group-name> --location <location>

Criar uma identidade gerida atribuída pelo utilizador

Configure uma identidade gerida atribuída pelo utilizador para o registo para que possa aceder ao cofre de chaves:

  1. Execute o comando az identity create para criar a identidade gerida:

    az identity create \
      --resource-group <resource-group-name> \
      --name <managed-identity-name>
    
  2. Na saída do comando, tome nota dos valores e principalId para configurar o id acesso ao registo com o cofre de chaves:

    {
      "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"
    }
    
  3. Para sua comodidade, armazene os id valores e principalId em variáveis de ambiente:

    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)
    

Criar um cofre de chaves

  1. Execute o comando az keyvault create para criar um cofre de chaves onde pode armazenar uma chave gerida pelo cliente para encriptação de registo.

  2. Por predefinição, o novo cofre de chaves ativa automaticamente a definição de eliminação recuperável . Para evitar a perda de dados de eliminação acidental de chaves ou cofres de chaves, recomendamos que ative a definição de proteção contra remoção :

    az keyvault create --name <key-vault-name> \
      --resource-group <resource-group-name> \
      --enable-purge-protection
    
  3. Para sua comodidade, tome nota do ID de recurso do cofre de chaves e armazene o valor em variáveis de ambiente:

    keyvaultID=$(az keyvault show --resource-group <resource-group-name> --name <key-vault-name> --query 'id' --output tsv)
    

Permitir que os serviços fidedignos acedam ao cofre de chaves

Se o cofre de chaves estiver protegido com uma firewall ou rede virtual (ponto final privado), tem de ativar as definições de rede para permitir o acesso por serviços fidedignos do Azure. Para obter mais informações, veja Configurar as definições de rede do Azure Key Vault.

Ativar identidades geridas para aceder ao cofre de chaves

Existem duas formas de permitir que as identidades geridas acedam ao seu cofre de chaves.

A primeira opção é configurar a política de acesso para o cofre de chaves e definir permissões de chave para acesso com uma identidade gerida atribuída pelo utilizador:

  1. Execute o comando az keyvault set policy . Transmita o valor da variável de ambiente anteriormente criado e armazenado de principalID.

  2. Defina as permissões de chave como get, unwrapKeye wrapKey:

    az keyvault set-policy \
      --resource-group <resource-group-name> \
      --name <key-vault-name> \
      --object-id $identityPrincipalID \
      --key-permissions get unwrapKey wrapKey
    
    

A segunda opção é utilizar o controlo de acesso baseado em funções (RBAC) do Azure para atribuir permissões à identidade gerida atribuída pelo utilizador e aceder ao cofre de chaves. Execute o comando az role assignment create e atribua a Key Vault Crypto Service Encryption User função a uma identidade gerida atribuída pelo utilizador:

az role assignment create --assignee $identityPrincipalID \
  --role "Key Vault Crypto Service Encryption User" \
  --scope $keyvaultID

Criar uma chave e obter o ID da chave

  1. Execute o comando az keyvault key create para criar uma chave no cofre de chaves:

    az keyvault key create \
      --name <key-name> \
      --vault-name <key-vault-name>
    
  2. Na saída do comando, tome nota do ID da chave (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",
    [...]
    
  3. Para sua comodidade, armazene o formato que escolher para o ID da chave na variável de $keyID ambiente. Pode utilizar um ID de chave com ou sem uma versão.

Rotação de chaves

Pode escolher a rotação manual ou automática de chaves.

Encriptar um registo com uma chave gerida pelo cliente que tenha uma versão de chave só permitirá a rotação manual de chaves no Azure Container Registry. Este exemplo armazena a propriedade da kid chave:

keyID=$(az keyvault key show \
  --name <keyname> \
  --vault-name <key-vault-name> \
  --query 'key.kid' --output tsv)

Encriptar um registo com uma chave gerida pelo cliente ao omitir uma versão de chave permitirá a rotação automática de chaves para detetar uma nova versão de chave no Azure Key Vault. Este exemplo remove a versão da propriedade da kid chave:

keyID=$(az keyvault key show \
  --name <keyname> \
  --vault-name <key-vault-name> \
  --query 'key.kid' --output tsv)

keyID=$(echo $keyID | sed -e "s/\/[^/]*$//")

Criar um registo com uma chave gerida pelo cliente

  1. Execute o comando az acr create para criar um registo no escalão de serviço Premium e ativar a chave gerida pelo cliente.

  2. Transmita os valores do ID de identidade gerida (id) e do ID de chave (kid) armazenados nas variáveis de ambiente nos passos anteriores:

    az acr create \
      --resource-group <resource-group-name> \
      --name <container-registry-name> \
      --identity $identityID \
      --key-encryption-key $keyID \
      --sku Premium
    

Mostrar estado de encriptação

Execute o comando az acr encryption show para mostrar o estado da encriptação do registo com uma chave gerida pelo cliente:

az acr encryption show --name <container-registry-name>

Consoante a chave utilizada para encriptar o registo, o resultado é semelhante 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"
}

Ativar uma chave gerida pelo cliente com o portal do Azure

Criar uma identidade gerida atribuída pelo utilizador

Para criar uma identidade gerida atribuída pelo utilizador para recursos do Azure no portal do Azure:

  1. Siga os passos para criar uma identidade atribuída pelo utilizador.

  2. Guarde o nome da identidade para utilizá-la em passos posteriores.

Captura de ecrã das opções para criar uma identidade atribuída pelo utilizador no portal do Azure.

Criar um cofre de chaves

  1. Siga os passos em Início Rápido: Criar um cofre de chaves com o portal do Azure.

  2. Quando estiver a criar um cofre de chaves para uma chave gerida pelo cliente, no separador Noções básicas , ative a definição Remover proteção . Esta definição ajuda a evitar a perda de dados de eliminação acidental de chaves ou cofres de chaves.

    Captura de ecrã das opções para criar um cofre de chaves no portal do Azure.

Permitir que os serviços fidedignos acedam ao cofre de chaves

Se o cofre de chaves estiver protegido com uma firewall ou rede virtual (ponto final privado), ative a definição de rede para permitir o acesso por serviços fidedignos do Azure. Para obter mais informações, veja Configurar as definições de rede do Azure Key Vault.

Ativar identidades geridas para aceder ao cofre de chaves

Existem duas formas de permitir que as identidades geridas acedam ao seu cofre de chaves.

A primeira opção é configurar a política de acesso para o cofre de chaves e definir permissões de chave para acesso com uma identidade gerida atribuída pelo utilizador:

  1. Aceda ao cofre de chaves.
  2. Selecione Definições Políticas>> de acesso +Adicionar Política de Acesso.
  3. Selecione Permissões de chave e, em seguida, selecione Obter, Desembrulhar Chave e Moldar Chave.
  4. Em Selecionar principal, selecione o nome do recurso da identidade gerida atribuída pelo utilizador.
  5. Selecione Adicionar e, em seguida, selecione Guardar.

Captura de ecrã das opções para criar uma política de acesso ao cofre de chaves.

A outra opção é atribuir a Key Vault Crypto Service Encryption User função RBAC à identidade gerida atribuída pelo utilizador no âmbito do cofre de chaves. Para obter os passos detalhados, veja o artigo Atribuir funções do Azure com o portal do Azure.

Criar uma chave

Crie uma chave no cofre de chaves e utilize-a para encriptar o registo. Siga estes passos se quiser selecionar uma versão de chave específica como uma chave gerida pelo cliente. Também poderá ter de criar uma chave antes de criar o registo se o acesso ao cofre de chaves estiver restrito a um ponto final privado ou a redes selecionadas.

  1. Aceda ao cofre de chaves.
  2. Selecione Chaves de Definições>.
  3. Selecione +Gerar/Importar e introduza um nome exclusivo para a chave.
  4. Aceite os restantes valores predefinidos e, em seguida, selecione Criar.
  5. Após a criação, selecione a chave e, em seguida, selecione a versão atual. Copie o Identificador de chave para a versão da chave.

Criar um registo de contentor

  1. Selecione Criar um recurso>Containers>Container Registry.
  2. No separador Informações Básicas , selecione ou crie um grupo de recursos e, em seguida, introduza um nome de registo. No SKU, selecione Premium.
  3. No separador Encriptação , para Chave gerida pelo cliente, selecione Ativado.
  4. Em Identidade, selecione a identidade gerida que criou.
  5. Em Encriptação, escolha uma das seguintes opções:
    • Selecione Selecionar de Key Vault e, em seguida, selecione um cofre de chaves e uma chave existentes ou selecione Criar novo. A chave que selecionar não é aversão e ativa a rotação automática de chaves.
    • Selecione Introduzir URI da chave e forneça o identificador de uma chave existente. Pode fornecer um URI de chave com versão (para uma chave que tem de ser rodada manualmente) ou um URI de chave nãoversionado (que permite a rotação automática de chaves). Consulte a secção anterior para obter os passos para criar uma chave.
  6. Selecione Rever + criar.
  7. Selecione Criar para implementar a instância de registo.

Captura de ecrã que mostra as opções para criar um registo encriptado no portal do Azure.

Mostrar o estado de encriptação

Para ver o estado de encriptação do seu registo no portal, aceda ao seu registo. Em Definições, selecione Encriptação.

Ativar uma chave gerida pelo cliente com um modelo de Resource Manager

Pode utilizar um modelo de Resource Manager para criar um registo de contentor e ativar a encriptação com uma chave gerida pelo cliente:

  1. Copie o seguinte conteúdo de um modelo de Resource Manager para um novo ficheiro e guarde-o como 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]"
        }
      ]
    }
    
  2. Siga os passos nas secções anteriores para criar os seguintes recursos:

    • Cofre de chaves, identificado pelo nome
    • Chave do cofre de chaves, identificada pelo ID da chave
  3. Execute o comando az deployment group create para criar o registo com o ficheiro de modelo anterior. Quando indicado, forneça um novo nome de registo e um nome de identidade gerida atribuído pelo utilizador, juntamente com o nome do cofre de chaves e o ID da chave que criou.

    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>
    
  4. Execute o comando az acr encryption show para mostrar o estado da encriptação do registo:

    az acr encryption show --name <registry-name>
    

Passos seguintes

Avance para o artigo seguinte para percorrer a rotação de chaves geridas pelo cliente, a atualização de versões de chaves e a revogação de uma chave gerida pelo cliente.