Megosztás a következőn keresztül:


Az Image Integrity használatával ellenőrizheti az aláírt lemezképeket, mielőtt üzembe helyezené őket az Azure Kubernetes Service-fürtökön (előzetes verzió)

Az Azure Kubernetes Service (AKS) és annak mögöttes tárolómodellje nagyobb méretezhetőséget és kezelhetőséget biztosít a natív felhőalkalmazások számára. Az AKS segítségével rugalmas szoftveralkalmazásokat indíthat el a rendszer futtatókörnyezeti igényeinek megfelelően. Ez a rugalmasság azonban új kihívásokat jelenthet.

Ezekben az alkalmazáskörnyezetekben az aláírt tárolólemezképek használatával ellenőrizheti, hogy az üzemelő példányok megbízható entitásból készültek-e, és hogy a rendszerképeket nem módosították-e a létrehozásuk óta. A rendszerkép-integritás egy szolgáltatás, amely lehetővé teszi egy beépített Azure Policy-definíció hozzáadását annak ellenőrzéséhez, hogy csak aláírt rendszerképek vannak-e üzembe helyezve az AKS-fürtökön.

Feljegyzés

A rendszerkép integritása a Ratify szolgáltatáson alapul. Egy AKS-fürtben a szolgáltatásnév és a tulajdonság neve ImageIntegrity, míg a megfelelő képintegritási podok nevei tartalmazzák Ratify.

Fontos

Az AKS előzetes verziójú funkciói önkiszolgáló, opt-in alapon érhetők el. Az előzetes verziókat "ahogy van" és "rendelkezésre állóként" biztosítjuk, és a szolgáltatási szerződésekből és a korlátozott jótállásból kizárjuk őket. Az AKS előzetes verzióit részben az ügyfélszolgálat fedezi a legjobb munkamennyiség alapján. Ezért ezek a funkciók nem éles használatra vannak szánva. További információkért tekintse meg az alábbi támogatási cikkeket:

Előfeltételek

  • Azure-előfizetés. Ha nem rendelkezik Azure-előfizetéssel, létrehozhat egy ingyenes fiókot.

  • Azure CLI vagy Azure PowerShell.

  • aks-preview A CLI-bővítmény 0.5.96-os vagy újabb verziója.

  • Győződjön meg arról, hogy az AKS Azure Policy-bővítménye engedélyezve van a fürtön. Ha nincs telepítve ez a bővítmény, olvassa el az Azure Policy bővítmény telepítése az AKS-hez című témakört.

  • Az OIDC-kiállítóval engedélyezett AKS-fürt. Új fürt létrehozásához vagy meglévő fürt frissítéséhez lásd : AKS-fürt konfigurálása OIDC-kiállítóval.

  • Az EnableImageIntegrityPreview Azure-előfizetésben regisztrált és AKS-AzurePolicyExternalData a funkciójelzők. Regisztrálja a funkciójelzőket a következő parancsokkal:

    1. Regisztrálja a és AKS-AzurePolicyExternalData a EnableImageIntegrityPreview funkciójelzőket a az feature register paranccsal.

      # 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"
      

      Eltarthat néhány percig, amíg az állapot regisztráltként jelenik meg.

    2. Ellenőrizze a regisztrációs állapotot a az feature show paranccsal.

      # 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. Ha az állapot a Regisztrált állapotot mutatja, frissítse az Microsoft.ContainerService erőforrás-szolgáltató regisztrációját a az provider register paranccsal.

      az provider register --namespace Microsoft.ContainerService
      

Szempontok és korlátozások

  • Az AKS-fürtöknek a Kubernetes 1.26-os vagy újabb verzióját kell futtatniuk.
  • Ezt a funkciót nem érdemes éles Azure Container Registry -nyilvántartásokhoz vagy számítási feladatokhoz használni.
  • A képintegritás legfeljebb 200 egyedi aláírást támogat egyszerre fürtszintűen.
  • A jelölés az egyetlen támogatott ellenőrző.
  • A naplózás az egyetlen támogatott ellenőrzési házirend-hatás.

A képintegritás működése

Képernyőkép a képintegritás alapvető architektúrájáról.

