Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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.
İ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_TRUST
1 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:
- Azure kapsayıcı kayıt defterinin yönetici hesabı
- klasik sistem yöneticisi rolüyle Microsoft Entra Id'de bir kullanıcı hesabı.
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ı
Erişim denetimi (IAM) öğesini seçin.
Ekle>Rol ataması ekle seçeneğini belirleyerek Rol ataması ekle sayfasını açın.
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 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 pull
Docker 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.
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.