Code to Cloud에서 컨테이너 이미지 매핑

컨테이너 레지스트리에 저장되거나 Kubernetes 클러스터에서 실행되는 컨테이너 이미지에서 취약성이 식별되면 보안 실무자가 컨테이너 이미지를 처음 빌드한 CI/CD 파이프라인을 추적하고 개발자 수정 소유자를 식별하는 것이 어려울 수 있습니다. Microsoft Defender CSPM(클라우드 보안 태세 관리)의 DevOps 보안 기능을 사용하면 클라우드 네이티브 애플리케이션을 Code to Cloud에서 매핑하여 개발자 수정 워크플로를 쉽게 시작하고 컨테이너 이미지의 취약성 수정 시간을 단축할 수 있습니다.

필수 조건

  • 클라우드용 Defender가 온보딩된 Azure 계정. 아직 Azure 계정이 없다면 무료로 계정을 만듭니다.

  • 클라우드용 Microsoft Defender에 온보딩된 Azure DevOps 또는 GitHub 환경.

    • Azure DevOps 환경이 클라우드용 Microsoft Defender 온보딩되면 Microsoft Defender for DevOps 컨테이너 매핑이 자동으로 공유되고 연결된 모든 Azure DevOps 조직에 설치됩니다. 이렇게 하면 컨테이너 매핑을 위한 데이터를 수집하기 위해 모든 Azure Pipelines에 태스크가 자동으로 삽입됩니다.
  • Azure DevOps의 경우 Azure DevOps 조직에 MSDO(Microsoft 보안 DevOps) 확장이 설치됩니다.

  • GitHub의 경우 GitHub 리포지토리에 구성된 MSDO(Microsoft 보안 DevOps) 작업입니다. 또한 GitHub 워크플로에는 클라우드용 Defender 페더레이션에 대한 "id-token: write" 권한이 있어야 합니다. 예제는 이 YAML을 참조 하세요.

  • Defender CSPM이 사용하도록 설정되었습니다.

  • 컨테이너 이미지는 Docker를 사용하여 빌드해야 하며 Docker 클라이언트는 빌드 중에 Docker 서버에 액세스할 수 있어야 합니다.

Azure DevOps 파이프라인의 컨테이너 이미지를 컨테이너 레지스트리에 매핑

Azure DevOps CI/CD 파이프라인에서 컨테이너 이미지를 빌드하고 이를 레지스트리에 푸시한 후 클라우드 보안 탐색기를 사용하여 매핑을 확인합니다.

  1. Azure Portal에 로그인합니다.

  2. 클라우드용 Microsoft Defender>클라우드 보안 탐색기로 이동합니다. 컨테이너 이미지 매핑이 클라우드 보안 탐색기에 표시되는 데 최대 4시간이 걸릴 수 있습니다.

  3. 기본 매핑을 보려면 컨테이너 이미지>+>코드 리포지토리에 의해 푸시됨을 선택합니다.

    Screenshot that shows how to find basic mapping of containers.

  4. (선택 사항) 쿼리에 다른 필터를 추가하려면 컨테이너 이미지에서 +를 선택합니다. 예를 들어, CVE가 포함된 컨테이너 이미지만 필터링하려면 취약성 있음이 있습니다.

  5. 쿼리를 실행하면 컨테이너 레지스트리와 Azure DevOps 파이프라인 간의 매핑이 표시됩니다. Azure DevOps 파이프라인이 실행된 위치에 대한 추가 세부 정보를 보려면 에지 옆에 있는 ...을 선택합니다.

    Screenshot that shows an advanced query for container mapping results.

다음은 컨테이너 이미지 매핑을 활용하는 고급 쿼리의 예입니다. 인터넷에 노출되는 Kubernetes 워크로드부터 시작하여 심각도가 높은 CVE가 있는 모든 컨테이너 이미지를 컨테이너 이미지가 빌드된 Azure DevOps 파이프라인까지 추적할 수 있으므로 보안 전문가가 개발자 수정 워크플로를 시작할 수 있습니다.

Screenshot that shows basic container mapping results.

참고 항목

Azure DevOps 조직에 2023년 11월 15일 이전에 만들어진 Azure DevOps 커넥터가 있는 경우 조직 설정>확장 > 공유로 이동하여 컨테이너 이미지 매핑 데코레이터를 설치하세요. 사용자의 조직과 공유된 확장이 표시되지 않으면 다음 양식을 작성합니다.

GitHub 워크플로의 컨테이너 이미지를 컨테이너 레지스트리에 매핑

  1. MSDO 워크플로에 컨테이너 이미지 매핑 도구를 추가합니다.
name: Build and Map Container Image

on: [push, workflow_dispatch]

jobs:
  build:
    runs-on: ubuntu-latest
    # Set Permissions
    permissions:
      contents: read
      id-token: write
    steps:
      - uses: actions/checkout@v3
      - uses: actions/setup-python@v4
        with:
          python-version: '3.8' 
    # Set Authentication to Container Registry of Choice
   - name: Azure Container Registry Login 
        uses: Azure/docker-login@v1 
        with:
        login-server: <containerRegistryLoginServer>
        username: ${{ secrets.ACR_USERNAME }}
        password: ${{ secrets.ACR_PASSWORD }}
    # Build and Push Image
    - name: Build and Push the Docker image 
        uses: docker/build-push-action@v2
        with:
          push: true
          tags: ${{ secrets.IMAGE_TAG }}
          file: Dockerfile
     # Run Mapping Tool in MSDO
    - name: Run Microsoft Security DevOps Analysis
      uses: microsoft/security-devops-action@latest
      id: msdo
      with:
        include-tools: container-mapping

GitHub 워크플로에서 컨테이너 이미지를 빌드하고 이를 레지스트리에 푸시한 후 클라우드 보안 탐색기를 사용하여 매핑을 확인합니다.

  1. Azure Portal에 로그인합니다.

  2. 클라우드용 Microsoft Defender>클라우드 보안 탐색기로 이동합니다. 컨테이너 이미지 매핑이 클라우드 보안 탐색기에 표시되는 데 최대 4시간이 걸릴 수 있습니다.

  3. 기본 매핑을 보려면 컨테이너 이미지>+>코드 리포지토리에 의해 푸시됨을 선택합니다.

    Screenshot that shows basic container mapping.

  4. (선택 사항) 쿼리에 다른 필터를 추가하려면 컨테이너 이미지에서 +를 선택합니다. 예를 들어, CVE가 포함된 컨테이너 이미지만 필터링하려면 취약성 있음이 있습니다.

  5. 쿼리를 실행하면 컨테이너 레지스트리와 GitHub 워크플로 간의 매핑이 표시됩니다. GitHub 워크플로가 실행된 위치에 대한 추가 세부 정보를 보려면 에지 옆에 있는 ...를 선택합니다.

다음은 컨테이너 이미지 매핑을 활용하는 고급 쿼리의 예입니다. 인터넷에 노출되는 Kubernetes 워크로드부터 시작하면 심각도가 높은 CVE가 있는 모든 컨테이너 이미지를 컨테이너 이미지가 빌드된 GitHub 리포지토리까지 추적할 수 있으므로 보안 실무자가 개발자 수정 워크플로를 시작할 수 있습니다.

Screenshot that shows basic container mapping results.

다음 단계