Allstar는 보안 모범 사례를 준수하기 위해 GitHub 조직이나 저장소를 지속적으로 모니터링하는 GitHub 앱입니다. Allstar가 보안 정책 위반을 감지하면 문제를 생성하여 저장소나 조직 소유자에게 경고합니다. 일부 보안 정책의 경우 Allstar는 위반을 일으킨 프로젝트 설정을 자동으로 변경하여 예상 상태로 되돌릴 수도 있습니다.
Allstar의 목표는 프로젝트 보안에 영향을 미치는 파일과 설정을 세밀하게 제어할 수 있도록 하는 것입니다. 조직 및 저장소 수준에서 모니터링할 보안 정책과 정책 위반을 처리하는 방법을 선택할 수 있습니다. 새로운 정책을 개발하거나 기여할 수도 있습니다.
Allstar는 OpenSSF Scorecard 프로젝트의 일부로 개발되었습니다.
Allstar에서 원치 않는 문제가 발생하는 경우 다음 지침에 따라 선택을 해제하세요.
Allstar는 고도로 구성 가능합니다. 제어에는 세 가지 주요 수준이 있습니다.
이러한 구성은 조직의 .allstar
저장소에서 수행됩니다.
리포지토리 수준: Allstar를 사용하는 조직의 리포지토리 관리자는 리포지토리를 조직 수준 시행에 포함하거나 제외하도록 선택할 수 있습니다. 참고: 이러한 저장소 수준 제어는 조직 수준 설정에서 "저장소 재정의"가 허용되는 경우에만 작동합니다. 이러한 구성은 저장소의 .allstar
디렉터리에서 수행됩니다.
정책 수준: 관리자 또는 유지관리자는 특정 저장소에서 활성화할 정책과 정책 위반 시 Allstar가 취하는 조치를 선택할 수 있습니다. 이러한 구성은 조직의 .allstar
저장소(관리자) 또는 저장소의 .allstar
디렉터리(관리자)에 있는 정책 yaml 파일에서 수행됩니다.
조직 수준에서 Allstar를 설치하기 전에 Allstar를 실행할 저장소 수를 대략적으로 결정해야 합니다. 이는 옵트인 전략과 옵트아웃 전략 중에서 선택하는 데 도움이 됩니다.
Opt In 전략을 사용하면 Allstar를 실행하려는 저장소를 수동으로 추가할 수 있습니다. 리포지토리를 지정하지 않으면 Allstar가 설치되어 있어도 실행되지 않습니다. 전체 리포지토리 중 소수에만 정책을 시행하거나 더 많은 리포지토리에서 활성화하기 전에 단일 리포지토리에서 Allstar를 사용해 보려면 Opt In 전략을 선택하십시오. v4.3 릴리스부터 유사한 이름을 가진 여러 저장소를 쉽게 추가할 수 있도록 glob이 지원됩니다.
Opt Out 전략(권장)을 사용하면 모든 저장소에서 Allstar를 활성화하고 Allstar 시행을 거부할 저장소를 수동으로 선택할 수 있습니다. 모든 공개 저장소 또는 모든 비공개 저장소를 선택 해제하도록 선택할 수도 있습니다. 조직의 모든 리포지토리에서 Allstar를 실행하거나 소수의 리포지토리 또는 특정 유형(예: 퍼블릭 대 프라이빗) 리포지토리만 선택 해제하려는 경우 이 옵션을 선택하세요. v4.3 릴리스부터 유사한 이름을 가진 여러 저장소를 쉽게 추가할 수 있도록 glob이 지원됩니다.
수신 거부(권장) optOutStrategy = true | 선택 optOutStrategy = 거짓 | |
---|---|---|
기본 동작 | 모든 저장소가 활성화되었습니다. | 활성화된 저장소가 없습니다. |
수동으로 저장소 추가 | 저장소를 수동으로 추가하면 해당 저장소에서 Allstar가 비활성화됩니다. | 저장소를 수동으로 추가하면 해당 저장소에서 Allstar가 활성화됩니다. |
추가 구성 | optOutRepos: 나열된 저장소에서 Allstar가 비활성화됩니다. optOutPrivateRepos: true인 경우 모든 개인 저장소에서 Allstar가 비활성화됩니다. optOutPublicRepos: true인 경우 모든 공개 저장소에서 Allstar가 비활성화됩니다. (optInRepos: 이 설정은 무시됩니다) | optInRepos: 나열된 저장소에서 Allstar가 활성화됩니다. (optOutRepos: 이 설정은 무시됩니다) |
레포 재정의 | true인 경우: Repos는 자체 repo 파일의 설정을 사용하여 조직의 Allstar 시행을 옵트아웃할 수 있습니다. 해당 저장소에 적용되는 조직 수준 옵트인 설정은 무시됩니다. false인 경우: 저장소는 조직 수준에서 구성된 대로 Allstar 시행을 옵트아웃할 수 없습니다. | true인 경우: Repos는 조직 수준에서 repo에 대해 구성되지 않은 경우에도 조직의 Allstar 시행을 선택할 수 있습니다. 해당 저장소에 적용되는 조직 수준 옵트아웃 설정은 무시됩니다. false인 경우: 조직 수준에서 구성되지 않은 경우 Repos는 Allstar 시행을 선택할 수 없습니다. |
빠른 시작 및 수동 설치 옵션에는 모두 Allstar 앱 설치가 포함됩니다. 요청된 권한을 검토할 수 있습니다. 앱은 보안 규정 준수를 감지하기 위해 대부분의 설정 및 파일 콘텐츠에 대한 읽기 액세스를 요청합니다. 이슈를 생성하고 block
조치를 허용할 수 있도록 이슈 및 검사에 대한 쓰기 액세스를 요청합니다.
이 설치 옵션은 조직의 모든 저장소에서 Opt Out 전략을 사용하여 Allstar를 활성화합니다. 현재의 모든 정책이 활성화되며 Allstar는 문제를 제출하여 정책 위반에 대해 경고합니다. 이는 Allstar 사용을 시작하는 가장 빠르고 쉬운 방법이며 나중에 구성을 변경할 수도 있습니다.
노력: 매우 쉬움
단계:
.allstar
입력합니다.그게 다야! 현재 모든 Allstar 정책이 이제 모든 리포지토리에서 활성화되었습니다. 올스타는 정책을 위반할 경우 문제를 제기합니다.
구성을 변경하려면 수동 설치 지침을 참조하세요.
이 설치 옵션은 Opt In 또는 Opt Out 전략에 따라 구성 파일을 생성하는 과정을 안내합니다. 이 옵션은 처음부터 구성에 대한 보다 세부적인 제어를 제공합니다.
노력: 보통
단계:
각 정책은 저장소가 규정을 준수하지 않는 것을 감지할 때 Allstar가 수행할 작업으로 구성될 수 있습니다.
log
: 이는 기본 작업이며 실제로 모든 작업에 대해 발생합니다. 모든 정책 실행 결과 및 세부 정보가 기록됩니다. 로그는 현재 앱 운영자에게만 표시되며 이를 노출할 계획은 논의 중입니다.issue
: 이 작업은 GitHub 문제를 생성합니다. 정책당 하나의 이슈만 생성되며, 텍스트에는 정책 위반 내용이 자세히 설명되어 있습니다. 이슈가 이미 열려 있는 경우 업데이트 없이 24시간마다 댓글과 함께 핑됩니다(현재 사용자가 구성할 수 없음). 정책 결과가 변경되면 해당 이슈에 대한 새로운 댓글이 남고 이슈 본문에 링크됩니다. 위반 사항이 해결되면 Allstar는 5~10분 이내에 해당 문제를 자동으로 종료합니다.fix
: 이 작업은 정책에 따라 다릅니다. 정책은 정책 위반을 수정하기 위해 GitHub 설정을 변경합니다. 모든 정책이 이를 지원할 수 있는 것은 아닙니다(아래 참조).제안되었지만 아직 구현되지 않은 조치입니다. 앞으로 정의가 추가될 예정입니다.
block
: Allstar는 GitHub 상태 확인을 설정하고 확인이 실패할 경우 저장소의 모든 PR이 병합되지 않도록 차단할 수 있습니다.email
: Allstar는 저장소 관리자에게 이메일을 보냅니다.rpc
: Allstar는 일부 조직별 시스템에 rpc를 보냅니다.문제 작업을 구성하는 데 두 가지 설정을 사용할 수 있습니다.
issueLabel
조직 및 저장소 수준에서 사용할 수 있습니다. 이를 설정하면 Allstar에서 문제를 식별하기 위해 사용하는 기본 allstar
라벨이 무시됩니다.
issueRepo
는 조직 수준에서 사용할 수 있습니다. 이를 설정하면 조직에서 생성된 모든 이슈가 지정된 저장소에 강제로 생성됩니다.
Allstar 앱 활성화 구성과 유사하게 모든 정책은 조직의 .allstar
저장소 또는 저장소의 .allstar
디렉터리에 있는 yaml 파일을 사용하여 활성화되고 구성됩니다. 앱과 마찬가지로 정책은 기본적으로 선택되어 있으며 기본 log
작업으로도 눈에 띄는 결과가 생성되지 않습니다. 모든 정책을 활성화하는 간단한 방법은 다음 내용이 포함된 각 정책에 대한 yaml 파일을 생성하는 것입니다.
optConfig:
optOutStrategy: true
action: issue
각 정책에 대해 fix
작업이 작동하는 방식에 대한 자세한 내용은 아래에 자세히 설명되어 있습니다. 아래 생략 시 fix
조치가 적용되지 않습니다.
이 정책의 구성 파일 이름은 branch_protection.yaml
이며 구성 정의는 여기에 있습니다.
분기 보호 정책은 GitHub의 분기 보호 설정이 지정된 구성에 따라 올바르게 설정되었는지 확인합니다. 문제 텍스트는 어떤 설정이 잘못되었는지 설명합니다. 설정 수정에 대해서는 GitHub 설명서를 참조하세요.
fix
작업은 지정된 정책 구성을 준수하도록 분기 보호 설정을 변경합니다.
이 정책의 구성 파일 이름은 binary_artifacts.yaml
이며 구성 정의는 여기에 있습니다.
이 정책에는 스코어카드의 확인이 포함되어 있습니다. 규정 준수를 위해 저장소에서 바이너리 아티팩트를 제거하세요. 스코어카드 결과가 자세할 수 있으므로 모든 세부 정보를 보려면 스코어카드 자체를 실행해야 할 수도 있습니다.
이 정책의 구성 파일 이름은 codeowners.yaml
이며 구성 정의는 여기에 있습니다.
이 정책은 리포지토리에 CODEOWNERS
파일이 있는지 확인합니다.
이 정책의 구성 파일 이름은 outside.yaml
이며 구성 정의는 여기에 있습니다.
이 정책은 외부 협력자에게 저장소에 대한 관리자(기본값) 또는 푸시(선택 사항) 액세스 권한이 있는지 확인합니다. 조직 구성원만 이 액세스 권한을 가져야 합니다. 그렇지 않으면 신뢰할 수 없는 구성원이 관리자 수준 설정을 변경하고 악성 코드를 범할 수 있습니다.
이 정책의 구성 파일 이름은 security.yaml
이며 구성 정의는 여기에 있습니다.
이 정책은 저장소의 SECURITY.md
에 보안 정책 파일이 있고 비어 있지 않은지 확인합니다. 생성된 문제에는 리포지토리에 보안 정책을 커밋하는 데 도움이 되는 GitHub 탭에 대한 링크가 있습니다.
이 정책의 구성 파일 이름은 dangerous_workflow.yaml
이며 구성 정의는 여기에 있습니다.
이 정책은 GitHub Actions 워크플로 구성 파일( .github/workflows
)에서 알려진 위험한 동작과 일치하는 패턴이 있는지 확인합니다. 이 검사에 대한 자세한 내용은 OpenSSF Scorecard 설명서를 참조하세요.
이 정책의 구성 파일 이름은 scorecard.yaml
이며 구성 정의는 여기에 있습니다.
이 정책은 checks
구성에 나열된 모든 성과표 검사를 실행합니다. 모든 점검 실행의 점수는 threshold
설정 이상이어야 합니다. 각 검사에 대한 자세한 내용은 OpenSSF Scorecard 설명서를 참조하세요.
이 정책의 구성 파일 이름은 actions.yaml
이며 구성 정의는 여기에 있습니다.
이 정책은 각 저장소의 GitHub Actions 워크플로 구성 파일( .github/workflows
)(경우에 따라 워크플로 실행)을 확인하여 해당 파일이 조직 수준 구성에 정의된 규칙(예: 요구, 거부)과 일치하는지 확인합니다. 정책.
이 정책의 구성 파일 이름은 admin.yaml
이며 구성 정의는 여기에 있습니다.
이 정책은 기본적으로 모든 저장소에 관리자로 할당된 사용자 또는 그룹이 있어야 하는지 확인합니다. 이를 통해 사용자가 팀이 아닌 관리자가 될 수 있는지 여부를 선택적으로 구성할 수 있습니다.
사용되는 Allstar 구성의 예로 이 저장소를 참조하세요. 조직 관리자로서 조직에서 Allstar가 어떻게 사용되고 있는지에 대한 정보가 포함된 README.md를 고려해보세요.
기본적으로 위의 allstar.yaml
파일과 같은 조직 수준 구성 파일은 .allstar
저장소에 있을 것으로 예상됩니다. 이 저장소가 없으면 .github
저장소 allstar
디렉터리가 보조 위치로 사용됩니다. 명확히 하기 위해 allstar.yaml
의 경우:
상위 | 저장소 | 길 |
---|---|---|
주요한 | .allstar | allstar.yaml |
반성 | .github | allstar/allstar.yaml |
이는 아래에 설명된 대로 개별 정책에 대한 조직 수준 구성 파일에도 적용됩니다.
Allstar는 또한 저장소와 동일한 이름을 가진 디렉터리 아래에 있는 조직의 .allstar
저장소에서 저장소 수준 정책 구성을 찾습니다. 이 구성은 "repo override"가 비활성화되었는지 여부에 관계없이 사용됩니다.
예를 들어 Allstar는 다음 순서로 특정 repo myapp
에 대한 정책 구성을 조회합니다.
저장소 | 길 | 상태 |
---|---|---|
myapp | .allstar/branch_protection.yaml | "repo override"가 허용되는 경우. |
.allstar | myapp/branch_protection.yaml | 항상. |
.allstar | branch_protection.yaml | 항상. |
.github | allstar/myapp/branch_protection.yaml | .allstar 저장소가 존재하지 않는 경우. |
.github | allstar/branch_protection.yaml | .allstar 저장소가 존재하지 않는 경우. |
조직 수준 Allstar 및 정책 구성 파일의 경우 baseConfig
필드를 지정하여 기본 Allstar 구성이 포함된 다른 저장소를 지정할 수 있습니다. 이는 예를 들어 설명하는 것이 가장 좋습니다.
여러 GitHub 조직이 있지만 단일 Allstar 구성을 유지하려고 한다고 가정해 보겠습니다. 기본 조직은 "acme"이고 저장소 acme/.allstar
에는 allstar.yaml
포함되어 있습니다.
optConfig :
optOutStrategy : true
issueLabel : allstar-acme
issueFooter : Issue created by Acme security team.
"acme-sat"라는 위성 GitHub 조직도 있습니다. 기본 구성을 재사용하고 싶지만 특정 저장소에서 Allstar를 비활성화하여 상단에 일부 변경 사항을 적용하고 싶습니다. acme-sat/.allstar
저장소에는 allstar.yaml
포함되어 있습니다.
baseConfig : acme/.allstar
optConfig :
optOutRepos :
- acmesat-one
- acmesat-two
이것은 acme/.allstar
의 모든 구성을 기본 구성으로 사용하지만 기본 구성 위에 현재 파일의 변경 사항을 적용합니다. 이것이 적용되는 방식을 JSON Merge Patch라고 설명합니다. baseConfig
GitHub <org>/<repository>
여야 합니다.
CONTRIBUTING.md를 참조하세요.