Aracılığıyla paylaş


Azure Container Registry'de içerik güveni

Azure Container Registry, Docker'ın içerik güveni modelini uygulayarak imzalı görüntülerin gönderilip çekilmesine olanak tanır. Bu makale, kapsayıcı kayıt defterlerinizde içerik güvenini etkinleştirmeye başlamanızı sağlar.

Önemli

Docker İçerik Güveni 31 Mart 2028'de kullanımdan kaldırılacak ve tamamen kaldırılacaktır. Ayrıntılar ve geçiş kılavuzu için Docker İçerik Güveninden Noter Projesine Geçiş bölümüne bakın.

Uyarı

İçerik güveni, Azure Container Registry'nin Premium hizmet katmanının bir özelliğidir.

Sınırlamalar

  • Depo kapsamlı izinlere sahip belirteç, şu anda imzalı görüntülerin Docker ile gönderilip çekilmesini desteklememektedir.

İçerik güveni nasıl çalışır?

Güvenlik göz önünde bulundurularak tasarlanan herhangi bir dağıtılmış sistem için önemli olan, sisteme giren verilerin hem kaynağını hem de bütünlüğünü doğrulamaktır. Veri tüketicilerinin hem verilerin yayımcısını (kaynağını) doğrulayabilmesi hem de yayımlandıktan (bütünlük) sonra değiştirilmediğinden emin olması gerekir.

Bir görüntü yayımcısı olarak, içerik güveni kayıt defterinize gönderdiğiniz görüntüleri imzalamanıza olanak tanır. Görüntülerinizin tüketicileri (kayıt defterinizden görüntü çeken kişiler veya sistemler) istemcilerini yalnızca imzalı görüntüleri çekecek şekilde yapılandırabilir. Görüntü tüketicisi imzalı bir görüntüyü çektiğinde Docker istemcisi görüntünün bütünlüğünü doğrular. Bu modelde tüketiciler, kayıt defterinizdeki imzalı görüntülerin gerçekten sizin tarafınızdan yayımlandığından ve yayımlandıktan sonra değiştirilmediklerinden emin olurlar.

Uyarı

Azure Container Registry (ACR), Docker İçerik Güveni (DCT) ile imzalanan görüntülerin içeri aktarılmasını desteklemez acr import . Tasarım gereği, içeri aktarma işleminden sonra imzalar görünmez ve noter v2 bu imzaları yapıt olarak depolar.

Güvenilen görüntüler

İçerik güveni bir depodaki etiketlerle çalışır. Görüntü depoları hem imzalı hem de imzasız etiketlere sahip görüntüler içerebilir. Örneğin, yalnızca myimage:stable ve myimage:latest görüntülerini imzalayabilir, ancak myimage:dev görüntüsünü imzalamayabilirsiniz.

İmzalama anahtarları

İçerik güveni, bir dizi şifreleme imzalama anahtarı kullanımıyla yönetilir. Bu anahtarlar, kayıt defterindeki belirli bir depoyla ilişkilendirilir. Docker istemcilerinin ve kayıt defterinizin depodaki etiketler için güveni yönetirken kullandığı birkaç imzalama anahtarı türü vardır. İçerik güvenini etkinleştirip kapsayıcı yayımlama ve tüketim işlem hattınızla tümleştirdiğinizde, bu anahtarları dikkatle yönetmeniz gerekir. Daha fazla bilgi için bu makalenin devamında yer alan Anahtar yönetimi bölümüne ve Docker belgelerindeki İçerik güveni için anahtarları yönetme bölümüne bakın.

Tavsiye

Bu, Docker'ın içerik güven modeline çok üst düzey bir genel bakıştı. İçerik güveni hakkında ayrıntılı bilgi için bkz. Docker'da içerik güveni.

Kayıt defteri içerik güvenini etkinleştirme

İlk adımınız, kayıt defteri düzeyinde içerik güvenini etkinleştirmektir. İçerik güvenini etkinleştirdikten sonra, istemciler (kullanıcılar veya hizmetler) imzalı görüntüleri kayıt defterinize gönderebilir. Kayıt defterinizde içerik güveninin etkinleştirilmesi, kayıt defteri kullanımını yalnızca içerik güveni etkinleştirilmiş tüketicilerle kısıtlamaz. İçerik güveni etkin olmayan tüketiciler kayıt defterinizi normal şekilde kullanmaya devam edebilir. Ancak istemcilerinde içerik güvenini etkinleştirmiş olan tüketiciler, kayıt defterinizde yalnızca imzalı görüntüleri görebilir.