Az Image Integrity a Ratify, az Azure Policy és a Gatekeeper használatával ellenőrzi az aláírt rendszerképeket, mielőtt üzembe helyezené őket az AKS-fürtökön. A fürt képintegritásának engedélyezése podot Ratify helyez üzembe. Ez a Ratify pod a következő feladatokat hajtja végre:

  1. Az Azure Key Vault tanúsítványait egyezteti a CRD-kkel beállított Ratify konfiguráció alapján.
  2. Hozzáfér az ACR-ben tárolt képekhez, amikor az érvényesítési kérelmek az Azure Policyból érkeznek. Ennek a felületnek az engedélyezéséhez az Azure Policy kibővíti a Gatekeepert, az Open Policy Agent (OPA) beléptető webhookját.
  3. Meghatározza, hogy a célrendszerkép egy megbízható tanúsítványsal van-e aláírva, ezért megbízhatónak minősül-e.
  4. AzurePolicy és Gatekeeper használja az érvényesítési eredményeket megfelelőségi állapotként annak eldöntéséhez, hogy engedélyezi-e az üzembe helyezési kérelmet.

Képintegritás engedélyezése az AKS-fürtön

Feljegyzés

A rendszerkép-aláírás ellenőrzése vállalatirányítási forgatókönyv, és az Azure Policy használatával ellenőrzi a rendszerkép-aláírásokat az AKS-fürtökön. Javasoljuk, hogy használja az AKS beépített Azure Policy-kezdeményezését, amely az Azure Policy beépített definíciótárában érhető el.

  • Hozzon létre egy szabályzat-hozzárendelést az AKS-szabályzat kezdeményezésével [Preview]: Use Image Integrity to ensure only trusted images are deployed a az policy assignment create paranccsal.

    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}
    

    A Ratify pod a funkció engedélyezése után telepedik.

Feljegyzés

A szabályzat akkor helyezi üzembe a rendszerkép-integritás funkciót a fürtön, amikor bármilyen frissítési műveletet észlel a fürtön. Ha azonnal engedélyezni szeretné a szolgáltatást, létre kell hoznia egy szabályzat-szervizelést a az policy remediation create parancs használatával.

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}

Ellenőrzési konfigurációk beállítása

Ahhoz, hogy a képintegritás megfelelően ellenőrizze a célként aláírt lemezképet, K8s CRD-k használatával kubectlkell konfigurálnia Ratify a konfigurációkat.

Ebben a cikkben egy önaláírt hitelesítésszolgáltatói tanúsítványt használunk a hivatalos Ratify dokumentációból az ellenőrzési konfigurációk beállításához. További példákért lásd : Ratify CRDs.

  1. Hozzon létre egy VerifyConfig fájlt, verify-config.yaml és másolja a következő YAML-ben:

    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. Alkalmazza a VerifyConfig fürtöt a kubectl apply parancs használatával.

    kubectl apply -f verify-config.yaml
    

Mintaképek üzembe helyezése az AKS-fürtben

  • Aláírt rendszerkép üzembe helyezése a kubectl run demo paranccsal.

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

    Az alábbi példakimenet azt mutatja, hogy az Image Integrity lehetővé teszi az üzembe helyezést:

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

Ha saját képeket szeretne használni, tekintse meg a képaláírásra vonatkozó útmutatót.

Képintegritás letiltása

  • Tiltsa le a fürt képintegritását a az aks update jelölővel ellátott --disable-image-integrity paranccsal.

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

Szabályzat kezdeményezésének eltávolítása

  • Távolítsa el a házirend-kezdeményezést a az policy assignment delete paranccsal.

    az policy assignment delete --name 'deploy-trustedimages'
    

Következő lépések

Ebben a cikkben megtanulta, hogyan használhatja az Image Integrityet az aláírt képek ellenőrzésére, mielőtt üzembe helyezené őket az Azure Kubernetes Service-fürtökben. Ha szeretné megtudni, hogyan írhat alá saját tárolókat, olvassa el a Tárolórendszerképek összeállítása, aláírása és ellenőrzése a Közjegyző és az Azure Key Vault (előzetes verzió) használatával című témakört.