Müşteri tarafından yönetilen anahtarı etkinleştirme

Bu makale, dört bölümlü bir öğretici serisinin ikinci bölümüdür. Birinci bölüm , kayıt defterinizde etkinleştirmeden önce müşteri tarafından yönetilen anahtarlara, bunların özelliklerine ve dikkat edilmesi gerekenlere genel bir bakış sağlar. Bu makalede Azure CLI, Azure portalı veya Azure Resource Manager şablonu kullanarak müşteri tarafından yönetilen anahtarı etkinleştirme adımları gösterilmektedir.

Prerequisites

Azure CLI kullanarak müşteri tarafından yönetilen anahtarı etkinleştirme

Bir kaynak grubu oluşturun

Anahtar kasanızı, kapsayıcı kayıt defterinizi ve diğer gerekli kaynakları barındıracak bir kaynak grubu oluşturmak için az group create komutunu çalıştırın:

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

Kullanıcının atadığı yönetilen kimliği oluşturun

Kayıt defteri için kullanıcı tarafından atanan yönetilen kimlik yapılandırarak anahtar kasasına erişin.

  1. Yönetilen kimliği oluşturmak için az identity create komutunu çalıştırın:

    az identity create \
      --resource-group <resource-group-name> \
      --name <managed-identity-name>
    
  2. Komut çıkışında, id ve principalId değerlerini, anahtar kasasıyla kayıt defteri erişimini yapılandırmak için not alın:

    {
      "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. Kolaylık sağlamak için id ve principalId değerlerini ortam değişkenlerinde depolayın.

    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)
    

Anahtar kasası oluştur

  1. Kayıt defteri şifrelemesi için müşteri tarafından yönetilen bir anahtar depolayabileceğiniz bir anahtar kasası oluşturmak için az keyvault create komutunu çalıştırın.

  2. Varsayılan olarak, yeni anahtar kasası geçici silme ayarını otomatik olarak etkinleştirir. Anahtarların veya anahtar kasalarının yanlışlıkla silinmesi sonucu veri kaybını önlemek amacıyla temizleme koruması ayarını etkinleştirmenizi öneririz.

    az keyvault create --name <key-vault-name> \
      --resource-group <resource-group-name> \
      --enable-purge-protection
    
  3. Kolaylık sağlamak için anahtar kasasının kaynak kimliğini not alın ve değeri ortam değişkenlerinde depolayın:

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

Anahtar kasasına erişmek için güvenilen hizmetleri etkinleştirme

Anahtar kasası bir güvenlik duvarı veya sanal ağ (özel uç nokta) ile koruma altındaysa , güvenilir Azure hizmetlerinin erişimine izin vermek için ağ ayarlarını etkinleştirmeniz gerekir. Daha fazla bilgi için bkz . Azure Key Vault ağ ayarlarını yapılandırma.

Anahtar kasasına erişmek için yönetilen kimlikleri etkinleştirme

Yönetilen kimliklerin anahtar kasanıza erişmesini sağlamanın iki yolu vardır.

İlk seçenek, anahtar kasasının erişim ilkesini yapılandırmak ve bir kullanıcı tarafından atanan yönetilen kimlikle erişim için anahtar izinlerini ayarlamaktır.

  1. az keyvault set policy komutunu çalıştırın. daha önce oluşturulan ve depolanan ortam değişkeni değerini geçirin principalID.

  2. Anahtar izinlerini get, unwrapKeyve wrapKeyolarak ayarlayın:

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

İkinci seçenek, kullanıcı tarafından atanan yönetilen kimliğe izin atamak ve anahtar kasasına erişmek için Azure rol tabanlı erişim denetimini (RBAC) kullanmaktır. az role assignment create komutunu çalıştırın ve rolü kullanıcı tarafından atanan yönetilen kimliğe atayınKey Vault Crypto Service Encryption User:

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

Anahtar oluşturma ve anahtar kimliğini alma

  1. az keyvault key create komutunu çalıştırarak anahtar kasasında bir anahtar oluşturun:

    az keyvault key create \
      --name <key-name> \
      --vault-name <key-vault-name>
    
  2. Komut çıktısında, anahtar kimliğine (kid) dikkat edin.

    [...]
      "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. Kolaylık sağlamak için, anahtar kimliği için seçtiğiniz biçimi ortam değişkeninde $keyID depolayın. Bir anahtar kimliğini sürümlü veya sürümsüz kullanabilirsiniz.