Kayıt defterinizde içerik güvenini etkinleştirmek için önce Azure portalında kayıt defterine gidin. İlkeler, İçerik Güveni>Etkinleştir>Kaydet öğelerini seçin. Azure CLI'da az acr config content-trust update komutunu da kullanabilirsiniz.

Azure portalında bir kayıt defteri için içerik güvenini etkinleştirmeyi gösteren ekran görüntüsü.

İstemci içerik güvenini etkinleştirme

Güvenilir görüntülerle çalışmak için hem görüntü yayımcılarının hem de tüketicilerin Docker istemcileri için içerik güvenini etkinleştirmesi gerekir. Yayımcı olarak, içerik güveni etkinleştirilmiş bir kayıt defterine gönderdiğiniz görüntüleri imzalayabilirsiniz. Tüketici olarak, içerik güvenini etkinleştirmek kayıt defteri görünümünüzü yalnızca imzalı görüntülerle sınırlar. Docker istemcilerinde içerik doğrulama varsayılan olarak devre dışıdır, ancak bunu komut satırı oturumu veya komut başına etkinleştirebilirsiniz.

Kabuk oturumunda içerik güvenini etkinleştirmek için ortam değişkenini DOCKER_CONTENT_TRUST1 olarak ayarlayın. Örneğin, Bash kabuğunda:

# Enable content trust for shell session
export DOCKER_CONTENT_TRUST=1

Bunun yerine, tek bir komut için içerik güvenini etkinleştirmek veya devre dışı bırakmak isterseniz, birkaç Docker komutu bağımsız değişken --disable-content-trust'yi destekler. Tek bir komut için içerik güvenini etkinleştirmek için:

# Enable content trust for single command
docker build --disable-content-trust=false -t myacr.azurecr.io/myimage:v1 .

Kabuk oturumunuz için içerik güvenini etkinleştirdiyseniz ve bunu tek bir komut için devre dışı bırakmak istiyorsanız:

# Disable content trust for single command
docker build --disable-content-trust -t myacr.azurecr.io/myimage:v1 .

Görüntü imzalama izinleri verme

Yalnızca izin vermiş olduğunuz kullanıcılar veya sistemler, güvenilir görüntüleri kayıt defterinize gönderebilir. Bir kullanıcıya (veya bir hizmet sorumlusunu kullanan bir sisteme) güvenilir imaj gönderme izni vermek için, Microsoft Entra kimliklerine AcrImageSigner rolünü verin. Bu, görüntüleri kayıt defterine AcrPush göndermek için gereken (veya eşdeğeri) role ek olarak kullanılır. Ayrıntılar için bkz. Azure Container Registry Entra izinlerine ve rollerine genel bakış.

Önemli

Aşağıdaki yönetim hesaplarına güvenilir görüntü gönderme izni veremezsiniz:

Uyarı

2021 Temmuz'undan itibaren, AcrImageSigner rolü hem Microsoft.ContainerRegistry/registries/sign/write eylemini hem de Microsoft.ContainerRegistry/registries/trustedCollections/write veri eylemini içerir.

Azure portalında ve Azure CLI'da AcrImageSigner rolü verme detayları aşağıdadır.

Azure portalı

  1. Erişim denetimi (IAM) öğesini seçin.

  2. Ekle>Rol ataması ekle seçeneğini belirleyerek Rol ataması ekle sayfasını açın.

  3. Aşağıdaki rolü atayın. Bu örnekte rol tek bir kullanıcıya atanır. Ayrıntılı adımlar için bkz. Azure portalı kullanarak Azure rolleri atama.

    Ayarlar Değer
    Rol AcrImageSigner
    Şu kişiye erişim ata: Kullanıcı
    Üyeler Alain

    Azure portalında rol ataması ekleme sayfası.

Azure Komut Satırı Arayüzü (Azure CLI)

Azure CLI kullanan bir kullanıcıya imzalama izinleri vermek için, AcrImageSigner rolünü kayıt defterinize özgü olacak şekilde kullanıcıya atayın. Komut biçimi şu şekildedir:

az role assignment create --scope <registry ID> --role AcrImageSigner --assignee <user name>

Örneğin, yönetici olmayan bir kullanıcıya rolü vermek için, kimliği doğrulanmış bir Azure CLI oturumunda aşağıdaki komutları çalıştırabilirsiniz. REGISTRY Değerini, Azure kapsayıcı kayıt defterinizin adını yansıtacak şekilde değiştirin.

