Sdílet prostřednictvím


Použití integrity image k ověření podepsaných imagí před jejich nasazením do clusterů Azure Kubernetes Service (AKS) (Preview)

Azure Kubernetes Service (AKS) a jeho základní model kontejneru poskytují vyšší škálovatelnost a možnosti správy pro aplikace nativní pro cloud. S AKS můžete spouštět flexibilní softwarové aplikace podle potřeb modulu runtime vašeho systému. Tato flexibilita však může představovat nové výzvy.

V těchto aplikačních prostředích pomáhá použití podepsaných imagí kontejneru ověřit, že vaše nasazení jsou sestavená z důvěryhodné entity a že image nebyly od jejich vytvoření manipulovány. Integrita image je služba, která umožňuje přidat integrovanou definici služby Azure Policy a ověřit, že se do clusterů AKS nasadí jenom podepsané image.

Poznámka:

Integrita obrazu je funkce založená na Osobnosti. V clusteru AKS je ImageIntegritynázev funkce a název vlastnosti, zatímco názvy příslušných podů integrity obrázků obsahují Ratify.

Důležité

Funkce AKS ve verzi Preview jsou k dispozici na samoobslužné bázi. Verze Preview jsou poskytovány "tak, jak jsou" a "dostupné", a jsou vyloučené ze smluv o úrovni služeb a omezené záruky. Verze Preview AKS jsou částečně pokryty zákaznickou podporou na základě maximálního úsilí. Proto tyto funkce nejsou určené pro produkční použití. Další informace najdete v následujících článcích podpory:

Požadavky

  • Předplatné Azure. Pokud ještě nemáte předplatné Azure, můžete si vytvořit bezplatný účet.

  • Azure CLI nebo Azure PowerShell.

  • aks-preview Rozšíření cli verze 0.5.96 nebo novější

  • Ujistěte se, že je ve vašem clusteru povolený doplněk Azure Policy pro AKS. Pokud tento doplněk nemáte nainstalovaný, přečtěte si téma Instalace doplňku Azure Policy pro AKS.

  • Cluster AKS s povoleným vystavitelem OIDC Pokud chcete vytvořit nový cluster nebo aktualizovat existující cluster, přečtěte si téma Konfigurace clusteru AKS s vystavitelem OIDC.

  • Příznaky EnableImageIntegrityPreview funkcí AKS-AzurePolicyExternalData zaregistrované ve vašem předplatném Azure. Pomocí následujících příkazů zaregistrujte příznaky funkce:

    1. EnableImageIntegrityPreview Pomocí příkazu zaregistrujte příznaky az feature register funkcíAKS-AzurePolicyExternalData.

      # Register the EnableImageIntegrityPreview feature flag
      az feature register --namespace "Microsoft.ContainerService" --name "EnableImageIntegrityPreview"
      
      # Register the AKS-AzurePolicyExternalData feature flag
      az feature register --namespace "Microsoft.ContainerService" --name "AKS-AzurePolicyExternalData"
      

      Může trvat několik minut, než se stav zobrazí jako Zaregistrovaný.

    2. Pomocí příkazu ověřte stav az feature show registrace.

      # Verify the EnableImageIntegrityPreview feature flag registration status
      az feature show --namespace "Microsoft.ContainerService" --name "EnableImageIntegrityPreview"
      
      # Verify the AKS-AzurePolicyExternalData feature flag registration status
      az feature show --namespace "Microsoft.ContainerService" --name "AKS-AzurePolicyExternalData"
      
    3. Jakmile se zobrazí stav Registrováno, pomocí příkazu aktualizujte registraci Microsoft.ContainerService poskytovatele az provider register prostředků.

      az provider register --namespace Microsoft.ContainerService
      

Úvahy a omezení

  • Clustery AKS musí spouštět Kubernetes verze 1.26 nebo vyšší.
  • Tuto funkci byste neměli používat pro produkční registry nebo úlohy služby Azure Container Registry (ACR).
  • Integrita image podporuje maximálně 200 jedinečných podpisů současně v rámci clusteru.
  • Notace je jediným podporovaným ověřovatelem.
  • Audit je jediným podporovaným účinkem zásad ověřování.

Jak funguje integrita obrázků

Snímek obrazovky znázorňující základní architekturu integrity obrázků