Anahtar döndürme

El ile veya otomatik anahtar döndürmeyi seçebilirsiniz.

Bir kayıt defterinin anahtar sürümüne sahip müşteri tarafından yönetilen bir anahtarla şifrelenmesi, Azure Container Registry'de yalnızca el ile anahtar döndürmeye izin verir. Bu örnek anahtarın kid özelliğini depolar:

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

Anahtar sürümünü atlayarak kayıt defterini müşteri tarafından yönetilen bir anahtarla şifrelemek, Azure Key Vault'ta yeni bir anahtar sürümünü algılamak için otomatik anahtar döndürmeyi etkinleştirir. Bu örnek, anahtarın kid özelliğindeki sürümü kaldırır.

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

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

Müşteri tarafından yönetilen anahtarla kayıt defteri oluşturma

  1. Premium hizmet katmanında bir kayıt defteri oluşturmak ve müşteri tarafından yönetilen anahtarı etkinleştirmek için az acr create komutunu çalıştırın.

  2. Önceki adımlarda ortam değişkenlerinde depolanan yönetilen kimlik kimliği (id) ve anahtar kimliği (kid) değerlerini geçirin:

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

Şifreleme durumunu göster

Müşteri tarafından yönetilen bir anahtarla kayıt defteri şifrelemesinin durumunu göstermek için az acr encryption show komutunu çalıştırın:

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

Kayıt defterini şifrelemek için kullanılan anahtara bağlı olarak çıkış şuna benzer:

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

Azure portalını kullanarak müşteri tarafından yönetilen anahtarı etkinleştirme

Kullanıcının atadığı yönetilen kimliği oluşturun

Azure portalında Azure kaynakları için kullanıcı tarafından atanan yönetilen kimlik oluşturmak için:

  1. Kullanıcı tarafından atanan bir kimlik oluşturmak için adımları izleyin.

  2. Sonraki adımlarda kullanmak için kimliğin adını kaydedin.

Azure portalında kullanıcı tarafından atanan kimlik oluşturma seçeneklerinin ekran görüntüsü.

Anahtar kasası oluştur

  1. Hızlı Başlangıç: Azure portalını kullanarak anahtar kasası oluşturma'daki adımları izleyin.

  2. Müşteri tarafından yönetilen bir anahtar için anahtar kasası oluştururken Temel Bilgiler sekmesinde Silme koruması ayarını etkinleştirin. Bu ayar, anahtarların veya anahtar kasalarının yanlışlıkla silinmesinden kaynaklanan veri kaybının önlenmesine yardımcı olur.

    Azure portalında anahtar kasası oluşturma seçeneklerine ait ekran görüntüsü.

Anahtar kasasına erişmek için güvenilen hizmetleri etkinleştirme

Anahtar kasası bir güvenlik duvarı veya sanal ağ (özel uç nokta) ile koruma altındaysa , güvenilir Azure hizmetlerinin erişimine izin vermek için ağ ayarını etkinleştirin. Daha fazla bilgi için bkz . Azure Key Vault ağ ayarlarını yapılandırma.

Anahtar kasasına erişmek için yönetilen kimlikleri etkinleştirme

Yönetilen kimliklerin anahtar kasanıza erişmesini sağlamanın iki yolu vardır.

İlk seçenek, anahtar kasasının erişim ilkesini yapılandırmak ve bir kullanıcı tarafından atanan yönetilen kimlikle erişim için anahtar izinlerini ayarlamaktır.

  1. Anahtar kasanıza gidin.
  2. Ayarlar>Erişim ilkeleri > +Erişim İlkesi Ekle'yi seçin.
  3. Anahtar İzinleri'ni seçin ve ardından Al, Anahtarı Çöz ve Anahtarı Sar seçin.
  4. Principal seç bölümünde, kullanıcı tarafından atanan yönetilen kimliğinizin kaynak adını seçin.
  5. Ekle'yi ve ardından Kaydet'i seçin.

Anahtar kasasyonu erişim politikası oluşturma seçeneklerinin ekran görüntüsü.

Diğer seçenek, Key Vault Crypto Service Encryption User RBAC rolünü anahtar kasası kapsamında kullanıcı tarafından atanan yönetilen kimliğe atamaktır. Ayrıntılı adımlar için bkz. Azure portalı kullanarak Azure rolleri atama.

