Mengaktifkan kunci yang dikelola pelanggan

Artikel ini adalah bagian kedua dalam seri tutorial yang terdiri dari empat bagian. Bagian pertama memberikan gambaran umum tentang kunci yang dikelola pelanggan, fitur, dan pertimbangannya sebelum Anda mengaktifkannya di registri Anda. Artikel ini memandu Anda melalui langkah-langkah mengaktifkan kunci yang dikelola pelanggan dengan menggunakan Azure CLI, portal Azure, atau templat Azure Resource Manager.

Prasyarat

Mengaktifkan kunci yang dikelola pelanggan dengan menggunakan Azure CLI

Membuat grup sumber daya

Jalankan perintah az group create untuk membuat grup sumber daya yang akan menyimpan brankas kunci, registri kontainer, dan sumber daya lain yang diperlukan:

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

Membuat identitas terkelola yang ditetapkan pengguna

Konfigurasikan identitas terkelola yang ditetapkan pengguna untuk registri sehingga Anda dapat mengakses brankas kunci:

  1. Jalankan perintah az identity create untuk membuat identitas terkelola:

    az identity create \
      --resource-group <resource-group-name> \
      --name <managed-identity-name>
    
  2. Dalam output perintah, perhatikan id nilai dan principalId untuk mengonfigurasi akses registri dengan brankas kunci:

    {
      "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. Untuk kenyamanan, simpan id nilai dan principalId dalam variabel lingkungan:

    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)
    

Membuat brankas kunci

  1. Jalankan perintah az keyvault create untuk membuat brankas kunci tempat Anda dapat menyimpan kunci yang dikelola pelanggan untuk enkripsi registri.

  2. Secara default, brankas kunci baru secara otomatis mengaktifkan pengaturan penghapusan sementara . Untuk mencegah kehilangan data dari penghapusan kunci atau brankas kunci yang tidak disengaja, sebaiknya aktifkan pengaturan perlindungan penghapusan menyeluruh :

    az keyvault create --name <key-vault-name> \
      --resource-group <resource-group-name> \
      --enable-purge-protection
    
  3. Untuk kenyamanan, catat ID sumber daya brankas kunci dan simpan nilai dalam variabel lingkungan:

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

Mengaktifkan layanan tepercaya untuk mengakses brankas kunci

Jika brankas kunci dilindungi dengan firewall atau jaringan virtual (titik akhir privat), Anda harus mengaktifkan pengaturan jaringan untuk mengizinkan akses oleh layanan Azure tepercaya. Untuk informasi selengkapnya, lihat Mengonfigurasi pengaturan jaringan Azure Key Vault.

Mengaktifkan identitas terkelola untuk mengakses brankas kunci

Ada dua cara untuk mengaktifkan identitas terkelola untuk mengakses brankas kunci Anda.

Opsi pertama adalah mengonfigurasi kebijakan akses untuk brankas kunci dan mengatur izin kunci untuk akses dengan identitas terkelola yang ditetapkan pengguna:

  1. Jalankan perintah az keyvault set policy . Berikan nilai variabel lingkungan yang dibuat sebelumnya dan disimpan dari principalID.

  2. Atur izin kunci ke get, unwrapKey, dan wrapKey:

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

Opsi kedua adalah menggunakan kontrol akses berbasis peran Azure (RBAC) untuk menetapkan izin ke identitas terkelola yang ditetapkan pengguna dan mengakses brankas kunci. Jalankan perintah az role assignment create dan tetapkan Key Vault Crypto Service Encryption User peran ke identitas terkelola yang ditetapkan pengguna:

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