Integrita image používá k ověření podepsaných imagí před jejich nasazením do clusterů AKS zásady Azure Policy a Gatekeeperu. Povolení integrity image v clusteru nasadí Ratify pod. Tento Ratify pod provádí následující úlohy:

  1. Odsouhlasí certifikáty ze služby Azure Key Vault podle konfigurace, kterou jste nastavili prostřednictvím Ratify identifikátorů CRD.
  2. Přistupuje k imagím uloženým v ACR, když žádosti o ověření pocházejí ze služby Azure Policy. Pro povolení tohoto prostředí azure Policy rozšiřuje Gatekeeper, webhook kontroleru přístupu pro agenta OPA (Open Policy Agent).
  3. Určuje, jestli je cílová image podepsaná důvěryhodným certifikátem, a proto se považuje za důvěryhodnou.
  4. AzurePolicy a Gatekeeper výsledky ověření spotřebovávají jako stav dodržování předpisů, abyste se rozhodli, jestli se má žádost o nasazení povolit.

Povolení integrity image v clusteru AKS

Poznámka:

Ověření podpisu obrázku je scénář orientovaný na zásady správného řízení a využívá Azure Policy k ověření podpisů obrázků v clusterech AKS ve velkém měřítku. Doporučujeme použít integrovanou iniciativu Azure Policy integrity imagí AKS, která je k dispozici v integrované knihovně definic Azure Policy.

  • Pomocí příkazu vytvořte přiřazení zásad pomocí iniciativy [Preview]: Use Image Integrity to ensure only trusted images are deployed az policy assignment create zásad AKS.

    export SCOPE="/subscriptions/${SUBSCRIPTION}/resourceGroups/${RESOURCE_GROUP}"
    export LOCATION=$(az group show --name ${RESOURCE_GROUP} --query location -o tsv)
    
    az policy assignment create --name 'deploy-trustedimages' --policy-set-definition 'af28bf8b-c669-4dd3-9137-1e68fdc61bd6' --display-name 'Audit deployment with unsigned container images' --scope ${SCOPE} --mi-system-assigned --role Contributor --identity-scope ${SCOPE} --location ${LOCATION}
    

    Pod Ratify se nasadí po povolení funkce.

Poznámka:

Tato zásada nasadí do clusteru funkci Integrita image, když zjistí jakoukoli operaci aktualizace v clusteru. Pokud chcete tuto funkci povolit okamžitě, musíte pomocí příkazu vytvořit nápravu az policy remediation create zásad.

assignment_id=$(az policy assignment show --name 'deploy-trustedimages' --scope ${SCOPE} --query id -o tsv)
az policy remediation create --policy-assignment "$assignment_id" --definition-reference-id deployAKSImageIntegrity --name remediation --resource-group ${RESOURCE_GROUP}

Nastavení konfigurací ověřování

Aby integrita image správně ověřila cílovou podepsanou image, musíte nastavit Ratify konfigurace prostřednictvím identifikátorů CRD K8s pomocí kubectl.

