Github ve Heroku kullanırken bir kişi hassas verileri nasıl ele alır?


49

Git'in çalışma biçimine henüz alışık değilim (Ve Linus dışında birisinin olup olmadığını merak ediyorum;).

Heroku'yu size başvurmak için kullanıyorsanız, kodunuzu Git deposunda kontrol ettirmeniz gerekir. Açık kaynak kodlu bir projede çalışıyorsanız, bu repoyu Github veya diğer Git ana bilgisayarlarında paylaşmanız daha olasıdır.

Bazı şeyler genel depoda kontrol edilmemelidir; veritabanı şifreleri, API anahtarları, sertifikaları, vb ... Ancak kodunuzu Heroku'ya iletmek için kullandığınızdan beri bu şeylerin Git deposunun parçası olması gerekir.

Bu kullanım durumuyla nasıl çalışmalı?

Not: Heroku veya PHPFog'un bu sorunu aşmak için sunucu değişkenlerini kullanabileceğini biliyorum. Sorum, kodun bölümlerini "gizleme" hakkında daha fazla.


3
Özel bir depo kullanmakla başlardım. Daha sonra, ne kadar güvendiğime bağlı olarak, hassas verileri içeren config dosyalarıma ve bunları yerel olarak yalnızca sürümüne göre belirleyebilirim. (Yerel, kurum içi sunucu olabilen veya bilen harici olmayan merkezi bir konumdur)
Rig

Yanıtlar:


30

Heroku'da şifreleri / api anahtarlarını gizli tutmak için tercih edilen yöntem, heroku komut satırı uygulaması ile config değerlerini belirlemektir. Bir heroku dev center makalesinden alınan aşağıdaki örnek

(Aşağıdaki örnek ve cevabımın tamamı, ray uygulamaları ile ilgilidir)

$ 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

Ardından ENV [] değişkenini kullanarak bu yapılandırma değerlerine kodunuzda bakın

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

