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 mereka, dan pertimbangan sebelum Anda mengaktifkannya di registri Anda. Artikel ini memancang 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

Buat grup sumber daya

Jalankan perintah az group create untuk membuat grup sumber daya yang akan menahan 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": "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"
    }
    
  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)
    

Buat 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 hilangnya 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 agar mengizinkan akses oleh layanan Azure tepercaya. Untuk informasi lebih lanjut, 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 dan disimpan sebelumnya 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 kunci kid:

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. Gunakan nilai ID identitas terkelola (id) dan ID kunci (kid) yang sudah disimpan dalam variabel lingkungan di 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 di sumber daya Azure melalui portal Azure:

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

  2. Simpan nama identitas untuk menggunakannya di langkah selanjutnya.

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

Buat 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. Pengaturan ini membantu mencegah hilangnya 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 agar mengizinkan akses oleh layanan Azure tepercaya. Untuk informasi lebih lanjut, 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 Kebijakan Akses.
  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 pilihan untuk membuat kebijakan akses Key Vault.

Opsi lainnya adalah menetapkan peran RBAC ke identitas terkelola yang ditetapkan oleh pengguna pada cakupan key vault. Untuk langkah-langkah mendetail, lihat Menetapkan peran Azure menggunakan portal 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 ke 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 memiliki versi dan mengaktifkan rotasi kunci otomatis.
    • Pilih Masukkan URI kunci, dan berikan pengenal kunci yang ada. Anda dapat menyediakan URI kunci yang memiliki versi (untuk kunci yang harus diganti secara manual) atau URI kunci tanpa versi (yang memungkinkan rotasi kunci secara otomatis). Lihat bagian sebelumnya untuk langkah-langkah untuk membuat kunci.
  6. Pilih Tinjau dan buat.
  7. Pilih Buat untuk menyebarkan instans registri.

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

Perlihatkan 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')), '2023-07-01').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": "2023-07-01",
          "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')), '2023-07-01').principalId]",
                "permissions": {
                  "keys": [
                    "get",
                    "unwrapKey",
                    "wrapKey"
                  ]
                }
              }
            ]
          }
        },
        {
          "type": "Microsoft.ManagedIdentity/userAssignedIdentities",
          "apiVersion": "2023-07-01",
          "name": "[parameters('identity_name')]",
          "location": "[resourceGroup().location]"
        }
      ]
    }
    
  2. Ikuti langkah-langkah di bagian sebelumnya untuk membuat sumber daya berikut ini:

    • Penyimpanan kunci, diidentifikasi dengan nama
    • Kunci di brankas kunci, diidentifikasi dengan ID
  3. Jalankan perintah az deployment group create untuk membuat registri dengan menggunakan file templat sebelumnya. Saat diperlukan, berikan nama registri baru dan nama identitas terkelola yang diberikan oleh 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 mempelajari cara memutar kunci yang dikelola pelanggan, memperbarui versi kunci, dan mencabut kunci tersebut.