다음을 통해 공유


AKS(Azure Kubernetes Service) 클러스터(미리 보기)에 배포하기 전에 이미지 무결성을 사용하여 서명된 이미지의 유효성을 검사합니다.

AKS(Azure Kubernetes Service) 및 기본 컨테이너 모델은 클라우드 네이티브 애플리케이션의 확장성과 관리 효율성을 향상합니다. AKS를 사용하면 시스템의 런타임 요구에 따라 유연한 소프트웨어 애플리케이션을 시작할 수 있습니다. 그러나 이러한 유연성은 새로운 과제를 도입할 수 있습니다.

이러한 애플리케이션 환경에서 서명된 컨테이너 이미지를 사용하면 배포가 신뢰할 수 있는 엔터티에서 빌드되고 이미지가 생성된 이후에 변조되지 않았는지 확인하는 데 도움이 됩니다. 이미지 무결성은 서명된 이미지만 AKS 클러스터에 배포되는지 확인하기 위해 Azure Policy 기본 제공 정의를 추가할 수 있는 서비스입니다.

참고 항목

이미지 무결성은 Ratify를 기반으로 하는 기능입니다. AKS 클러스터에서 기능 이름 및 속성 이름은 ImageIntegrity이고 관련 이미지 무결성 Pod의 이름에는 Ratify가 포함됩니다.

Important

AKS 미리 보기 기능은 셀프 서비스에서 사용할 수 있습니다(옵트인 방식). 미리 보기는 "있는 그대로" 및 "사용 가능한 상태로" 제공되며 서비스 수준 계약 및 제한적 보증에서 제외됩니다. AKS 미리 보기의 일부는 고객 지원팀에서 최선을 다해 지원합니다. 따라서 이러한 기능은 프로덕션 용도로 사용할 수 없습니다. 자세한 내용은 다음 지원 문서를 참조하세요.

필수 구성 요소

  • Azure 구독 Azure 구독이 없는 경우 무료 계정을 만들 수 있습니다.

  • Azure CLI 또는 Azure PowerShell.

  • aks-preview CLI 확장 버전 0.5.96 이상.

  • 클러스터에서 AKS에 대한 Azure Policy 추가 기능이 사용하도록 설정되어 있는지 확인합니다. 이 추가 기능이 설치되어 있지 않은 경우 AKS용 Azure Policy 추가 기능 설치를 참조하세요.

  • OIDC 발급자로 사용하도록 설정된 AKS 클러스터. 새 클러스터를 만들거나 기존 클러스터를 업데이트하려면 OIDC 발급자를 사용하여 AKS 클러스터 구성을 참조하세요.

  • Azure 구독에 등록된 EnableImageIntegrityPreviewAKS-AzurePolicyExternalData 기능 플래그. 다음 명령을 실행하여 기능 플래그를 등록합니다.

    1. az feature register 명령을 사용하여 EnableImageIntegrityPreviewAKS-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"
      

      상태가 등록됨으로 표시되는 데 몇 분 정도 걸릴 수 있습니다.

    2. 또한 az feature show 명령을 사용하여 등록 상태를 확인합니다.

      # 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. 상태가 등록됨으로 표시되면 az provider register 명령을 사용하여 Microsoft.ContainerService 리소스 공급자의 등록을 새로 고칩니다.

      az provider register --namespace Microsoft.ContainerService
      

고려 사항 및 제한 사항

  • AKS 클러스터는 Kubernetes 버전 1.26 이상을 실행해야 합니다.
  • 프로덕션 ACR(Azure Container Registry) 레지스트리 또는 워크로드에는 이 기능을 사용하면 안 됩니다.
  • 이미지 무결성은 클러스터 전체에서 동시에 최대 200개의 고유한 서명을 지원합니다.
  • 표기법은 유일하게 지원되는 검증 도구입니다.
  • 감사는 유일하게 지원되는 확인 정책 효과입니다.

이미지 무결성 작동 방식

이미지 무결성에 대한 기본 아키텍처를 보여 주는 스크린샷.

