Github 및 Heroku를 사용할 때 민감한 데이터를 어떻게 처리합니까?


49

나는 아직 Git이 작동하는 방식에 익숙하지 않다 (그리고 Linus 이외의 누군가가;인지 궁금하다).

Heroku를 사용하여 응용 프로그램을 호스팅하는 경우 Git 리포지토리에서 코드를 확인해야합니다. 오픈 소스 프로젝트에서 작업하는 경우 Github 또는 다른 Git 호스트에서이 리포지토리를 공유 할 가능성이 높습니다.

공개 리포지토리에서 확인할 사항이 없습니다. 데이터베이스 비밀번호, API 키, 인증서 등 ... 그러나 코드를 사용하여 코드를 Heroku로 푸시하기 때문에 여전히 Git 저장소에 포함되어야합니다.

이 사용 사례로 작업하는 방법?

참고 : Heroku 또는 PHPFog는 서버 변수를 사용 하여이 문제를 피할 수 있다는 것을 알고 있습니다. 내 질문은 코드의 일부를 "숨기는"방법에 대한 것입니다.


3
개인 저장소를 사용하여 시작합니다. 그런 다음 신뢰하는 정도에 따라 중요한 데이터가 포함 된 구성 파일을 .gitignore하고 로컬로만 버전을 지정할 수 있습니다. (로컬은 사내 서버이거나 아는 사람이 될 수있는 외부의 중앙이 아닌 위치 임)
Rig

답변:


30

heroku에서 비밀번호 / api 키를 비밀로 유지하는 선호되는 방법은 heroku 명령 행 응용 프로그램을 통해 구성 값을 설정하는 것입니다. heroku dev 센터 기사 에서 가져온 다음 예제

(아래 예와 전체 답변은 rails 앱과 관련이 있습니다)

$ cd myapp
$ heroku config:add S3_KEY=8N029N81 S3_SECRET=9s83109d3+583493190
Adding config vars and restarting myapp... done, v14
S3_KEY:     8N029N81
S3_SECRET:  9s83109d3+583493190

그런 다음 ENV [] 변수를 사용하여 코드에서 이러한 구성 값을 참조하십시오.

AWS::S3::Base.establish_connection!(
  :access_key_id     => ENV['S3_KEY'],
  :secret_access_key => ENV['S3_SECRET']
)

