비밀(Secrets) 살펴보기

비밀(Secrets) 살펴보기

GitHub Actions 워크플로에서 사용되는 비밀에 대해 함께 알아볼게요.

출처: Secrets

본문

비밀 소개

비밀을 사용하면 민감한 정보를 조직, 리포지토리 또는 리포지토리 환경에 저장할 수 있어요. 비밀은 조직, 리포지토리 또는 리포지토리 환경의 GitHub Actions 워크플로에서 사용하기 위해 만드는 변수예요.

GitHub Actions는 워크플로에 비밀을 명시적으로 포함한 경우에만 비밀을 읽을 수 있어요.

비밀이 동작하는 방식

비밀은 Libsodium sealed boxes를 사용해 GitHub에 도달하기 전에 암호화돼요. 이는 비밀이 UI를 통해 또는 REST API를 통해 제출될 때 발생해요. 이 클라이언트 측 암호화는 GitHub 인프라 내에서 우발적 로깅(예: 예외 로그, 요청 로그 등)과 관련된 위험을 최소화하는 데 도움이 돼요. 비밀이 업로드되면 GitHub이 이를 복호화할 수 있고, 그러면 워크플로 런타임에 주입할 수 있게 돼요.

조직 수준 비밀

조직 수준 비밀은 여러 리포지토리 간에 비밀을 공유할 수 있게 해줘서 중복 비밀을 만들 필요를 줄여줘요. 한 곳에서 조직 비밀을 업데이트하면 그 비밀을 사용하는 모든 리포지토리 워크플로에 변경 사항이 적용되는 것도 보장돼요.

조직용 비밀을 만들 때 정책을 사용해 리포지토리별 접근을 제한할 수 있어요. 예를 들어 모든 리포지토리에 접근 권한을 부여하거나, 비공개 리포지토리만 또는 지정된 리포지토리 목록으로만 접근을 제한할 수 있어요.

환경 비밀의 경우 필수 검토자(required reviewers)를 활성화해 비밀에 대한 접근을 제어할 수 있어요. 워크플로 작업은 필수 승인자가 승인을 부여할 때까지 환경 비밀에 접근할 수 없어요.

비밀을 액션에서 사용할 수 있게 하려면 워크플로 파일에서 비밀을 입력(input) 또는 환경 변수로 설정해야 해요. 액션이 기대하는 입력과 환경 변수를 알아보려면 액션의 README 파일을 검토하세요. GitHub Actions 워크플로 문법을 참고하세요.

자격 증명 권한 제한

자격 증명을 생성할 때 가능한 최소 권한을 부여하는 것을 권장해요. 예를 들어 개인 자격 증명 대신 배포 키나 서비스 계정을 사용하세요. 필요한 것만 그렇다면 읽기 전용 권한을 부여하는 것을 고려하고, 접근을 최대한 제한하세요.

개인 액세스 토큰(classic)을 생성할 때는 필요한 최소 스코프를 선택하세요. 세밀한(fine-grained) 개인 액세스 토큰을 생성할 때는 최소 권한과 필요한 리포지토리 접근만 선택하세요.

개인 액세스 토큰 대신 세밀한 권한과 단기 토큰을 사용하는 GitHub App을 고려해 보세요. GitHub App은 세밀한 개인 액세스 토큰과 비슷하지만, 개인 액세스 토큰과 달리 GitHub App은 사용자에 묶여 있지 않아서 앱을 설치한 사용자가 조직을 떠나도 워크플로가 계속 동작해요. 자세한 내용은 GitHub Actions 워크플로에서 GitHub App으로 인증된 API 요청 만들기를 참고하세요.

자동 가림(redaction)되는 비밀

GitHub Actions는 워크플로 로그에 인쇄되는 모든 GitHub 비밀의 내용을 자동으로 가려요(redact).

GitHub Actions는 비밀로 저장되지는 않지만 민감한 것으로 인식되는 정보도 가려요. 자동으로 가려지는 비밀 목록은 비밀 참조를 참고하세요.

비밀 값을 변환할 수 있는 방법이 여러 가지이므로 이 가림은 보장되지 않아요. 또한 러너는 현재 작업 안에서 사용된 비밀만 가릴 수 있어요. 결과적으로 비밀이 가려지도록 보장하고 비밀과 관련된 다른 위험을 제한하기 위해 따라야 할 특정 보안 사전 조치가 있어요. 비밀에 대한 보안 모범 사례 참조 목록은 안전한 사용 참조를 참고하세요.

추가 자료

더 알아보기 (Learn more)