# Grant signing permissions to authenticated Azure CLI user
REGISTRY=myregistry
REGISTRY_ID=$(az acr show --name $REGISTRY --query id --output tsv)
az role assignment create --scope $REGISTRY_ID --role AcrImageSigner --assignee azureuser@contoso.com

Ayrıca, bir hizmet sorumlusuna güvenilir görüntüleri kayıt defterinize gönderme hakkı da vekleyebilirsiniz. Hizmet sorumlusu kullanmak, güvenilir görüntüleri kayıt defterinize göndermesi gereken derleme sistemleri ve diğer katılımsız sistemler için yararlıdır. Biçim, kullanıcı izni verme biçimine benzer, ancak değer için --assignee bir hizmet sorumlusu kimliği belirtin.

az role assignment create --scope $REGISTRY_ID --role AcrImageSigner --assignee <service principal ID>

, <service principal ID> hizmet sorumlusunun appId, objectId veya servicePrincipalNames'lerinden biri olabilir. Hizmet sorumluları veya Azure Container Registry ile çalışma hakkında daha fazla bilgi için bkz. Hizmet sorumlularıyla Azure Container Registry kimlik doğrulaması.

Önemli

Herhangi bir rol değişikliği yaptıktan sonra, yeni rollerin etkili olabilmesi için Azure CLI için yerel kimlik belirtecini yenilemek için komutunu çalıştırın az acr login . Kimlik rollerini doğrulama hakkında bilgi için bkz. Azure CLI kullanarak Azure rol atamaları ekleme veya kaldırma ve Azure RBAC sorunlarını giderme.

Güvenilir bir görüntüyü yükle

Kapsayıcı kayıt defterinize güvenilir bir görüntü etiketi göndermek için, içerik güvenini etkinleştirin ve docker push ile görüntüyü gönderin. İmzalı bir etiketle gönderme işlemi ilk kez tamamlandıktan sonra, hem kök imzalama anahtarı hem de depo imzalama anahtarı için parola oluşturmanız istenir. Hem kök hem de depo anahtarları makinenizde yerel olarak oluşturulur ve depolanır.

$ docker push myregistry.azurecr.io/myimage:v1
[...]
The push refers to repository [myregistry.azurecr.io/myimage]
ee83fc5847cb: Pushed
v1: digest: sha256:aca41a608e5eb015f1ec6755f490f3be26b48010b178e78c00eac21ffbe246f1 size: 524
Signing and pushing trust metadata
You are about to create a new root signing key passphrase. This passphrase
will be used to protect the most sensitive key in your signing system. Please
choose a long, complex passphrase and be careful to keep the password and the
key file itself secure and backed up. It is highly recommended that you use a
password manager to generate the passphrase and keep it safe. There will be no
way to recover this key. You can find the key in your config directory.
Enter passphrase for new root key with ID 4c6c56a:
Repeat passphrase for new root key with ID 4c6c56a:
Enter passphrase for new repository key with ID bcd6d98:
Repeat passphrase for new repository key with ID bcd6d98:
Finished initializing "myregistry.azurecr.io/myimage"
Successfully signed myregistry.azurecr.io/myimage:v1

docker push İçerik güveni etkinleştirildikten sonra Docker istemcisi sonraki göndermeler için aynı kök anahtarı kullanır. Aynı depoya yapılan her gönderimde sizden yalnızca depo anahtarı istenir. Güvenilir bir görüntüyü yeni bir depoya her gönderişiniz, yeni bir depo anahtarı için parola sağlamanız istenir.

Güvenilen görüntü çekme

Güvenilir bir görüntüyü çekmek için içerik güvenini etkinleştirin ve komutu normal şekilde çalıştırın docker pull . Normal kullanıcılar için AcrPull rolü, güvenilir imajları çekmek için yeterlidir. AcrImageSigner gibi ek roller gerekmez. İçerik güveni etkin olan tüketiciler yalnızca imzalı etiketlere sahip görüntüleri çekebilir. aşağıda imzalı etiket çekme örneği verilmiştir:

$ docker pull myregistry.azurecr.io/myimage:signed
Pull (1 of 1): myregistry.azurecr.io/myimage:signed@sha256:0800d17e37fb4f8194495b1a188f121e5b54efb52b5d93dc9e0ed97fce49564b
sha256:0800d17e37fb4f8194495b1a188f121e5b54efb52b5d93dc9e0ed97fce49564b: Pulling from myimage
8e3ba11ec2a2: Pull complete
Digest: sha256:0800d17e37fb4f8194495b1a188f121e5b54efb52b5d93dc9e0ed97fce49564b
Status: Downloaded newer image for myregistry.azurecr.io/myimage@sha256:0800d17e37fb4f8194495b1a188f121e5b54efb52b5d93dc9e0ed97fce49564b
Tagging myregistry.azurecr.io/myimage@sha256:0800d17e37fb4f8194495b1a188f121e5b54efb52b5d93dc9e0ed97fce49564b as myregistry.azurecr.io/myimage:signed

