Partilhar via


Habilitar uma chave gerenciada pelo cliente

Este artigo é a segunda parte de uma série de tutoriais de quatro partes. A primeira parte fornece uma visão geral das chaves gerenciadas pelo cliente, seus recursos e considerações antes de habilitar uma no registro. Este artigo orienta você pelas etapas de habilitação de uma chave gerenciada pelo cliente usando a CLI do Azure, o portal do Azure ou um modelo do Azure Resource Manager.

Pré-requisitos

Habilitar uma chave gerenciada pelo cliente usando a CLI do Azure

Criar um grupo de recursos

Execute o comando az group create para criar um grupo de recursos que armazenará seu cofre de chaves, registro de contêiner 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 gerenciada atribuída pelo usuário para o Registro para que você possa acessar o cofre de chaves:

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

    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 Registro 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. Por conveniência, armazene os valores e principalId em variáveis de id 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 você pode armazenar uma chave gerenciada pelo cliente para criptografia do registro.

  2. Por padrão, o novo cofre de chaves habilita automaticamente a configuração de exclusão suave. Para evitar a perda de dados devido à exclusão acidental de chaves ou cofres de chaves, recomendamos ativar a configuração de proteção contra limpeza:

    az keyvault create --name <key-vault-name> \
      --resource-group <resource-group-name> \
      --enable-purge-protection
    
  3. Por conveniência, anote o 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 serviços confiáveis acessem o cofre de chaves

Se o cofre de chaves estiver protegido por um firewall ou rede virtual (ponto de extremidade privado), você deverá habilitar as configurações de rede para permitir o acesso por serviços confiáveis do Azure. Para obter mais informações, consulte Configurar configurações de rede do Cofre da Chave do Azure.

Habilitar identidades gerenciadas para acessar o cofre de chaves

Há duas maneiras de habilitar identidades gerenciadas para acessar 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 gerenciada atribuída pelo usuário:

  1. Execute o comando az keyvault set policy . Passe o valor da variável de ambiente criado e armazenado anteriormente 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 é usar o RBAC (controle de acesso baseado em função) do Azure para atribuir permissões à identidade gerenciada atribuída pelo usuário e acessar o cofre de chaves. Execute o comando az role assignment create e atribua a Key Vault Crypto Service Encryption User função a uma identidade gerenciada atribuída pelo usuário:

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

Crie uma chave e obtenha 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, anote o 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. Por conveniência, armazene o formato escolhido para o ID de chave na $keyID variável de ambiente. Você pode usar um ID de chave com ou sem uma versão.

Rotação de chaves

Você pode escolher a rotação manual ou automática da chave.

Criptografar um registro com uma chave gerenciada pelo cliente que tenha uma versão de chave permitirá apenas a rotação manual de chaves no Registro de Contêiner do Azure. 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)

Criptografar um registro com uma chave gerenciada pelo cliente omitindo uma versão de chave habilitará a rotação automática de chaves para detetar uma nova versão de chave no Cofre de Chaves do Azure. Este exemplo remove a versão da propriedade da chave kid :

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 registro na camada de serviço Premium e habilitar a chave gerenciada pelo cliente.

  2. Passe os valores de ID de identidade gerenciada (id) e ID de chave (kid) armazenados nas variáveis de ambiente nas etapas 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 status da criptografia do Registro com uma chave gerenciada pelo cliente:

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

Dependendo da chave usada para criptografar o registro, a saída é 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"
}

Habilitar uma chave gerenciada pelo cliente usando o portal do Azure

Criar uma identidade gerida atribuída pelo utilizador

Para criar uma identidade gerenciada atribuída pelo usuário para recursos do Azure no portal do Azure:

  1. Siga as etapas para criar uma identidade atribuída pelo usuário.

  2. Salve o nome da identidade para usá-lo em etapas 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 as etapas em Guia de início rápido: criar um cofre de chaves usando o portal do Azure.

  2. Ao criar um cofre de chaves para uma chave gerenciada pelo cliente, na guia Noções básicas , habilite a configuração Proteção contra limpeza . Essa configuração ajuda a evitar a perda de dados devido à exclusã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 serviços confiáveis acessem o cofre de chaves

