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.