Microsoft AZ-400: 패키지 관리 및 아티팩트 관리 — 학습 가이드
다음의 일부입니다: Microsoft DevOps Engineer Expert AZ-400 — 학습 가이드. 검증된 답안으로 연습하기: Microsoft 시험 허브, 또는 다음에서 시간 제한 모의고사 풀기: ExamRoll.io.
보안 및 규정 준수 제어
취약점 스캔은 커밋 및 빌드 시점에 강제되어야 합니다. 알려진 취약한 종속성을 식별하고 업그레이드 가이드를 제공하는 도구를 통합하십시오. 많은 Azure DevOps 환경에서 SonarQube는 종속성 위험을 드러내는 규칙을 포함하여 문제를 플래그하는 품질 게이트 전략의 일부로 사용됩니다. 생태계 전반에 걸쳐 더 철저한 CVE 커버리지를 위해 전용 SCA 도구(예: Snyk, Mend/WhiteSource, Black Duck)로 보완할 수 있습니다. .NET의 경우 dotnet list package –vulnerable, npm의 경우 npm audit이 추가적인 신호를 제공할 수 있으며, Java의 경우 OWASP Dependency-Check를 빌드 단계로 추가할 수 있습니다.
라이선스 규정 준수는 승인된 라이선스 허용 목록에 대해 SBOM 또는 매니페스트를 스캔하여 시행됩니다. Black Duck은 제한된 라이선스가 감지될 때 빌드를 차단하기 위해 Azure Pipelines에 일반적으로 추가됩니다. 스캔 보고서를 파이프라인 아티팩트로 저장하고 감사 추적성을 위해 릴리스에 첨부하십시오.
허용/차단된 패키지는 임시 예외보다는 정책으로 구현하는 것이 가장 좋습니다:
- 소비자를 릴리스 뷰로 제한하고, 검증된 버전만 승격시키십시오.
- 동결이 필요할 때 새로운 업스트림 다운로드를 비활성화하여 캐시된 버전만 사용할 수 있도록 하십시오.
- npm 스코프와 피드별 권한을 사용하여 네임스페이스를 제한하십시오.
- 허용되지 않는 패키지나 라이선스에 대해 빌드를 실패시키는 파이프라인 검사를 추가하고, 아티팩트 승격을 승인 워크플로우로 사용하십시오.
감사 및 거버넌스는 업스트림 캐싱이 포함된 중앙 집중식 피드를 통해 이점을 얻습니다. 이를 통해 패키지 수신을 위한 단일 제어 지점, 불변의 히스토리, SBOM 생성을 위한 일관된 출처를 확보할 수 있습니다.
버전 관리 자동화 및 보존 경제학
시맨틱 버전 관리는 자동화를 통해 가장 쉽게 유지 관리할 수 있습니다:
- GitVersion은 Git 히스토리와 브랜치 이름 지정 규칙을 읽어 예측 가능하게 버전을 계산합니다(예: main은 1.4.0, feature/*는 1.5.0-feature.3 생성). 모드(Mainline 또는 Continuous Delivery), 프리릴리스 레이블, 태그 소스를 구성하십시오. 계산된 버전을 패킹하기 전에 csproj, package.json 또는 Gradle의 version 속성에 주입하십시오.
- 자동 버전 범핑은 커밋 시맨틱이나 PR 레이블을 따를 수 있습니다. 예를 들어, chore는 버전을 올리지 않고, feat는 마이너 버전을, fix는 패치 버전을, breaking-change는 메이저 버전을 올립니다. 파이프라인 단계를 사용하여 buildNumber를 설정하고 pack/publish 작업에 버전을 전달하십시오.
- 프리릴리스 레이블은 브랜치의 의도를 반영해야 합니다(예: feature 브랜치에는 -alpha, release 브랜치에는 -rc). 프리릴리스를 프리릴리스 뷰에 게시하고 스테이징에 성공하면 릴리스로 승격시키십시오.
보존 및 스토리지 비용 관리는 사전 예방적인 정책이 필요합니다:
- 자동 정리: 피드별 보존 정책을 구성하여 N일/버전이 지난 오래되고 승격되지 않은 버전을 삭제합니다. 지원 기간이 긴 중요한 라이브러리의 경우 보존 기간을 연장하십시오.
- 고정: 수명이 긴 제품이나 규정 준수 스냅샷에 포함된 버전을 명시적으로 고정하여 삭제에서 제외합니다.
- 스토리지 최적화: 공개 패키지의 중복된 복사본을 로컬에 게시하는 것보다 업스트림 캐싱을 선호하고, 오버헤드를 줄이기 위해 실용적인 경우 피드를 통합합니다. 피드 스토리지 증가를 모니터링하고 주기적으로 정책 임계값을 조정하십시오.
| 업스트림 소스 | Azure DevOps 구성 |
|---|---|
| NuGet | 업스트림으로 https://api.nuget.org/v3/index.json에 연결하여 NuGet.org 패키지를 프록시하고 캐시합니다. |
| npm | https://registry.npmjs.com에 연결하여 인증된 피드 뒤에서 npmjs.com 종속성을 캐시합니다. |
| Maven | Maven Central(예: https://repo.maven.apache.org/maven2)에 연결하여 엔터프라이즈 소비자가 단일 URL을 통해 피드에서 가져오도록 합니다. |
### 실제 문제 시나리오
Adobe는 여러 클라우드와 언어에 걸쳐 패키지 거버넌스를 표준화하고, 공개 레지스트리의 불안정성으로 인한 장애를 줄이며, 라이선스 정책을 시행해야 합니다. 팀들은 내부 NuGet, npm, Maven 아티팩트를 게시하고 여러 언어에서 사용되는 대규모 CLI 도구를 공유합니다.
- 중앙 집중식 피드 및 업스트림 설정
- 조치: 세 개의 Azure Artifacts 피드 생성: “oss-upstream”(NuGet.org, npmjs.com, Maven Central로의 업스트림 포함), “shared-libs”(내부 라이브러리), “productA”(애플리케이션 레벨 패키지). 모든 피드에 뷰(local, prerelease, release) 활성화.
- 근거: “oss-upstream”은 단일 인그레스/캐싱 지점이 되고, “shared-libs”와 “productA”는 신뢰 경계와 승격 워크플로우를 분리합니다.
- 뷰를 통한 클라이언트 사용 구성
- 조치: 런타임 소비자를 위해 nuget.config, .npmrc, settings.xml/Gradle 리포지토리를 각 피드의 release 뷰로 지정하고, 통합 테스트 파이프라인을 위해 prerelease 뷰로 지정.
- 근거: 뷰는 클라이언트 구성을 변경하지 않고도 승격되고 검증된 패키지만 프로덕션 소비자에 도달하도록 강제합니다.
- 시맨틱 버저닝을 사용한 게시 구현
- 조치: 라이브러리와 앱의 CI에 GitVersion 추가. dotnet pack, npm version(Git 태깅 없이, 파이프라인에서 제어), Gradle/Maven 버전 필드에 버전 주입을 추진. local에 게시하고, CI 성공 시 prerelease로 승격하며, 스테이징 테스트 후 release로 자동 승격.
- 근거: Git 플로우에 맞춰진 결정론적 버전 관리는 일관된 사전 릴리스 레이블과 자동화 준비된 승격을 보장합니다.
- 인증된 피드 보안 및 개발자 경험 확보
- 조치: 파이프라인에서 NuGet Authenticate 및 npm Authenticate 작업 사용. 개발자 머신에 Azure Artifacts Credential Provider 활성화. Azure DevOps 변수 그룹을 통해 순환되는 PAT로 Maven settings.xml 서버 구성.
- 근거: 원활한 토큰 기반 인증은 자격 증명 확산을 방지하고 비대화형 CI 복원을 지원합니다.
- 취약점 및 라이선스 정책 시행
- 조치: 빌드에 SonarQube 품질 게이트 추가. Black Duck을 통합하여 라이선스 허용 목록을 시행하고, 허용되지 않는 라이선스나 심각도 높은 CVE가 있는 빌드를 차단. npm 및 .NET의 경우, npm audit 및 dotnet list package –vulnerable 실행. SBOM을 빌드 아티팩트로 게시.
- 근거: 여러 보완적인 스캐너는 사각지대를 줄입니다. Black Duck은 대규모 라이선스 준수를 제공하며, SonarQube 및 생태계 도구는 보안 회귀를 조기에 발견합니다.
- 필요 시 인그레스 제어 및 동결
- 조치: “oss-upstream”에서만 업스트림 다운로드를 허용. 인시던트 대응 중에는 새로운 업스트림 인그레스를 비활성화하여 공급망을 동결. 캐시된 패키지에 의존하여 빌드를 유지.
- 근거: 초크 포인트(choke point)는 공개 레지스트리가 손상되거나 불안정할 경우 신속한 격리를 가능하게 합니다.
- 보존 및 고정 적용
- 조치: shared-libs 및 productA의 마지막 5개 버전을 보존. 30일 이상 된 미승격 버전 삭제. LTS 브랜치 및 규제 기준선에 연결된 버전을 고정.
- 근거: 자동화된 정리는 스토리지 비용을 줄이는 동시에, 고정(pinning)은 감사 가능성과 롤백을 보존합니다.
- 최소 권한 액세스 위임
- 조치: 플랫폼 엔지니어링에 Owners 할당. 게시/사용 중단이 필요한 라이브러리 유지 관리자에게 Contributors 할당. 릴리스 아티팩트만 소비하는 제품 팀에 Readers 할당.
- 근거: 책임에 따라 기능을 조정합니다. 개발자는 광범위한 관리 권한 없이도 목록에서 제외(unlist)/사용 중단(deprecate)할 수 있습니다.
- 여러 언어에서 사용되는 도구를 위한 Universal packages
- 조치: 내부 CLI 및 IaC 모듈을 Universal Publish/Download 작업을 통해 Universal packages로 게시. 시맨틱하게 버전을 관리하고 뷰를 통해 승격.
- 근거: 특정 언어에 국한되지 않는 자산에 대해 일관된 소비 모델과 함께 RBAC, 보존 및 승격 기능을 제공합니다.
- 측정 및 반복
- 조치: 피드 스토리지, 캐시 적중률, 승격 리드 타임을 추적. 보존 임계값, 업스트림 정책, 승격 기준을 그에 따라 조정.
- 근거: 지속적인 튜닝은 포트폴리오 규모가 발전함에 따라 안정성, 비용 효율성 및 규정 준수를 유지합니다.
← 모니터링 · 모든 도메인 · 애자일 계획 및 작업 관리 →
이 문제 연습하기 → · ExamRoll.io에서 시간 제한 연습 →
Pass the whole exam — not just this question
You found this answer. Get every verified question and explanation in one place, and save hours of prep. Free to start.
시험 합격하기 →