Membuat kunci dan mendapatkan ID kunci

  1. Jalankan perintah az keyvault key create untuk membuat kunci di brankas kunci:

    az keyvault key create \
      --name <key-name> \
      --vault-name <key-vault-name>
    
  2. Dalam output perintah, perhatikan ID kunci (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. Untuk kenyamanan, simpan format yang Anda pilih untuk ID kunci dalam $keyID variabel lingkungan. Anda dapat menggunakan ID kunci dengan atau tanpa versi.

Rotasi kunci

Anda dapat memilih rotasi kunci manual atau otomatis.

Mengenkripsi registri dengan kunci yang dikelola pelanggan yang memiliki versi kunci hanya akan memungkinkan rotasi kunci manual di Azure Container Registry. Contoh ini menyimpan properti kid kunci:

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

Mengenkripsi registri dengan kunci yang dikelola pelanggan dengan menghilangkan versi kunci akan mengaktifkan pemutaran kunci otomatis yang dapat mendeteksi versi kunci baru di Azure Key Vault. Contoh ini menghapus versi dari properti kid kunci:

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

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

Membuat registri dengan kunci yang dikelola pelanggan

  1. Jalankan perintah az acr create untuk membuat registri di tingkat layanan Premium dan aktifkan kunci yang dikelola pelanggan.

  2. Berikan nilai ID identitas terkelola (id) dan ID kunci (kid) yang disimpan dalam variabel lingkungan di langkah-langkah sebelumnya:

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

Tampilkan status enkripsi

Jalankan perintah az acr encryption show untuk menampilkan status enkripsi registri dengan kunci yang dikelola pelanggan:

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

Bergantung pada kunci yang digunakan untuk mengenkripsi registri, outputnya mirip dengan:

{
  "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"
}

Mengaktifkan kunci yang dikelola pelanggan dengan menggunakan portal Azure

Membuat identitas terkelola yang ditetapkan pengguna

Untuk membuat identitas terkelola yang ditetapkan pengguna untuk sumber daya Azure di portal Azure:

  1. Ikuti langkah-langkah untuk membuat identitas yang ditetapkan pengguna.

  2. Simpan nama identitas untuk menggunakannya di langkah-langkah selanjutnya.

Cuplikan layar opsi untuk membuat identitas yang ditetapkan pengguna di portal Azure.

Membuat brankas kunci

  1. Ikuti langkah-langkah di Mulai Cepat: Membuat brankas kunci menggunakan portal Azure.

  2. Saat Anda membuat brankas kunci untuk kunci yang dikelola pelanggan, pada tab Dasar , aktifkan pengaturan Perlindungan penghapusan menyeluruh . Pengaturan ini membantu mencegah kehilangan data dari penghapusan kunci atau brankas kunci yang tidak disengaja.

    Cuplikan layar opsi untuk membuat brankas kunci di portal Azure.

Mengaktifkan layanan tepercaya untuk mengakses brankas kunci

Jika brankas kunci dilindungi dengan firewall atau jaringan virtual (titik akhir privat), aktifkan pengaturan jaringan untuk mengizinkan akses oleh layanan Azure tepercaya. Untuk informasi selengkapnya, lihat Mengonfigurasi pengaturan jaringan Azure Key Vault.

Mengaktifkan identitas terkelola untuk mengakses brankas kunci

Ada dua cara untuk mengaktifkan identitas terkelola untuk mengakses brankas kunci Anda.

Opsi pertama adalah mengonfigurasi kebijakan akses untuk brankas kunci dan mengatur izin kunci untuk akses dengan identitas terkelola yang ditetapkan pengguna:

  1. Buka brankas kunci Anda.
  2. Pilih Pengaturan>Kebijakan akses > +Tambahkan akses Azure Policy.
  3. Pilih Izin kunci, lalu pilih Dapatkan, Buka Bungkus Kunci, dan Bungkus Kunci.
  4. Di Pilih utama, pilih nama sumber daya identitas terkelola yang ditetapkan pengguna Anda.
  5. Pilih Tambahkan, lalu pilih Simpan.

Cuplikan layar opsi untuk membuat kebijakan akses brankas kunci.

Opsi lainnya adalah menetapkan Key Vault Crypto Service Encryption User peran RBAC ke identitas terkelola yang ditetapkan pengguna di cakupan brankas kunci. Untuk langkah-langkah lebih detail, lihat Menetapkan peran Azure menggunakan portal Microsoft Azure.

Membuat kunci

Buat kunci dalam brankas kunci dan gunakan kunci tersebut untuk mengenkripsi registri. Ikuti langkah-langkah ini jika Anda ingin memilih versi kunci tertentu sebagai kunci yang dikelola pelanggan. Anda mungkin juga perlu membuat kunci sebelum membuat registri jika akses brankas kunci dibatasi untuk titik akhir privat atau jaringan yang dipilih.

  1. Buka brankas kunci Anda.
  2. Pilih Pengaturan>Kunci.
  3. Pilih +Hasilkan/Impor dan masukkan nama unik untuk kunci tersebut.
  4. Terima nilai default yang tersisa, lalu pilih Buat.
  5. Setelah pembuatan, pilih kunci lalu pilih versi saat ini. Salin Pengidentifikasi kunci untuk versi kunci.

Membuat registri kontainer

  1. Pilih Buat sumber daya>Kontainer>Registri Kontainer.
  2. Pada tab Dasar, pilih atau buat grup sumber daya, lalu masukkan nama registri . Di SKU, pilih Premium.
  3. Pada tab Enkripsi , untuk Kunci yang dikelola pelanggan, pilih Diaktifkan.
  4. Untuk Identitas, pilih identitas terkelola yang Anda buat.
  5. Untuk Enkripsi, pilih salah satu opsi berikut:
    • Pilih Pilih dari Key Vault, lalu pilih brankas kunci dan kunci yang ada atau pilih Buat baru. Kunci yang Anda pilih tidak diversi dan mengaktifkan rotasi kunci otomatis.
    • Pilih Masukkan URI kunci, dan berikan pengenal kunci yang ada. Anda dapat menyediakan URI kunci versi (untuk kunci yang harus diputar secara manual) atau URI kunci yang tidak diversi (yang memungkinkan rotasi kunci otomatis). Lihat bagian sebelumnya untuk langkah-langkah untuk membuat kunci.
  6. Pilih Tinjau + buat.
  7. Pilih Buat untuk menyebarkan instans registri.

Cuplikan layar yang memperlihatkan opsi untuk membuat registri terenkripsi di portal Azure.

Tampilkan status enkripsi

Untuk melihat status enkripsi registri Anda di portal, buka registri Anda. Di bawah Pengaturan, pilih Enkripsi.

Mengaktifkan kunci yang dikelola pelanggan dengan menggunakan templat Resource Manager

Anda dapat menggunakan templat Resource Manager untuk membuat registri kontainer dan mengaktifkan enkripsi dengan kunci yang dikelola pelanggan:

  1. Salin konten templat Resource Manager berikut ke file baru dan simpan sebagai 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. Ikuti langkah-langkah di bagian sebelumnya untuk membuat sumber daya berikut ini:

    • Brankas kunci, diidentifikasi dengan nama
    • Kunci brankas kunci, diidentifikasi dengan ID
  3. Jalankan perintah az deployment group create untuk membuat registri dengan menggunakan file templat sebelumnya. Ketika ditunjukkan, berikan nama registri baru dan nama identitas terkelola yang ditetapkan pengguna, bersama dengan nama brankas kunci dan ID kunci yang Anda buat.

    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. Jalankan perintah az acr encryption show untuk menampilkan status enkripsi registri:

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

Langkah berikutnya

Lanjutkan ke artikel berikutnya untuk menelusuri memutar kunci yang dikelola pelanggan, memperbarui versi kunci, dan mencabut kunci yang dikelola pelanggan.