이렇게하면 민감한 비밀번호가 git 저장소에 저장되지 않습니다. (참고 : 앱을 로컬로 실행할 때 .bashrc파일 에서이 값을 설정 하십시오.

또한 어떤 유형의 응용 프로그램을 실행 중인지 잘 모르겠지만 Rails에서 heroku는 database.yml 파일을 사용하지 않고 단순히 앱 설정에 따라 데이터베이스 사용자 이름 / 암호를 설정합니다. 따라서 자격 증명을 git에 저장하지 않아도됩니다.

당신이 당신의 자신의 응용 프로그램을 실행하고 개인 유지하려는 경우에도 또한, github에 훌륭한 대안이다 의 bitbucket 무료 전용 저장소를 제공합니다.


17

몇 가지 아이디어 ... 공개 키 암호화는 가장 유연한 답변입니다.

난독 화 (코드 만 해당)

숨기려는 코드 부분의 경우 다른 프로젝트에 배치하고 컴파일 한 다음 소스가 아닌 컴파일 된 코드 만 체크인 할 수 있습니까? 이것은 암호화 가 아니며 암호 또는 키를 암호화하는 데 적합 하지 않습니다 . 사람들은 여전히 ​​컴파일 된 코드를 리버스 엔지니어링 할 수 있지만 소스를 얻지는 못합니다.

개인 GIT 저장소

공용 자식 저장소 여야합니까 ?

서버 스토리지

이 정보를 응용 프로그램이 실행되는 사용자 계정의 홈 디렉토리에있는 보호 된 파일에 저장할 수 있습니까? ~ / .ssh / id_rsa 및 chmod 600으로 ssh가 수행하는 방식을 복사합니다. 실패하면 환경 변수를 사용할 수 있습니다. 어떤 종류의 키를 저장하려면 서버의 어딘가에 있거나 아무것도 보호 할 수있는 방법이 없습니다.

대칭 암호화 (당신만을위한)

유일한 개발자 인 경우 서버에 키를 넣고 시스템에 동일한 키를 사용하고 대칭 암호화 체계를 사용하여 암호 또는 인증서와 같은 일부 데이터를 보호 할 수 있습니다. 친구와 대칭 키를 공유하면 지저분 해집니다.

비대칭 암호화 (여러 개발자 용)

다른 개발자가 비밀 정보를 공개 자식 저장소에 체크인 해야하는 경우 이러한 종류의 공개 키 / 개인 키 (비대칭) 암호화가 만들어졌습니다. 서버에 개인 키를 설치하고 (소스 제어로 체크인하지 마십시오!) 공개 키를 생성하십시오. 서버의 공개 키를 사용하여 비밀 데이터를 암호화하십시오. 서버 만이 개인 키를 사용하여 해당 데이터를 해독 할 수 있습니다. 공개 키를 소스 제어로 체크인하여 다른 사람들이 동일한 공개 키를 사용하여 데이터를 암호화 할 수 있고 서버 만이이를 해독 할 수 있습니다.

수단

Openssl은 아마도 필요한 유일한 암호화 도구 일 것입니다. 자체 암호화 알고리즘 또는 게시 된 알고리즘의 구현을 작성하지 마십시오.

결산 생각

"서버"가 https를 사용하는 웹 서버 인 경우, 개인 키를 저장하기 위해 서버에 어떤 종류의 보안 키 저장소가 있어야합니다. 이. 어쩌면 그들은 다른 사람들이 당신이 직면 한 도전을 어떻게 해결하는지에 대한 힌트를 가지고 있습니까?


서버 측 스토리지에 WRT를 추가하려면-Heroku 로이 작업을 수행 할 수 있는지 모르겠지만, 수신 후 후크 및 / 또는 배포 서버의 Capistrano와 같은 스크립트에서 스크립트가 시작되는 설정을 보았습니다. 배치 데이터베이스 파일을 올바른 위치에 복사하십시오. 이를 통해 데이터베이스 파일을 리포지토리에 완전히 보관할 수 있으며 이러한 정보가 그대로 유지되도록 자동 메커니즘을 갖추게됩니다.
Shauna

비공개 GIT 저장소라도 중요한 데이터를 보호해야합니다. 우연히 우연히 공개되는 경우를 대비하여. 또한 대칭 대신 항상 비대칭 암호화를 사용해야한다고 생각합니다. 단점은 없으며,이 단점 만 있습니다. API를 다른 곳에 남겨 두어 새로운 민감한 하드 코딩 된 데이터를 쉽게 암호화 할 수 있습니다.
Tiberiu-Ionuț Stan

7

Heroku에서 코드를 실행하려면 코드를 제공해야합니다. 호스팅 제공 업체에서 "비밀"로 유지할 수 없습니다.

공개 자식 저장소가있는 한 프로젝트가 오픈 소스이지만 호스팅 세부 정보를 공유하지 않으려는 경우 배포 목적으로 프로젝트의 개인 포크를 유지해야합니다.


1
고맙지 만 이것에 대한 워크 플로우는 무엇입니까?
Jonas

6

코드의 일부를 숨겨서는 안됩니다. 시스템의 보안은 코드의 비밀에 의존해서는 안됩니다. "불분명을 통한 보안"으로 알려져 있습니다. 보안 전문가는 잘 작동하지 않기 때문에 눈치 채고 있습니다.

대신 암호, 암호 키 등을 코드와 별도로 유지해야합니다. 코드가 읽는 별도의 구성 파일 또는 구성 값에 저장하십시오. git에 저장할 필요가 없습니다.

중요 : 소스 코드에 암호화 키, 암호 또는 기타 비밀을 하드 코딩하지 마십시오! 그것은 매우 나쁜 습관입니다.

또한보십시오:

플러그 : IT Security.SE보안 에 대한 질문을하기에 좋은 곳입니다!

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.