Partilhar via


Usar a Integridade da Imagem para validar imagens assinadas antes de implantá-las em seus clusters do Serviço Kubernetes do Azure (AKS) (Visualização)

O Serviço Kubernetes do Azure (AKS) e seu modelo de contêiner subjacente fornecem maior escalabilidade e capacidade de gerenciamento para aplicativos nativos da nuvem. Com o AKS, você pode iniciar aplicativos de software flexíveis de acordo com as necessidades de tempo de execução do seu sistema. No entanto, esta flexibilidade pode introduzir novos desafios.

Nesses ambientes de aplicativos, o uso de imagens de contêiner assinadas ajuda a verificar se suas implantações são criadas a partir de uma entidade confiável e se as imagens não foram adulteradas desde sua criação. A Integridade da Imagem é um serviço que permite adicionar uma definição interna da Política do Azure para verificar se apenas imagens assinadas são implantadas em seus clusters AKS.

Nota

A Integridade da Imagem é um recurso baseado no Ratificar. Em um cluster AKS, o nome do recurso e o nome da propriedade são ImageIntegrity, enquanto os nomes dos pods de integridade de imagem relevantes contêm Ratify.

Importante

Os recursos de visualização do AKS estão disponíveis em uma base de autosserviço e opt-in. As visualizações prévias são fornecidas "como estão" e "conforme disponíveis" e são excluídas dos contratos de nível de serviço e da garantia limitada. As visualizações do AKS são parcialmente cobertas pelo suporte ao cliente com base no melhor esforço. Como tal, estas funcionalidades não se destinam a utilização em produção. Para obter mais informações, consulte 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 Extensão CLI versão 0.5.96 ou posterior.

  • Certifique-se de que o complemento de Política do Azure para AKS esteja habilitado em seu cluster. Se não tiver este suplemento instalado, consulte Instalar o suplemento Azure Policy para AKS.

  • Um cluster AKS habilitado com o Emissor OIDC. Para criar um novo cluster ou atualizar um cluster existente, consulte Configurar um cluster AKS com o Emissor OIDC.

  • Os EnableImageIntegrityPreview sinalizadores e AKS-AzurePolicyExternalData recursos registrados em sua assinatura do Azure. Registre os sinalizadores de recursos usando os seguintes comandos:

    1. Registre os EnableImageIntegrityPreview sinalizadores e AKS-AzurePolicyExternalData recurso usando 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"
      

      Pode levar alguns minutos para que o status apareça como Registrado.

    2. Verifique o status do registro usando 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. Quando o status mostrar Registrado, atualize o Microsoft.ContainerService registro do provedor de recursos usando o az provider register comando.

      az provider register --namespace Microsoft.ContainerService
      

Considerações e limitações

  • Seus clusters AKS devem executar o Kubernetes versão 1.26 ou superior.
  • Você não deve usar esse recurso para registros ou cargas de trabalho do Azure Container Registry (ACR) de produção.
  • O Image Integrity suporta um máximo de 200 assinaturas exclusivas simultaneamente 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 tela mostrando a arquitetura básica do Image Integrity.

A Integridade da Imagem usa o Ratificar, a Política do Azure e o Gatekeeper para validar imagens assinadas antes de implantá-las em seus clusters AKS. Habilitar a integridade da imagem no cluster implanta um Ratify pod. Este Ratify pod executa as seguintes tarefas:

  1. Reconcilia certificados do Cofre de Chaves do Azure de acordo com a configuração configurada por meio Ratify de CRDs.
  2. Acessa imagens armazenadas no ACR quando as solicitações de validação vêm da Política do Azure. Para habilitar essa experiência, a Política do Azure estende o Gatekeeper, um webhook do controlador de admissão para o Open Policy Agent (OPA).
  3. Determina se a imagem de destino é assinada com um certificado confiável e, portanto, considerada confiável.
  4. AzurePolicy e Gatekeeper consumir os resultados da validação como o estado de conformidade para decidir se permite a solicitação de implantação.

Ativar a integridade da imagem no seu cluster AKS

Nota

A verificação de assinatura de imagem é um cenário orientado à governança e aproveita a Política do Azure para verificar assinaturas de imagem em clusters AKS em escala. Recomendamos o uso da iniciativa de Política do Azure interna de Integridade de Imagem do AKS, que está disponível na biblioteca de definições interna da Política do Azure.

  • Crie uma atribuição de política com a iniciativa [Preview]: Use Image Integrity to ensure only trusted images are deployed de política AKS usando 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 é implantado depois que você ativa o recurso.

Nota

A política implanta o recurso Integridade da Imagem no cluster quando deteta qualquer operação de atualização no cluster. Se você quiser habilitar o recurso imediatamente, precisará criar uma correção de política usando 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, você precisa configurar Ratify as configurações por meio de CRDs K8s usando kubectl.

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

  1. Crie um VerifyConfig arquivo nomeado verify-config.yaml e copie no 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 usando o kubectl apply comando.

    kubectl apply -f verify-config.yaml
    

Implantar imagens de exemplo no cluster do AKS

  • Implante uma imagem assinada usando o kubectl run demo comando.

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

    A saída de exemplo a seguir mostra que a integridade da imagem permite a implantação:

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

Se você quiser usar suas próprias imagens, consulte as orientações para assinatura de imagens.

Desativar integridade da imagem

  • Desative a integridade da imagem no cluster usando o az aks update comando com o --disable-image-integrity sinalizador.

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

Remover iniciativa política

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

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

Próximos passos

Neste artigo, você aprendeu como usar a Integridade da Imagem para validar imagens assinadas antes de implantá-las em seus clusters do Serviço Kubernetes do Azure (AKS). Se você quiser saber como assinar seus próprios contêineres, consulte Criar, assinar e verificar imagens de contêiner usando o Notary e o Azure Key Vault (Visualização).