Se o cofre de chaves estiver protegido por um firewall ou rede virtual (ponto de extremidade privado), habilite a configuração de rede para permitir o acesso por serviços confiáveis do Azure. Para obter mais informações, consulte Configurar configurações de rede do Cofre da Chave do Azure.

Habilitar identidades gerenciadas para acessar o cofre de chaves

Há duas maneiras de habilitar identidades gerenciadas para acessar 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 gerenciada atribuída pelo usuário:

  1. Aceda ao cofre das chaves.
  2. Selecione Configurações>Políticas > de acesso +Adicionar política de acesso.
  3. Selecione Permissões de chave e, em seguida, selecione Obter, Desembrulhar chave e Chave de encapsulamento.
  4. Em Selecionar entidade de segurança, selecione o nome do recurso da identidade gerenciada atribuída pelo usuário.
  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 gerenciada atribuída pelo usuário no escopo 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 use-a para criptografar o registro. Siga estas etapas se quiser selecionar uma versão de chave específica como uma chave gerenciada pelo cliente. Também pode ser necessário criar uma chave antes de criar o Registro se o acesso ao cofre de chaves estiver restrito a um ponto de extremidade privado ou a redes selecionadas.

  1. Aceda ao cofre das chaves.
  2. Selecione Teclas de configurações>.
  3. Selecione +Gerar/Importar e insira um nome exclusivo para a chave.
  4. Aceite os valores padrão restantes e 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 contentores

  1. Selecione Criar um recurso>Contentores>Container Registry.
  2. No separador Noções básicas, selecione ou crie um grupo de recursos e, em seguida, introduza um nome de registo. Em SKU, selecione Premium.
  3. Na guia Criptografia, para Chave gerenciada pelo cliente, selecione Habilitado.
  4. Em Identidade, selecione a identidade gerenciada que você criou.
  5. Para Criptografia, escolha uma das seguintes opções:
    • Escolha Selecionar no Cofre da Chave e, em seguida, selecione um cofre de chaves e uma chave existentes ou selecione Criar novo. A chave selecionada não tem versão e permite a rotação automática de chaves.
    • Selecione Enter key URI e forneça o identificador de uma chave existente. Você pode fornecer um URI de chave versionada (para uma chave que deve ser girada manualmente) ou um URI de chave sem versão (que permite a rotação automática de chaves). Consulte a seção anterior para conhecer as etapas para criar uma chave.
  6. Selecione Rever + criar.
  7. Selecione Criar para implantar a instância do Registro.

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

Mostrar o estado da encriptação

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

Habilitar uma chave gerenciada pelo cliente usando um modelo do Gerenciador de Recursos

Você pode usar um modelo do Gerenciador de Recursos para criar um registro de contêiner e habilitar a criptografia com uma chave gerenciada pelo cliente:

  1. Copie o seguinte conteúdo de um modelo do Resource Manager para um novo arquivo e salve-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 as etapas nas seções anteriores para criar os seguintes recursos:

    • Cofre de chaves, identificado pelo nome
    • Chave do cofre da chave, identificada pelo ID da chave
  3. Execute o comando az deployment group create para criar o registro usando o arquivo de modelo anterior. Quando indicado, forneça um novo nome do Registro e um nome de identidade gerenciado atribuído pelo usuário, juntamente com o nome do cofre de chaves e o ID da chave que você 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 status da criptografia do registro:

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

Próximos passos

Avance para o próximo artigo para percorrer a rotação de chaves gerenciadas pelo cliente, a atualização de versões de chaves e a revogação de uma chave gerenciada pelo cliente.