İçerik güveni etkinleştirilmiş bir istemci imzasız bir etiketi çekmeye çalışırsa, işlem aşağıdakine benzer bir hatayla başarısız olur:

$ docker pull myregistry.azurecr.io/myimage:unsigned
Error: remote trust data does not exist

Arka planda

komutunu çalıştırdığınızda docker pullDocker istemcisi, çektiğiniz etiket için etiketten SHA-256 özet eşlemesine istekte bulunmak için Noter CLI ile aynı kitaplığı kullanır. güven verilerindeki imzaları doğruladıktan sonra istemci Docker Altyapısı'na "özete göre çekme" yapması talimatını verir. Çekme sırasında Altyapı, Azure kapsayıcı kayıt defterinden görüntü bildirimi istemek ve doğrulamak için içerik adresi olarak SHA-256 sağlama toplamını kullanır.

Uyarı

Azure Container Registry, Noter CLI'yi resmi olarak desteklemez, ancak Docker Desktop'ta bulunan Noter Sunucusu API'siyle uyumludur. Şu anda Noter sürümü 0.6.0 önerilir.

Anahtar yönetimi

İlk güvenilir görüntünüzü gönderdiğinizde çıkışta docker push belirtildiği gibi, kök anahtar en hassas anahtardır. Kök anahtarınızı yedekleyip güvenli bir konumda sakladığınızdan emin olun. Docker istemcisi varsayılan olarak imzalama anahtarlarını aşağıdaki dizinde depolar:

~/.docker/trust/private

Kök ve depo anahtarlarınızı arşivde sıkıştırıp güvenli bir konumda depolayarak yedekleyin. Örneğin Bash'te:

umask 077; tar -zcvf docker_private_keys_backup.tar.gz ~/.docker/trust/private; umask 022

Yerel olarak oluşturulan kök ve depo anahtarlarının yanı sıra, güvenilir bir görüntü gönderdiğinizde Azure Container Registry tarafından birkaç diğer anahtar oluşturulur ve depolanır. Docker'ın içerik güveni uygulamasında ek yönetim kılavuzu da dahil olmak üzere çeşitli anahtarların ayrıntılı bir tartışması için Docker belgelerindeki İçerik güveni anahtarlarını yönetme bölümüne bakın.

Kayıp kök anahtar

Kök anahtarınıza erişiminizi kaybederseniz, etiketleri bu anahtarla imzalanan herhangi bir depodaki imzalı etiketlere erişimi kaybedersiniz. Azure Container Registry, kayıp bir kök anahtarla imzalanan görüntü etiketlerine erişimi geri yükleyemez. Kayıt defterinizin tüm güven verilerini (imzaları) kaldırmak için önce devre dışı bırakın, ardından kayıt defteri için içerik güvenini yeniden etkinleştirin.

Uyarı

Kayıt defterinizde içerik güvenini devre dışı bırakmak ve yeniden etkinleştirmek, kayıt defterinizdeki her depodaki tüm imzalı etiketler için tüm güven verilerini siler. Bu eylem geri alınamaz; Azure Container Registry silinen güven verilerini kurtaramaz. İçerik güvenini devre dışı bırakmak resimlerin kendilerini silmez.

Kayıt defterinizde içerik güvenini devre dışı bırakmak için Azure portalında kayıt defterine gidin. İlkeler altında İçerik Güveni>Devre Dışı> seçin ve Kaydet. Kayıt defterindeki tüm imzaların kaybedilmesi konusunda uyarıldınız. Kayıt defterinizdeki tüm imzaları kalıcı olarak silmek için Tamam'ı seçin.

Azure portalında kayıt defteri için içerik güvenini devre dışı bırakma

Sonraki Adımlar

  • Docker'da İçerik Güveni hakkında, docker trust komutları ve güven vekilleri içeren ek bilgiler için bkz. Bu makalede birkaç önemli noktaya değinildi ancak içerik güveni kapsamlı bir konudur ve Docker belgelerinde daha ayrıntılı bir şekilde ele alınmıştır.

  • Docker görüntüsü derleyip gönderdiğinizde içerik güveni kullanma örneği için Azure Pipelines belgelerine bakın.