V tomto článku používáme certifikát certifikační autority podepsaný svým držitelem z oficiální dokumentace k Řešení k nastavení konfigurací ověřování. Další příklady najdete v tématu CrDs od společnosti Chyt.

  1. Vytvořte VerifyConfig soubor s názvem verify-config.yaml a zkopírujte ho v následujícím jazyce YAML:

    apiVersion: config.ratify.deislabs.io/v1beta1
    kind: CertificateStore
    metadata:
      name: certstore-inline
    spec:
      provider: inline
      parameters:
        value: |
          -----BEGIN CERTIFICATE-----
          MIIDQzCCAiugAwIBAgIUDxHQ9JxxmnrLWTA5rAtIZCzY8mMwDQYJKoZIhvcNAQEL
          BQAwKTEPMA0GA1UECgwGUmF0aWZ5MRYwFAYDVQQDDA1SYXRpZnkgU2FtcGxlMB4X
          DTIzMDYyOTA1MjgzMloXDTMzMDYyNjA1MjgzMlowKTEPMA0GA1UECgwGUmF0aWZ5
          MRYwFAYDVQQDDA1SYXRpZnkgU2FtcGxlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
          MIIBCgKCAQEAshmsL2VM9ojhgTVUUuEsZro9jfI27VKZJ4naWSHJihmOki7IoZS8
          3/3ATpkE1lGbduJ77M9UxQbEW1PnESB0bWtMQtjIbser3mFCn15yz4nBXiTIu/K4
          FYv6HVdc6/cds3jgfEFNw/8RVMBUGNUiSEWa1lV1zDM2v/8GekUr6SNvMyqtY8oo
          ItwxfUvlhgMNlLgd96mVnnPVLmPkCmXFN9iBMhSce6sn6P9oDIB+pr1ZpE4F5bwa
          gRBg2tWN3Tz9H/z2a51Xbn7hCT5OLBRlkorHJl2HKKRoXz1hBgR8xOL+zRySH9Qo
          3yx6WvluYDNfVbCREzKJf9fFiQeVe0EJOwIDAQABo2MwYTAdBgNVHQ4EFgQUKzci
          EKCDwPBn4I1YZ+sDdnxEir4wHwYDVR0jBBgwFoAUKzciEKCDwPBn4I1YZ+sDdnxE
          ir4wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAgQwDQYJKoZIhvcNAQEL
          BQADggEBAGh6duwc1MvV+PUYvIkDfgj158KtYX+bv4PmcV/aemQUoArqM1ECYFjt
          BlBVmTRJA0lijU5I0oZje80zW7P8M8pra0BM6x3cPnh/oZGrsuMizd4h5b5TnwuJ
          hRvKFFUVeHn9kORbyQwRQ5SpL8cRGyYp+T6ncEmo0jdIOM5dgfdhwHgb+i3TejcF
          90sUs65zovUjv1wa11SqOdu12cCj/MYp+H8j2lpaLL2t0cbFJlBY6DNJgxr5qync
          cz8gbXrZmNbzC7W5QK5J7fcx6tlffOpt5cm427f9NiK2tira50HU7gC3HJkbiSTp
          Xw10iXXMZzSbQ0/Hj2BF4B40WfAkgRg=
          -----END CERTIFICATE-----
    ---
    apiVersion: config.ratify.deislabs.io/v1beta1
    kind: Store
    metadata:
      name: store-oras
    spec:
      name: oras
    # If you want to you use Workload Identity for Ratify to access Azure Container Registry,
    # uncomment the following lines, and fill the proper ClientID:
    # See more: https://ratify.dev/docs/reference/oras-auth-provider
    # parameters:
    #  authProvider:
    #    name: azureWorkloadIdentity
    #    clientID: XXX
    ---
    apiVersion: config.ratify.deislabs.io/v1beta1
    kind: Verifier
    metadata:
      name: verifier-notary-inline
    spec:
      name: notation
      artifactTypes: application/vnd.cncf.notary.signature
      parameters:
        verificationCertStores:  # certificates for validating signatures
          certs: # name of the trustStore
            - certstore-inline # name of the certificate store CRD to include in this trustStore
        trustPolicyDoc: # policy language that indicates which identities are trusted to produce artifacts
          version: "1.0"
          trustPolicies:
            - name: default
              registryScopes:
                - "*"
              signatureVerification:
                level: strict
              trustStores:
                - ca:certs
              trustedIdentities:
                - "*"
    
  2. Použijte ho v VerifyConfig clusteru kubectl apply pomocí příkazu.

    kubectl apply -f verify-config.yaml
    

Nasazení ukázkových imagí do clusteru AKS

  • Pomocí příkazu nasaďte podepsanou image kubectl run demo .

    kubectl run demo-signed --image=ghcr.io/deislabs/ratify/notary-image:signed 
    

    Následující příklad výstupu ukazuje, že integrita image umožňuje nasazení:

    ghcr.io/deislabs/ratify/notary-image:signed
    pod/demo-signed created
    

Pokud chcete použít vlastní image, přečtěte si pokyny k podepisování obrázků.

Zakázání integrity obrázků

  • Pomocí příkazu s příznakem zakažte v clusteru integritu az aks update --disable-image-integrity image.

    az aks update --resource-group myResourceGroup --name MyManagedCluster --disable-image-integrity
    

Odebrání iniciativy zásad

Další kroky

V tomto článku jste zjistili, jak pomocí integrity image ověřit podepsané image před jejich nasazením do clusterů Azure Kubernetes Service (AKS). Pokud chcete zjistit, jak podepisovat vlastní kontejnery, přečtěte si téma Sestavení, podepsání a ověření imagí kontejnerů pomocí notáře a služby Azure Key Vault (Preview).