Bu şekilde hassas şifreleriniz git deposunda saklanmaz. (Not: Uygulamayı yerel olarak çalıştırırken, bu değerleri .bashrcdosyanızda ayarlayın.

Ayrıca, ne tür bir uygulama çalıştırdığınızdan emin değilim, ancak Rails'de, heroku database.yml dosyanızı kullanmaz, yalnızca veritabanı kullanıcı adınızı / şifrenizi uygulama ayarlarınıza göre ayarlar. Böylece bu bilgileri git'e kaydetmekten kaçınabilirsiniz.

Ayrıca, kendi uygulamanızı çalıştırıyorsanız ve özel kalmasını istiyorsanız, github'a harika bir alternatif, ücretsiz özel depolar sunan bir bitbucket .


17

Birkaç fikir ... Açık Anahtar Şifreleme en esnek cevaptır.

Şaşırtma (sadece kod için)

Kodun gizlemek istediğiniz kısımları için farklı bir projeye koyabilir, derleyebilir ve kaynağı değil yalnızca derlenmiş kodu teslim edebilir misiniz? Bu şifreleme değildir ve şifreleri veya anahtarları şifrelemek için uygun değildir . İnsanlar derlenmiş kodunuzu yine de tersine çevirebilirler, ancak kaynak alamazlar.

Özel GIT deposu

Halka açık bir depo olmak zorunda mı ?

Sunucu Deposu

Bu bilgiyi, uygulamanın çalıştığı kullanıcı hesabının giriş dizinindeki korumalı bir dosyada saklayabilir misiniz? Ssh'ın ~ / .ssh / id_rsa ve 600'ün chmod'unu yaptığı gibi kopyalarım. Bir tür anahtarı saklamak için sunucuda bir yere ihtiyacınız var veya herhangi bir şeyi korumanız mümkün değil.

Simetrik Şifreleme (sadece sizin için)

Tek geliştiriciyseniz, sunucuya bir anahtar koyabilir ve makinenizde aynı anahtara sahip olabilir ve bir parola veya sertifika gibi bazı verileri korumak için simetrik bir şifreleme düzeni kullanabilirsiniz. Simetrik bir anahtarı arkadaşlarla paylaşmak dağınık hale gelir.

Asimetrik Şifreleme (çoklu geliştiriciler için)

Diğer geliştiricilerin gizli şeyleri bir kamuya açık depoda kontrol etmesi gerekiyorsa, bu tür bir şey için genel anahtar / özel anahtar (asimetrik) şifrelemesi yapıldı. Sunucunuza özel bir anahtar kurun (kaynak kontrolünde kontrol etmeyin!) Ve bundan ortak bir anahtar oluşturun. Sunucunun genel anahtarını kullanarak gizli verilerinizi şifreleyin. Özel sunucu kullanarak yalnızca sunucu bu verilerin şifresini çözebilir. Genel anahtarı kaynak kontrolünde bile kontrol edebilirsiniz, böylece diğerlerinin de aynı genel anahtarı kullanarak verileri şifreleyebilir ve yalnızca sunucu şifresini çözebilir.

araç

Openssl muhtemelen ihtiyaç duyacağınız tek şifreleme aracıdır. Kendi şifreleme algoritmanızı ya da yayınlanmış bir algoritmayı kendi uygulamanızı yazmayın.

Kapanış düşünceleri

"Sunucu", https kullanan bir web sunucusuysa, o zaman özel anahtarı depolamak için sunucuda bir tür güvenli anahtar deposu bulundurmanız gerekir. Bir barındırma şirketinin izin vermeyeceği bir düşünce bu. Belki de başkalarının karşılaştığınız sorunu çözme konusunda bazı ipuçları vardır?


Eklemek için, sunucu tarafında depolamaya WRT - Bunu Heroku ile yapıp yapamayacağınızı bilmiyorum, ancak alma sonrası kancasından bir komut dosyasının çıkarıldığı ve / veya dağıtım sunucusundaki Capistrano gibi dağıtım veritabanı dosyasını doğru konuma kopyalayın. Bu, veritabanı dosyasını depodan tamamen uzak tutmanıza ve bu tür bilgilerin hala yerinde olmasını sağlamak için otomatik bir mekanizmaya sahip olmanıza olanak sağlar.
Shauna

Özel GIT repoları bile hassas verileri korumalıdır. Sadece bir süre tesadüfen halka açık olması durumunda. Ayrıca, asimetrik kriptoların simetrik yerine her zaman kullanılması gerektiğini düşünüyorum. Bunun için bir dezavantajı görmüyorum, sadece bu tersi: yeni hassas-kodlanmış veriye duyarlı yeni şifrelemeyi kolaylaştırmak için API'leri bile bir yerde bırakabilirsiniz.
Tiberiu-Ionuț Stan

7

Eğer kodunuzu Heroku'da çalıştırmak istiyorsanız, onlara vermelisiniz - barındırma sağlayıcınızdan "gizli" tutamazsınız.

Genel git depoları gittiği sürece, projeniz açık kaynak kodluysa ancak barındırma ayrıntılarını paylaşmak istemiyorsanız, projeniz için dağıtım amacıyla özel bir çatal bulundurmanız gerekir.


1
Teşekkürler, peki bunun iş akışı nedir?
Jonas

6

Kodun bölümlerini gizlememelisiniz. Sisteminizin güvenliği, kodun gizliliğine güvenmemelidir; Güvenlik uzmanları tarafından kaşlarını çattığı “gizlilik yoluyla güvenlik” olarak bilinen ve çok zayıf çalıştığı için.

Bunun yerine, şifreler, şifreleme anahtarları vb. Koddan ayrı tutulmalıdır. Bunları ayrı bir yapılandırma dosyasında veya kod tarafından okunan bir yapılandırma değerinde saklayın. Onları git içinde saklamana gerek yok.

Önemli: Asla şifreleme şifrelerinizi, şifrelerinizi veya kaynak kodunuzdaki diğer sırları sabit kodlamayın! Bu çok kötü bir uygulamadır.

Ayrıca bakınız:

Plug: IT Security.SE güvenlikle ilgili sorular sormak için harika bir yer!

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.