GitHub 리포지토리 구성
Git Repos and Issue Tracking 도구 통합은 Git 리포지토리(리포지토리)를 위한 웹 기반 호스팅 서비스인 Github을 기반으로 합니다. 사용자는 저장소의 로컬 및 원격 사본 모두를 보유할 수 있습니다. 자세한 내용은 Git Repos and Issue Tracking{: external} 을 참조하세요.
분기 보호 정책은 보안, 협업을 적용하고 팀이 코드 품질 및 변경 관리 표준을 준수하는지 확인하는 데 도움을 줍니다. 이 주제는 분기 정책을 설정하고 관리하는 데 도움이 됩니다. DevSecOps 지점 보호 규칙을 구성해야 합니다.GitHub 저장소.
GitHub 이제 리포지토리 수준에서 보호 및 정책을 정의하는 보다 세분화되고 유연한 메커니즘인 브랜치 보호를 위한 규칙 집합 정의가 지원됩니다. 자세한 내용은 규칙 집합 정보를 참조하세요
지점 보호의 이점
-
향상된 코드 품질 및 협업: 분기 보호를 통해 가져오기 요청 및 승인이 필요하면 코드 품질 및 협업이 향상됩니다. 이를 통해 코드 일관성을 보장하고 팀의 코딩 표준을 준수할 수 있습니다. 변경사항은 검토를 거치며 버그 및 오류를 조기에 발견하는 데 도움이 되어 보다 신뢰할 수 있고 유지보수 가능한 코드를 생성합니다.
-
변경 가시성 증가: 가져오기 요청이 필요하면 코드 변경에 대한 가시성이 증가합니다. 이 단계는 수정사항 추적 및 잠재적 문제 식별을 단순화합니다.
-
코드 무결성 확인: 가져오기 요청 상태-가져오기 요청을 병합하기 전에 사전 정의된 표준 및 linters에 대해 자동화된 테스트를 실행하여 코드의 유효성을 검증합니다. 이 단계에서는 개발 주기 초기에 버그 및 기타 문제를 발견하여 코드 무결성을 유지합니다.
규칙 집합의 이점
-
세분화된 타겟팅: 강력한 fnmatch 패턴(예: release/**, refs/tags/v*)을 사용하여 브랜치 및 태그에 규칙을 적용하세요
-
중앙 집중식 관리: 단일 인터페이스에서 모든 브랜치 및 태그 보호를 구성하고 관리하세요. GitHub UI와 API는 명확한 규칙 연결 및 시행 세부 정보를 제공하여 투명성을 높입니다.
-
더 높은 유연성: 기존 브랜치 보호(브랜치당 하나의 규칙만 허용)와 달리, 규칙 집합을 사용하면 패턴을 사용하여 여러 브랜치에 적용할 수 있는 여러 계층의 규칙 집합을 정의할 수 있습니다. 하나의 브랜치에 여러 개의 적용 가능한 규칙 집합을 가질 수 있으므로 세분화된 제어, 여러 브랜치에서 재사용 가능한 정책, 복잡한 워크플로에 대한 더 나은 조율이 가능합니다.
에서 규칙 집합 구성 GitHub
리포지토리에 대해 GitHub 에서 규칙 집합을 구성하려면 다음 단계를 따르세요:
규칙 집합 설정에 액세스하기
- GitHub에서 저장소의 설정 탭으로 이동하십시오.
- 왼쪽 사이드바의 규칙 아래에서 규칙세트를 클릭하여 규칙세트 설정 페이지에 액세스합니다.
- 녹색 버튼 New Branch RuleSet 클릭하세요.
- 규칙 집합을 정의하는 데 필요한 정보를 추가하고 만들기를 클릭합니다.
규칙 집합에 보호 규칙 추가하기
녹색 버튼인 새 브랜치 규칙 집합을 클릭하면 규칙 집합 세부 정보를 입력하는 페이지가 표시됩니다.
- RuleSet 의 이름을 지정하고 활성화 상태 드롭다운에서 선택하여 규칙 집합을 활성화/비활성화/평가합니다
- 대상 추가를 클릭하여 대상 지점을 구성합니다. 포함**, 제외****, 기본값** 또는 모두를 선택하여 브랜치 타겟팅 기준을 구성합니다. GitHub 패턴 기반 타겟팅을 위한 fnmatch 구문을 지원합니다.
- 바이패스 추가를 클릭하여 바이패스 목록에서 바이패스 권한을 구성합니다. 검사를 우회할 수 있는 필수 역할을 추가할 수 있습니다. 목록을 비워 둘 수 있습니다(이는 기존 Branch 보호 설정에서 이러한 설정 우회 허용 안 함 을 사용하도록 설정하는 것과 동일합니다).
-
Branch 규칙에서 병합 전에 풀 리퀘스트 필요 옵션을 사용 설정합니다.
-
승인 필요 옵션을 사용으로 설정하고 병합 전에 필요한 승인 수 를 최소
1또는 팀의 필수 승인 수로 설정하십시오. -
다른 분기에 병합하기 전에 모든 최신 변경사항을 검토하려면 새 커미트를 푸시할 때 시간이 경과된 (stale) 가져오기 요청 승인 취소 옵션을 사용으로 설정하십시오.
제한사항
현재 바이패스 액터 목록은 리포지토리 레벨의 규칙 세트에서만 검색할 수 있습니다. 조직 수준에서 규칙 집합이 정의된 경우에는 표준 권한에 따라 해당 규칙 집합에서 이 정보를 검색할 수 없습니다.
조직 수준 규칙 집합에서 바이패스 액터 목록을 검색하려면 필요한 액세스 권한을 검토하고 파이프라인을 실행하는 기능적 ID/GitHub 계정에 상승된 권한 (조직에 대한 소유자 액세스 권한)을 부여하세요. 이는 GitHub's 권한 모델로 인해 발생하는데, 이 모델은 적절한 권한 부여 없이는 조직 수준 규칙 집합을 우회하는 행위자 메타데이터에 대한 가시성을 제한하여 민감한 정보의 유출을 방지합니다.
자세한 내용은 조직 규칙 세트 및 우회 액터에 대한 공식 문서 GitHub 를 참조하세요.
규칙 집합에 대한 상태 확인 구성
Require status checks to pass before merging옵션을 사용으로 설정하십시오.
이를 필수 상태 확인으로 설정할 수 있으려면 먼저 PR/CI 파이프라인을 미리 트리거해야 합니다 (UI에 기존 상태 확인만 나열됨).
Require status checks to pass before merging 옵션을 사용으로 설정한 후 가져오기 요청을 병합하기 전에 패스해야 하는 특정 상태 검사를 구성해야 합니다.
- 사용 가능한 상태 검사 목록에서 다음과 같은 검사 옵션을 사용으로 설정하십시오.
tekton/code-branch-protectiontekton/code-cis-checktekton/code-detect-secretstekton/code-unit-teststekton/code-vulnerability-scan
이러한 검사는 파이프라인에서 기본적으로 예상되는 풀 리퀘스트 상태 검사입니다.
모든 기본 규칙 집합 추가(구성 완료)
이 CURL 명령은 기본 필수 상태 확인 및 풀 리퀘스트 검토 설정을 모두 설정합니다.
curl -H "Authorization: Bearer $(cat ${APP_TOKEN_PATH})" "${APP_API_URL}/repos/${APP_REPO_OWNER}/${APP_REPO_NAME}/rulesets" \
-XPUT -d '{
"name": "Branch Protection Equivalent Ruleset",
"target": "branch",
"enforcement": "active",
"bypass_actors": [], // as the list is empty no one can bypass which is equivalent to enforce_admins: true with no restriction
"conditions": {
"ref_name": {
"include": ["refs/heads/master"],
"exclude": []
}
},
"rules": [
{
"type": "required_status_checks",
"parameters": {
"strict_required_status_checks_policy": true,
"required_status_checks": [
{
"context": "tekton/code-unit-tests"
},
{
"context": "tekton/code-branch-protection"
},
{
"context": "tekton/code-cis-check"
},
{
"context": "tekton/code-vulnerability-scan"
},
{
"context": "tekton/code-detect-secrets"
}
]
}
},
{
"type": "pull_request",
"parameters": {
"required_approving_review_count": 1,
"dismiss_stale_reviews_on_push": true,
"require_code_owner_review": false,
"require_last_push_approval": false,
"required_review_thread_resolution": false
}
}
]
}'
GitHub 에서 분기 보호 규칙 구성
GitHub 에서 저장소에 대한 분기 보호 규칙을 구성하려면 다음 단계를 수행하십시오.
분기 보호 설정 액세스
- GitHub에서 저장소의 설정 탭으로 이동하십시오.
- 왼쪽 사이드바에서 분기 를 클릭하여 분기 설정 페이지에 액세스하십시오.
- 분기 보호 규칙 섹션으로 아래로 스크롤하십시오.
- 구성할 분기를 찾으십시오 (일반적으로 "기본" 분기).
- 분기 이름 옆에 있는 편집 단추를 선택하여 보호 규칙을 수정하십시오.
분기 보호 규칙 추가
기존 규칙이 설정되지 않은 경우 규칙 추가 단추를 클릭하고 **Branch name pattern** 필드에 해당 분기 이름을 입력하십시오. 그런 다음 다음 단계를 진행합니다:
- 병합 전에 가져오기 요청 필요 옵션을 사용으로 설정하십시오.
- 승인 필요 옵션을 사용으로 설정하고 병합 전에 필요한 승인 수 를 최소
1또는 팀의 필수 승인 수로 설정하십시오. - 다른 분기에 병합하기 전에 모든 최신 변경사항을 검토하려면 새 커미트를 푸시할 때 시간이 경과된 (stale) 가져오기 요청 승인 취소 옵션을 사용으로 설정하십시오.
- 설정 우회 허용 안 함 ~ 예방 관리자 및 분기 보호 우회 권한이 있는 사용자 지정 역할이 필수 브랜치 보호 검사를 우회하도록 옵션을 활성화합니다.
현재, 경고 메시지는 로그에 표시됩니다( Do not allow bypassing these settings 가 활성화되어 있지 않은 경우). 3월 중순까지 의무적으로 실시될 때까지 분기 보호 점검은 실패하지 않을 것입니다. 파이프라인의 실패를 방지하기 위해 3월 중순까지 확인을 활성화해 주세요.
가져오기 요청을 마스터 분기에 병합하기 전에 반드시 승인해야 합니다. 이 규칙은 팀 구성원이 변경사항을 검토하고 검토하도록 하며 협업, 코드 품질 및 프로젝트 표준 준수를 승격합니다.
상태 검사 구성
상태 확인이 필요합니다.DevSecOps 코드에 대한 포괄적인 품질 및 보안 조치를 시행합니다. 이렇게 하면 코드 변경사항이 보호된 분기로 병합되기 전에 안전하고 신뢰할 수 있게 됩니다. 병합하기 전에 상태 검사를 통과하도록 요구하여 중단되거나 테스트되지 않은 코드가 프로덕션에 배치되는 것을 방지할 수 있습니다.
가져오기 요청이 제출되면 PR/CI 파이프라인은 제안된 변경사항을 확인하기 위해 일련의 테스트, 유효성 검증 및 기타 검사를 자동으로 트리거합니다.
모든 필수 상태 검사가 성공적으로 통과하는 경우에만 가져오기 요청이 보호된 분기로 병합하기에 적합한 것으로 간주됩니다.
내부 상태 확인을 활용하여DevSecOps, 프로젝트의 보호되는 브랜치에 변경 사항을 통합하기 전에 코드 품질을 유지하고 코딩 표준을 준수하며 취약성이나 심각한 결함이 없는지 확인할 수 있습니다.
상태 확인 구성에 대한 자세한 정보는 참조 구현에 대한 상태 확인만 구성(상태 확인 구성) 절을 참조하십시오.
Require status checks to pass before merging옵션을 사용으로 설정하십시오.
이를 필수 상태 확인으로 설정할 수 있으려면 먼저 PR/CI 파이프라인을 미리 트리거해야 합니다 (UI에 기존 상태 확인만 나열됨).
Require status checks to pass before merging 옵션을 사용으로 설정한 후 가져오기 요청을 병합하기 전에 패스해야 하는 특정 상태 검사를 구성해야 합니다.
- 사용 가능한 상태 검사 목록에서 다음과 같은 검사 옵션을 사용으로 설정하십시오.
tekton/code-branch-protectiontekton/code-cis-checktekton/code-detect-secretstekton/code-unit-teststekton/code-vulnerability-scan
표시된 상태 검사는 가져오기 요청을 병합하기 전에 패스해야 합니다.
이러한 검사는 파이프라인에서 기본적으로 예상되는 풀 리퀘스트 상태 검사입니다.
준수 검사의 사용자 정의 목록 설정
또한 파이프라인에 의해 유효성 검증되는 사용자 고유의 상태 검사 목록을 가져올 수도 있습니다. 이를 수행하려면 먼저 저장소에서 필요한 상태 검사 목록을 설정하고 branch-protection-rules-path 값 설정도 설정하십시오. 해당 경로는 앱 저장소에 상대적인 동일한 목록 상태 검사를 포함하는 JSON 파일에 대한 경로입니다.
|branch-protection-rules-path |text | 통합 앱 저장소에 상대적인 필수 준수 검사의 사용자 정의 목록을 포함하는 JSON 파일에 대한 경로를 설정합니다. | 선택사항 |
JSON 파일의 형식은 다음과 같습니다.
[{
"type": "branch-protection",
"name": "code-review",
"params": {
"checks": [
"tekton/code-branch-protection",
"tekton/code-unit-tests",
"tekton/code-cis-check",
"tekton/code-vulnerability-scan",
"tekton/code-detect-secrets"
]
}
}]
메모 :DevSecOps 기본적으로 분기 보호 확인 결과는 상태 확인 결과에 따라 결정됩니다.tekton/ 접두사.
준수 검사를 위해 사용자 정의된 접두어 설정
변경을 원하시면 tekton 다른 것의 접두사GitHub, 값을 설정해야 합니다.branch-protection-status-check-prefix 파이프라인의 환경 속성입니다.
|branch-protection-status-check-prefix |text | 분기 보호 상태 확인을 위한 접두어 텍스트 (기본값 tekton) | 선택사항 |
분기 보호 설정을 구성하고 나면 필수 조건이 충족되지 않는 한 보호 분기에 가져오기 요청을 병합하려는 모든 시도가 거부됩니다.
선택적 설정
위의 설정 외에도 분기 보호 규칙에 대해 다음과 같은 추가 설정을 구성하는 옵션이 있습니다. 상태 확인은 다음에서 제공됩니다.DevSecOps 이러한 설정을 확인하거나 적용하지 않습니다.
-
서명된 커미트 필요: 이 설정을 사용하려면 보호된 분기에 대한 모든 커미트가 서명되어야 하며, 이로 인해 코드가 잘못 변경되는 것을 방지할 수 있습니다.
-
선형 히스토리 필요: 이 설정을 사용하려면 보호된 분기에 대한 모든 커미트에 선형 히스토리가 있어야 합니다. 이는 보호 분기에 병합된 모든 가져오기 요청이 스쿼시 병합 또는 리베이스 병합을 사용해야 함을 의미합니다. 엄격한 선형 커미트 히스토리는 팀이 변경사항을 더 쉽게 되돌리는 데 도움이 될 수 있습니다.
이러한 추가 설정은 선택사항이며 특정 요구사항 및 환경 설정에 따라 사용자 정의할 수 있습니다.
CURL 명령을 통해 분기 보호 규칙 설정
모든 분기 보호 규칙 추가 (전체 구성)
$GH_TOKEN, $OWNER, $APP_API_URL $REPO, $BRANCH 변수를 바꾼 후 다음 curl 명령을 사용하여 분기 보호 규칙을 설정할 수도 있습니다.
curl -u ":$GH_TOKEN" $APP_API_URL/repos/$OWNER/$REPO/branches/$BRANCH/protection -XPUT -d '{"required_pull_request_reviews":{"dismiss_stale_reviews":true},"required_status_checks":{"strict":true,"contexts":["tekton/code-branch-protection","tekton/code-unit-tests","tekton/code-cis-check","tekton/code-vulnerability-scan","tekton/code-detect-secrets"]},"enforce_admins":null,"restrictions":null}'
이 CURL 명령은 필수 상태 검사 및 가져오기 요청 검토 설정을 모두 설정합니다.
이러한 설정이 구성되고 나면 하나 이상의 다른 사용자가 가져오기 요청을 승인하지 않는 한 $BRANCH 에 가져오기 요청을 병합하려는 모든 시도가 거부됩니다.
상태 검사만 구성 (상태 검사 구성)
필수 상태 검사만 구성하려는 경우 다음 CURL 명령을 참조로 사용할 수 있습니다.
curl -H "Authorization: Bearer $(cat ${APP_TOKEN_PATH})" "${APP_API_URL}/repos/${APP_REPO_OWNER}/${APP_REPO_NAME}/branches/master/protection" \
-XPUT -d '{"required_pull_request_reviews":{"dismiss_stale_reviews":true},"required_status_checks":{"strict":true,"contexts":["tekton/code-branch-protection","tekton/code-unit-tests","tekton/code-cis-check","tekton/code-vulnerability-scan","tekton/code-detect-secrets"]},"enforce_admins":null,"restrictions":null}'
참조 구현에서는 hello-compliance-app 저장소에 대한 샘플 구성을 이미 제공했으므로 이를 시작점으로 사용하고 필요에 따라 사용자 정의할 수 있습니다.
이전 예제에 따라 코드 품질을 확인하고 저장소에 대한 보안 조치를 준수하십시오. 이를 확인하려면 필요한 분기 보호 규칙 및 상태 검사를 구성하십시오.