Anahtar oluşturma

Anahtar kasasında bir anahtar oluşturun ve bunu kullanarak kayıt defterini şifreleyin. Müşteri tarafından yönetilen anahtar olarak belirli bir anahtar sürümünü seçmek istiyorsanız bu adımları izleyin. Ayrıca, anahtar kasası erişimi özel bir uç nokta veya seçili ağlara kısıtlanmışsa kayıt defterini oluşturmadan önce bir anahtar oluşturmanız gerekebilir.

  1. Anahtar kasanıza gidin.
  2. Ayarlar Anahtarları'nı> seçin.
  3. +Oluştur/İçeri Aktar'ı seçin ve anahtar için benzersiz bir ad girin.
  4. Kalan varsayılan değerleri kabul edin ve oluştur'u seçin.
  5. Oluşturma işleminden sonra anahtarı ve ardından geçerli sürümü seçin. Anahtarın sürümü için Anahtar tanımlayıcısını kopyalayın.

Konteyner kayıt defteri oluşturma

  1. Bir kaynak oluştur>Kapsayıcılar>Kapsayıcı Kayıt Defteri'ni seçin.
  2. Temel Bilgiler sekmesinde bir kaynak grubu seçin veya oluşturun ve bir kayıt defteri adı girin. SKU'daPremium'ı seçin.
  3. Şifreleme sekmesinde, Müşteri tarafından yönetilen anahtar için Etkin'i seçin.
  4. Kimlik için oluşturduğunuz yönetilen kimliği seçin.
  5. Şifreleme için aşağıdaki seçeneklerden birini belirleyin:
    • Key Vault'tan Seç'i seçin ve ardından mevcut bir anahtar kasası ve anahtarı seçin veya Yeni oluştur'u seçin. Seçtiğiniz anahtar tersine çevrilmemiş ve otomatik anahtar döndürmeyi etkinleştirir.
    • Anahtar URI'sini girin'i seçin ve mevcut anahtarın tanımlayıcısını sağlayın. Sürümlü anahtar URI'si (el ile döndürülmesi gereken bir anahtar için) veya ters çevrilmemiş anahtar URI'si (otomatik anahtar döndürmeyi etkinleştirir) sağlayabilirsiniz. Anahtar oluşturma adımları için önceki bölüme bakın.
  6. Seçin, gözden geçir ve oluştur.
  7. Kayıt defteri örneğini dağıtmak için Oluştur'u seçin.

Azure portalında şifrelenmiş kayıt defteri oluşturma seçeneklerini gösteren ekran görüntüsü.

Şifreleme durumunu gösterme

Portalda kayıt defterinizin şifreleme durumunu görmek için kayıt defterinize gidin. Ayarlar'ın altında Şifreleme'yi seçin.

Resource Manager şablonu kullanarak müşteri tarafından yönetilen anahtarı etkinleştirme

Kapsayıcı kayıt defteri oluşturmak ve müşteri tarafından yönetilen bir anahtarla şifrelemeyi etkinleştirmek için Resource Manager şablonu kullanabilirsiniz:

  1. Resource Manager şablonunun aşağıdaki içeriğini yeni bir dosyaya kopyalayın ve CMKtemplate.jsonolarak kaydedin:

    {
      "$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. Aşağıdaki kaynakları oluşturmak için önceki bölümlerde yer alan adımları izleyin:

    • Anahtar kasası, adıyla tanımlanır
    • Anahtar kimliğiyle tanımlanan anahtar kasası anahtarı
  3. Önceki şablon dosyasını kullanarak kayıt defterini oluşturmak için az deployment group create komutunu çalıştırın. Belirtildiğinde, bir yeni kayıt defteri adı ve kullanıcı tarafından atanan bir yönetilen kimlik adı sağlayın, ardından oluşturduğunuz anahtar kasası adı ve anahtar kimliğini de ekleyin.

    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. Kayıt defteri şifrelemesinin durumunu göstermek için az acr encryption show komutunu çalıştırın:

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

Sonraki Adımlar

Müşteri tarafından yönetilen anahtarları döndürme, anahtar sürümlerini güncelleştirme ve müşteri tarafından yönetilen anahtarı iptal etme adımlarını görmek için sonraki makaleye ilerleyin.