이미지 무결성은 Ratify, Azure Policy 및 Gatekeeper를 사용하여 AKS 클러스터에 배포하기 전에 서명된 이미지의 유효성을 검사합니다. 클러스터에서 이미지 무결성을 사용하도록 설정하면 Ratify Pod가 배포됩니다. 이 Ratify Pod가 수행하는 작업은 다음과 같습니다.

  1. Ratify CRD를 통해 설정한 구성에 따라 Azure Key Vault의 인증서를 조정합니다.
  2. Azure Policy에서 유효성 검사 요청을 받으면 ACR에 저장된 이미지에 액세스합니다. 이 환경을 사용하도록 설정하기 위해 Azure Policy는 OPA(Open Policy Agent)에 대한 허용 컨트롤러 웹후크인 Gatekeeper를 확장합니다.
  3. 대상 이미지가 신뢰할 수 있는 인증서로 서명되어 신뢰할 수 있는 것으로 간주되는지 여부를 결정합니다.
  4. AzurePolicyGatekeeper는 유효성 검사 결과를 준수 상태로 사용하여 배포 요청을 허용할지 여부를 결정합니다.

AKS 클러스터에서 이미지 무결성 사용

참고 항목

이미지 서명 확인은 거버넌스 지향 시나리오이며 Azure Policy를 활용하여 AKS 클러스터의 이미지 서명을 대규모로 확인합니다. Azure Policy의 기본 제공 정의 라이브러리에서 사용할 수 있는 AKS의 이미지 무결성 기본 제공 Azure Policy 이니셔티브를 사용하는 것이 좋습니다.

  • az policy assignment create 명령을 사용하여 AKS 정책 이니셔티브 [Preview]: Use Image Integrity to ensure only trusted images are deployed으로 정책 할당을 만듭니다.

    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}
    

    Ratify Pod는 이 기능을 사용하도록 설정한 후에 배포됩니다.

참고 항목

이 정책은 클러스터에서 업데이트 작업을 검색할 때 클러스터에 이미지 무결성 기능을 배포합니다. 기능을 즉시 사용하도록 설정하려면 az policy remediation create 명령을 사용하여 정책 수정을 만들어야 합니다.

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}

확인 구성 설정

이미지 무결성이 대상 서명된 이미지를 제대로 확인하려면 kubectl을 사용하여 K8s CRD를 통해 Ratify 구성을 설정해야 합니다.

이 문서에서는 공식 Ratify 설명서의 자체 서명된 CA 인증서를 사용하여 확인 구성을 설정합니다. 자세한 예제는 Ratify CRD를 참조하세요.

  1. verify-config.yaml이라는 VerifyConfig 파일을 만들고 다음 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. kubectl apply 명령을 사용하여 클러스터에 VerifyConfig를 적용합니다.

    kubectl apply -f verify-config.yaml
    

AKS 클러스터에 샘플 이미지 배포

  • kubectl run demo 명령을 사용하여 서명된 이미지를 배포합니다.

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

    다음 예제 출력은 이미지 무결성을 사용하여 배포할 수 있음을 보여 줍니다.

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

사용자 고유의 이미지를 사용하려면 이미지 서명에 대한 지침을 참조하세요.

이미지 무결성 사용 안 함

  • --disable-image-integrity 플래그가 있는 az aks update 명령을 사용하여 클러스터에서 이미지 무결성을 사용하지 않도록 설정합니다.

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

정책 이니셔티브 제거

  • az policy assignment delete 명령을 사용하여 정책 이니셔티브를 제거합니다.

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

다음 단계

이 문서에서는 이미지 무결성을 사용하여 서명된 이미지의 유효성을 검사한 후 AKS(Azure Kubernetes Service) 클러스터에 배포하는 방법을 알아보았습니다. 고유한 컨테이너에 서명하는 방법을 알아보려면 Notary 및 Azure Key Vault(미리 보기)를 사용하여 컨테이너 이미지 빌드, 서명 및 확인을 참조하세요.