Share via


Utilize a Integridade da Imagem para validar imagens assinadas antes de as implementar nos clusters do Azure Kubernetes Service (AKS) (Pré-visualização)

Azure Kubernetes Service (AKS) e o modelo de contentor subjacente proporcionam uma maior escalabilidade e capacidade de gestão para aplicações nativas da cloud. Com o AKS, pode iniciar aplicações de software flexíveis de acordo com as necessidades de runtime do seu sistema. No entanto, esta flexibilidade pode introduzir novos desafios.

Nestes ambientes de aplicação, a utilização de imagens de contentor assinadas ajuda a verificar se as suas implementações são criadas a partir de uma entidade fidedigna e que as imagens não foram adulteradas desde a sua criação. A Integridade da Imagem é um serviço que lhe permite adicionar um Azure Policy definição incorporada para verificar se apenas as imagens assinadas são implementadas nos clusters do AKS.

Nota

A Integridade da Imagem é uma funcionalidade baseada em Ratificar. Num cluster do AKS, o nome da funcionalidade e o nome da propriedade são ImageIntegrity, enquanto os nomes dos pods relevantes da Integridade da Imagem contêm Ratify.

Importante

As funcionalidades de pré-visualização do AKS estão disponíveis numa base personalizada e opt-in. As pré-visualizações são fornecidas "tal como estão" e "conforme disponíveis", sendo excluídas dos contratos de nível de serviço e da garantia limitada. As pré-visualizações do AKS são parcialmente abrangidas pelo suporte ao cliente numa base de melhor esforço. Como tal, estas funcionalidades não se destinam à utilização de produção. Para obter mais informações, veja os seguintes artigos de suporte:

Pré-requisitos

  • Uma subscrição do Azure. Se não tiver uma subscrição do Azure, pode criar uma conta gratuita.

  • CLI do Azure ou Azure PowerShell.

  • aks-preview Versão 0.5.96 ou posterior da extensão da CLI.

  • Certifique-se de que o suplemento Azure Policy do AKS está ativado no cluster. Se não tiver este suplemento instalado, consulte Instalar Azure Policy suplemento para o AKS.

  • Um cluster do AKS ativado com o Emissor OIDC. Para criar um novo cluster ou atualizar um cluster existente, veja Configurar um cluster do AKS com o Emissor de OIDC.

  • Os EnableImageIntegrityPreview sinalizadores de funcionalidade e AKS-AzurePolicyExternalData registados na sua subscrição do Azure. Registe os sinalizadores de funcionalidades com os seguintes comandos:

    1. Registe os EnableImageIntegrityPreview sinalizadores de funcionalidade e AKS-AzurePolicyExternalData com o az feature register comando .

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

      O estado pode demorar alguns minutos a ser apresentado como Registado.

    2. Verifique o estado do registo com o az feature show comando .

      # 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. Assim que o estado mostrar Registado, atualize o registo do fornecedor de Microsoft.ContainerService recursos com o az provider register comando .

      az provider register --namespace Microsoft.ContainerService
      

Considerações e limitações

  • Os clusters do AKS têm de executar a versão 1.26 ou superior do Kubernetes.
  • Não deve utilizar esta funcionalidade para registos de Azure Container Registry de produção (ACR) ou cargas de trabalho.
  • A Integridade da Imagem suporta um máximo de 200 assinaturas exclusivas em simultâneo em todo o cluster.
  • A notação é o único verificador suportado.
  • A auditoria é o único efeito de política de verificação suportado.

Como funciona a Integridade da Imagem

Captura de ecrã a mostrar a arquitetura básica da Integridade da Imagem.

A Integridade da Imagem utiliza o Ratify, o Azure Policy e o Gatekeeper para validar imagens assinadas antes de as implementar nos clusters do AKS. Ativar a Integridade da Imagem no cluster implementa um Ratify pod. Este Ratify pod executa as seguintes tarefas:

  1. Reconcilia certificados do Azure Key Vault de acordo com a configuração que configurou através Ratify de CRDs.
  2. Acede a imagens armazenadas no ACR quando os pedidos de validação provêm de Azure Policy. Para ativar esta experiência, Azure Policy expande o Gatekeeper, um webhook do controlador de admissão para o Agente de Política Aberta (OPA).
  3. Determina se a imagem de destino está assinada com um certificado fidedigno e, portanto, considerada fidedigna.
  4. AzurePolicy e Gatekeeper consuma os resultados da validação como o estado de conformidade para decidir se pretende permitir o pedido de implementação.

Ativar a Integridade da Imagem no cluster do AKS

Nota

A verificação de assinatura de imagem é um cenário orientado para a governação e tira partido Azure Policy para verificar assinaturas de imagens em clusters do AKS em escala. Recomendamos que utilize a iniciativa de Azure Policy incorporada integridade de imagens do AKS, que está disponível na biblioteca de definições incorporada do Azure Policy.

  • Crie uma atribuição de política com a iniciativa [Preview]: Use Image Integrity to ensure only trusted images are deployed de política do AKS com o az policy assignment create comando .

    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}
    

    O Ratify pod é implementado depois de ativar a funcionalidade.

Nota

A política implementa a funcionalidade Integridade da Imagem no cluster quando deteta qualquer operação de atualização no cluster. Se quiser ativar a funcionalidade imediatamente, tem de criar uma remediação de política com o az policy remediation create comando .

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}

Configurar configurações de verificação

Para que a Integridade da Imagem verifique corretamente a imagem assinada de destino, tem de configurar Ratify as configurações através de CRDs K8s com kubectl.

Neste artigo, utilizamos um certificado de AC autoassinado da documentação oficial do Ratify para configurar as configurações de verificação. Para obter mais exemplos, veja Ratificar CRDs.

  1. Crie um VerifyConfig ficheiro com o nome verify-config.yaml e copie o seguinte 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. Aplique o VerifyConfig ao cluster com o kubectl apply comando .

    kubectl apply -f verify-config.yaml
    

Implementar imagens de exemplo no cluster do AKS

  • Implemente uma imagem assinada com o kubectl run demo comando .

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

    O resultado de exemplo seguinte mostra que a Integridade da Imagem permite a implementação:

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

Se quiser utilizar as suas próprias imagens, consulte a documentação de orientação para a assinatura de imagens.

Desativar a Integridade da Imagem

  • Desative a Integridade da Imagem no cluster com o az aks update comando com o --disable-image-integrity sinalizador.

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

Remover iniciativa de política

  • Remova a iniciativa de política com o az policy assignment delete comando .

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

Passos seguintes

Neste artigo, aprendeu a utilizar a Integridade da Imagem para validar imagens assinadas antes de as implementar nos clusters do Azure Kubernetes Service (AKS). Se quiser saber como assinar os seus próprios contentores, veja Compilar, assinar e verificar imagens de contentor com Notário e Key Vault do Azure (Pré-visualização).