Aracılığıyla paylaş


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

Bu makale, dört bölümden bir öğretici serisinin 2. 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.

Önkoşullar

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

Kaynak grubu oluşturma

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ı tarafından atanan yönetilen kimlik oluşturma

Anahtar kasasına erişebilmeniz için kayıt defteri için kullanıcı tarafından atanan yönetilen kimliği yapılandırın:

  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, anahtar kasasıyla kayıt defteri erişimini yapılandırmak için ve principalId değerlerini not id alın:

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

    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şturma

  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 silinmesini önlemek için temizleme koruma 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üvenilen 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ı için erişim ilkesini yapılandırmak ve kullanıcı tarafından atanan yönetilen kimlikle erişim için anahtar izinleri ayarlamaktır:

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

  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ğini (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. Kolaylık sağlamak için, anahtar kimliği için seçtiğiniz biçimi ortam değişkeninde $keyID depolayın. Bir sürümle veya sürüm olmadan anahtar kimliği 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 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)

Bir anahtar sürümünü atlayarak bir kayıt defterini müşteri tarafından yönetilen bir anahtarla şifrelemek, Azure Key Vault yeni bir anahtar sürümünü algılamak için otomatik anahtar döndürmeyi etkinleştirir. Bu örnek, anahtarın kid özelliğinden 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 kullanarak müşteri tarafından yönetilen anahtarı etkinleştirme

Kullanıcı tarafından atanan yönetilen kimlik oluşturma

Azure portal 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 kullanıcı tarafından atanan kimlik oluşturma seçeneklerinin ekran görüntüsü.

Anahtar kasası oluşturma

  1. Hızlı Başlangıç: Azure portal kullanarak anahtar kasası oluşturma bölümündeki adımları izleyin.

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

    Azure portal anahtar kasası oluşturma seçeneklerinin 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ı için erişim ilkesini yapılandırmak ve kullanıcı tarafından atanan yönetilen kimlikle erişim için anahtar izinleri ayarlamaktır:

  1. Anahtar kasanıza gidin.
  2. Ayarlar>Erişim ilkeleri > +Erişim İlkesi Ekle'yi seçin.
  3. Anahtar izinleri'ni ve ardından Al, Anahtarı Kaldır ve Anahtarı Sarmala'yı seçin.
  4. Sorumlu seçin 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 kasası erişim ilkesi oluşturma seçeneklerinin ekran görüntüsü.

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

Bir 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ğ ile kısıtlıysa kayıt defterini oluşturmadan önce bir anahtar oluşturmanız gerekebilir.

  1. Anahtar kasanıza gidin.
  2. AyarlarAnahtarları'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şturulduktan sonra anahtarı ve ardından geçerli sürümü seçin. Anahtar sürümü için Anahtar tanımlayıcısını kopyalayın.

Kapsayıcı kayıt defteri oluşturma

  1. Kaynak >Kapsayıcıları Kapsayıcı>Kayıt Defteri oluştur'u seçin.
  2. Temel Bilgiler sekmesinde bir kaynak grubu seçin veya oluşturun ve bir kayıt defteri adı girin. SKU'daPremium'a tıklayın.
  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 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 var olan bir anahtarın tanımlayıcısını sağlayın. Sürüme alınmış bir anahtar URI'si (el ile döndürülmesi gereken bir anahtar için) veya ters çevrilmemiş bir 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. Gözden geçir ve oluştur’u seçin.
  7. Kayıt defteri örneğini dağıtmak için Oluştur'u seçin.

Azure portal ş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.json olarak 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')), '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. Aşağıdaki kaynakları oluşturmak için önceki bölümlerdeki adımları izleyin:

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

    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.