Gizli anahtarlarımı ve şifremi sürüm kontrol sistemime nasıl güvenli bir şekilde kaydedebilirim?


134

Sürüm kontrol sistemimdeki geliştirme ve üretim sunucularının ana bilgisayar adları ve bağlantı noktaları gibi önemli ayarları saklıyorum. Ancak, sırları (özel anahtarlar ve veritabanı şifreleri gibi) bir VCS deposunda tutmanın kötü bir uygulama olduğunu biliyorum .

Ancak şifreler - diğer ayarlar gibi - bunların güncellenmesi gerektiği gibi görünür. Peki , şifrelerin sürümünü kontrol altında tutmanın uygun yolu nedir?

Sırları kendi "sır ayarları" dosyasında tutmayı ve bu dosyanın şifrelenmesini ve sürümünün kontrol edilmesini gerektireceğini hayal ediyorum . Peki hangi teknolojiler? Ve bunu nasıl düzgün bir şekilde yapabilirim? Bu konuda daha iyi bir yol var mı?


Soruyu genel olarak soruyorum, ancak özel örneğimde git ve github kullanarak bir Django / Python sitesi için gizli anahtarları ve şifreleri saklamak istiyorum .

Ayrıca, git ile bastığımda / çektiğimde ideal bir çözüm büyülü bir şey yapar - örneğin, şifrelenmiş parolalar dosyası değişirse, bir parola soran ve şifresini çözen bir komut dosyası çalıştırılır.


DÜZENLEME: Anlaşılır olması için, ben am depolamak için nereye soran üretim sırları.


1
Aslında tüm repo özel tutmak için biraz para ön.
John Mee

29
@JohnMee Aslında zaten özel bir depo için ödeme yapıyorum, ama asıl nokta deponuzda hassas bilgileri tutmamalısınız.
Chris W.

1
Cevapları tatmin etmenin zor olmasının nedeninin büyük bir kısmının, bir veritabanına bağlanmak için eski moda düz metin parolasının daha az düşmanca bir dönemin kalıntısı olduğunu düşünüyorum. Doğru cevap, "kodunuzun bir sırra ihtiyacı olmamalı" gibi bir şeydir, ancak eriştiğiniz sistemler size çok fazla seçenek sunmaz.
msw

4
Neden? Harici servisler için şifreleri kontrol eden versiyonda zilch değeri vardır. Sürüm kontrolünün temel değeri, uygulamanızın çalışma düzeninde olduğu bilinen geçmiş revizyonlarını inceleyip çalıştırabilmenizdir . Ancak, eski şifreler sizin için işe yaramaz. Eğer iptal edilmişlerse, bir daha asla çalışmazlar.
Albay Panik

Yanıtlar:


100

Dosyayı sürüm kontrolünde tutarken hassas ayarlar dosyanızı şifrelemek istediğinizde haklısınız. Bahsettiğiniz gibi, en iyi çözüm Git'in belirli hassas dosyaları yerel olarak (yani sertifikanız olan herhangi bir makinede) ayarlar dosyasını kullanabilmeniz için şeffaf olarak şifreleyeceği, ancak Git veya Dropbox veya VC altında dosyalarınızı saklamak, bilgileri düz metin olarak okuyamaz.

Push / Pull sırasında Şeffaf Şifreleme / Şifre Çözme Eğitimi

Bu özet https://gist.github.com/873637 , Git'in bulaşan / temiz filtre sürücüsünün, aktarılan dosyaları şeffaf bir şekilde şifrelemek için openssl ile nasıl kullanılacağına dair bir öğretici gösterir. Sadece bazı ilk kurulumları yapmanız gerekir.

Nasıl Çalıştığı

Temel olarak .gitencrypt3 bash betiği içeren bir klasör oluşturacaksınız ,

clean_filter_openssl 
smudge_filter_openssl 
diff_filter_openssl 

Git tarafından şifre çözme, şifreleme ve destek için kullanılan Git fark. Bu komut dosyalarının içinde bir ana parola ve tuz (sabit!) Tanımlanır ve .gitencrypt öğesinin hiçbir zaman gerçekten aktarılmadığından emin olmalısınız. Örnek clean_filter_opensslkomut dosyası:

#!/bin/bash

SALT_FIXED=<your-salt> # 24 or less hex characters
PASS_FIXED=<your-passphrase>

openssl enc -base64 -aes-256-ecb -S $SALT_FIXED -k $PASS_FIXED

Benzer smudge_filter_open_sslve diff_filter_oepnssl. Bkz.

Hassas bilgiler içeren repo'nuzda .gitencrypt dizinine (Git'in projeyi şeffaf bir şekilde şifrelemek / şifresini çözmek için ihtiyaç duyduğu her şeyi içeren) ve yerel makinenizde bulunan bir .gitattribute dosyası (şifrelenmemiş ve repoya dahil edilmiş) olmalıdır.

.gitattribute içeriği:

* filter=openssl diff=openssl
[merge]
    renormalize = true

Son olarak, .git/configdosyanıza aşağıdaki içeriği de eklemeniz gerekir

[filter "openssl"]
    smudge = ~/.gitencrypt/smudge_filter_openssl
    clean = ~/.gitencrypt/clean_filter_openssl
[diff "openssl"]
    textconv = ~/.gitencrypt/diff_filter_openssl

Artık hassas bilgilerinizi içeren havuzu uzak bir depoya aktardığınızda dosyalar şeffaf olarak şifrelenecektir. .Gitencrypt dizinine (parolanızı içeren) sahip yerel bir makineden çektiğinizde, dosyaların şifresi çözülür.

notlar

Bu öğreticinin yalnızca hassas ayarlar dosyanızı şifrelemenin bir yolunu açıklamadığını unutmayın. Bu, uzak VC ana makinesine aktarılan tüm deposu şeffaf bir şekilde şifreleyecek ve tüm deponun şifresini çözecek, böylece tamamen yerel olarak şifresi çözülecektir. İstediğiniz davranışı elde etmek için, bir veya daha fazla proje için hassas dosyaları tek bir sens_settings_repo içine yerleştirebilirsiniz. Bu şeffaf şifreleme tekniği Git submodules ile nasıl çalıştığını araştırmak olabilir http://git-scm.com/book/en/Git-Tools-Submodules Eğer gerçekten aynı depoda olması hassas dosyaları gerekiyorsa.

Sabit bir parola kullanılması, saldırganların birçok şifreli depoya / dosyaya erişmesi durumunda teorik olarak kaba kuvvet açıklarına yol açabilir. IMO, bunun olasılığı çok düşük. Bu öğreticinin altında bir not olarak, sabit bir parola kullanılmaması, farklı makinelerde bir repo'nun yerel sürümlerinin her zaman 'git durumu' ile değişikliklerin gerçekleştiğini göstermesine neden olacaktır.


1
Çok ilginç. Bu neredeyse tam olarak istediğim gibi geliyor (deponun tamamını şifrelemesi dışında).
Chris W.

Birden fazla uygulama için tüm hassas ayar dosyalarını tek bir şifreli depoda tutabilir veya hassas ayarlarla şifreli depoyu burada açıklandığı gibi Git alt modülü olarak projenize ekleyebilirsiniz. Git-scm.com/book/en/Git-Tools-Submodules .
dgh

Üretim şifrelerini / ayarlarını bir (şifreli) alt modülde saklamak nadir değildir. stackoverflow.com/questions/11207284/… . Projeler arasında ayarları yönetmeyi bile kolaylaştırabilir.
dgh

Güncellenmiş bir çözüm için github.com/AGWA/git-crypt adresini kontrol etmek faydalı olabilir . Tek tek dosyaların şifrelenmesine izin verme avantajına sahiptir ve "makul olarak anlamsal olarak güvenli" olduğunu iddia eder. Gist'in kendisi bu aracın daha iyi olduğunu önerdi, github.com/shadowhand/git-encrypt .
geekley

52

Heroku , ayarlar ve gizli anahtarlar için ortam değişkenlerinin kullanımını zorlar :

Bu tür yapılandırmaları işlemek için geleneksel yaklaşım, bunları bir tür özellikler dosyasında kaynak altına koymaktır. Bu hataya açık bir süreçtir ve özellikle uygulamaya özgü yapılandırmalarla ayrı (ve özel) şubeler tutmak zorunda olan açık kaynaklı uygulamalar için özellikle karmaşıktır.

Daha iyi bir çözüm, ortam değişkenlerini kullanmak ve anahtarları kodun dışında tutmaktır. Geleneksel bir ana bilgisayarda veya yerel olarak çalışarak bashrc'nizde ortam değişkenleri ayarlayabilirsiniz. Heroku'da config vars kullanırsınız.

Foreman ve .envdosyalarla Heroku, ortam değişkenlerini dışa aktarmak, içe aktarmak ve senkronize etmek için kıskanılacak bir araç zinciri sağlar.


Şahsen, gizli anahtarları kodun yanında kaydetmenin yanlış olduğuna inanıyorum. Temel olarak kaynak kontrolü ile tutarsızdır, çünkü anahtarlar koda göre harici hizmetler içindir . Tek nimet, bir geliştiricinin HEAD'ı klonlayabilmesi ve uygulamayı herhangi bir kurulum yapmadan çalıştırabilmesidir. Ancak, bir geliştiricinin kodun tarihi bir revizyonunu kontrol ettiğini varsayalım. Kopyaları geçen yılki veritabanı şifresini içerecek, böylece uygulama bugünün veritabanına karşı başarısız olacaktır.

Yukarıdaki Heroku yöntemiyle, bir geliştirici geçen yılın uygulamasını kontrol edebilir, bugünün anahtarlarıyla yapılandırabilir ve bugünün veritabanında başarıyla çalıştırabilir.


1
Bu cevabın yeterince ilgisi yok, ancak çoğu linux yoluna denk geliyor.
Nikolay Fominyh

11
Ortam değişkenleri bashrc'nizde ayarlanırsa ve yeni bir sunucu dağıtıyorsanız, bashrc'yi ne yaratır? Bu sadece şifreleri kaynak kodu deponuzun dışına ve dağıtım yapılandırmanıza taşımakla kalmaz mı? (muhtemelen kaynak kodu deposunda mı, yoksa kendi
deposunda

@JonathanHartley .bashrc sizin Django uygulamanız için kod deposunda olmamalıdır.
Steve

4
Üzgünüm, yorumum belirsiz, ama bunun nedeni gerçekten kafam karıştı. Bu cevabın bakış açısının sesini seviyorum, ama asla tam olarak anlamadım. Her biri birkaç ana bilgisayar ve belki de birkaç ana bilgisayar türü içeren birkaç farklı ortama dağıtıyorsam, ortam değişkenlerini ayarlamak için her ana bilgisayarda bulunacak .bashrc dosyalarının oluşturulmasını otomatikleştirmem gerekiyor. Peki, kaynağımdan ayrı olarak, dağıtımda .bashrc'de ortam değişkenleri olacak tüm ayarları içeren ikinci bir repo'm olması gerektiğini mi söylüyorsunuz ?
Jonathan Hartley

1
Bunların, konuşlandırdığınız PER makine başına yalnızca bir kez yapılandırılması gerekir. Dağıtım süreciniz "yeni bir makineyi döndürün ve trafiği yeniden yönlendirmeden önce sorun olup olmadığını test edin ve ardından eski olanı IMHO'nun en iyi yöntemidir", IMHO en iyi yöntemdir. env vars.
Jonathan Hartley

16

Bence en temiz yol ortam değişkenlerini kullanmaktır. Sen uğraşmak zorunda olmayacak .dist örneğin dosyalar ve üretim ortamında proje devlet, yerel makinenin aynı olurdu.

Eğer ilginizi çekiyorsa, Oniki Faktör Uygulaması'nın yapılandırma bölümünü okumanızı tavsiye ederim .


6
Ortam değişkenleri, uygulamayı gizli ayarlarla çalıştırmanın iyi bir yolu gibi görünüyor ... ancak yine de bu ayarları nerede tutacağınız sorusuna cevap vermiyor .
Chris W.

2
Uygulamalarınızın her biri için genellikle bir README dosyanız olmalıdır. Orada, hangi ortam değişkenlerinin ayarlanması gerektiğini belirtin ve bir projeyi her dağıttığınızda, aşağıdaki adımları izleyin ve her birini ayarlayın. Ayrıca çok sayıda kabuk betiği de oluşturabilirsiniz export MY_ENV_VAR=ve konuşlandırdığınızda doğru değerleri ve karakteri doldurun source. Eğer ayarları sürekli tutmak demek, ilk etapta bunu yapmamalısınız.
Samy Dindane

Ayrıca, Oniki Faktör Uygulaması için upvote - gerçekten harika şeyler.
Chris

4
@Samy: Peki konuşlandırmayı otomatikleştirdiyseniz?
Jonathan Hartley

3
@Samy Hala ortam değişkenlerinin nasıl ayarlanacağını anlamıyorum. 12 faktörlü uygulama sayfası da bunu netleştirmiyor (şu anki projem olmayan Heroku'da değilseniz.) Üreten bir komut dosyasının merkezi bir yapılandırma mağazasına "Ben makine X, lütfen sorması gerektiğini mi söylüyoruz?" "benim yapılandırma verilerimi ver" ve ayarlanması gereken ortam değişkenlerinin değerleriyle yanıt verir. Bu durumda, artık oluşturulan bir komut dosyasına ihtiyacınız olduğunu düşünmüyorum . Çılgınca spekülasyon yapıyorum, doğru ağacı havlıyor muyum?
Jonathan Hartley

10

Bir seçenek, projeye bağlı kimlik bilgilerini şifrelenmiş bir kapsayıcıya (TrueCrypt veya Keepass) koymak ve itmek olabilir.

Aşağıdaki yorumumun cevabı olarak güncelleyin:

İlginç bir soru btw. Bunu yeni buldum: otomatik şifreleme için çok umut verici görünen github.com/shadowhand/git-encrypt


Otomatikleştirebileceğim bir şeye sahip olmak güzel olurdu. Öyle ki, şifrelenmiş şifre dosyam değişirse, yeni dosyanın şifresini otomatik olarak çözer.
Chris W.

7
İlginç bir soru btw. Bunu yeni buldum: otomatik şifreleme için çok umut verici görünen github.com/shadowhand/git-encrypt .
schneck

1
Vay harika. git-encryptSeslerin açıklaması tam olarak aradığım gibi "Bir üçüncü taraf depolama sunucusunda barındırılan bir uzak git havuzuyla çalışırken, veri gizliliği bazen endişe kaynağı oluyor. Bu makale git depolarını kurma yordamlarında size yol gösteriyor bunun için yerel çalışma dizinleriniz normaldir (şifrelenmemiş), ancak taahhüt edilen içerik şifrelenir. " (Elbette, içeriğimin yalnızca bir alt kümesinin şifrelenmesini istiyorum ...)
Chris W.

@schneck, Chris'in kabul edebilmesi için yorumunuzu cevap olarak gönderin - aradığı şey budur.
Tony Abou-Assaleh

9

Bunun için yapılandırma dosyaları kullanmanızı ve bunları sürümlememenizi öneririm.

Bununla birlikte dosyaların örneklerini de sürümlendirebilirsiniz.

Geliştirme ayarlarını paylaşırken herhangi bir sorun görmüyorum. Tanım gereği değerli veri içermemelidir.


1
Ancak kanonik şifre kayıtlarını nerede saklayabilirim? Bu verilerin bir gün sadece bir makinedeki bir yapılandırma dosyasında oturmasını sağlamak beni sinirlendirir.
Chris W.

@ChrisW. Makine patlarsa, artık parolaya ihtiyacınız yoktur ... Ancak, üretim makinenizdeki verilerin yalnızca bir kopyasına sahipseniz, bu kırmızı bayrağı kaldırmalıdır. Ancak bu VCS'de olması gerektiği anlamına gelmez. Manyetik ve optik ortamdaki artımlı yedeklemelerle desteklenen RAID, tam yedeklemeler olmalıdır. Birçok şirket, parolaların ve diğer hassas malzemelerin kağıt üzerinde nasıl ve nerede saklanacağını belirleyebilecek bir değişiklik kontrol prosedürüne sahiptir.
Steve Buzonas

@ChrisW Kaba olmak istemiyorum ama bize gerçeği söylemiyorsunuz ve saklamak istediğiniz şifreler Geliştirme'de değil, üretimde kullanılıyor gibi görünüyor. Bu doğru değil mi? Aksi halde, neden bir geliştirme veya test makinesi ve geliştirme parolalarına önem veriyorsunuz? Kimse bunu yapmazdı.
tiktak

BTW, şirketimizde tüm geliştirme şifreleri kağıt üzerinde ve intranette mevcuttur. Çünkü onların değeri yok. Oradalar çünkü geliştirdiğimiz yazılımın kimlik doğrulamasına ihtiyacı var.
tiktak

@tiktak, haklısınız - sorum üretim şifreleri ile ilgili ne yapacağım hakkında. Özellikle geliştirme şifrelerini A VCS'de açık bir şekilde saklamak umurumda değil. Bunu yeterince netleştirmediysem özür dilerim.
Chris W.30

7

BlackBox kısa bir süre önce StackExchange tarafından piyasaya sürüldü ve henüz kullanmam gerekiyorken, sorunları tam olarak ele alıyor ve bu soruda istenen özellikleri destekliyor gibi görünüyor.

Https://github.com/StackExchange/blackbox adresindeki açıklamadan :

Sırları güvenli bir şekilde bir VCS deposunda saklayın (örneğin Git veya Mercurial). Bu komutlar, depodaki belirli dosyaları GPG ile şifrelemenizi kolaylaştırır, böylece deponuzda "beklemede şifrelenir". Bununla birlikte, komut dosyaları, görüntülemeniz veya düzenlemeniz gerektiğinde bunların şifresini çözmeyi ve üretimde kullanılmak üzere şifresini çözmeyi kolaylaştırır.


7

Bu soruyu sorduğumdan beri, küçük bir ekiple küçük uygulama geliştirirken kullandığım bir çözüme karar verdim.

Git-crypt

git-crypt, adları belirli kalıplarla eşleştiğinde dosyaları şeffaf bir şekilde şifrelemek için GPG kullanır. İntance için .gitattributesdosyanıza eklerseniz ...

*.secret.* filter=git-crypt diff=git-crypt

... gibi bir dosya config.secret.jsonher zaman şifreleme ile uzak depolara gönderilir, ancak yerel dosya sisteminizde şifrelenmeden kalır.

Reposunuza korumalı dosyaların şifresini çözebilecek yeni bir GPG anahtarı (kişi) eklemek istersem daha sonra çalıştırın git-crypt add-gpg-user <gpg_user_key>. Bu yeni bir taahhüt yaratır. Yeni kullanıcı sonraki taahhütlerin şifresini çözebilir.


5

Soruyu genel olarak soruyorum, ancak özel örneğimde git ve github kullanarak bir Django / Python sitesi için gizli anahtarları ve şifreleri saklamak istiyorum.

Hayır, sadece özel reponsanız ve asla paylaşmayı düşünmeseniz bile, yapma.

Bir local_settings.py oluşturmalısınız VCS yoksay ve koymak ayarlarında .py gibi bir şey yapmak

from local_settings import DATABASES, SECRET_KEY
DATABASES = DATABASES

SECRET_KEY = SECRET_KEY

Sır ayarlarınız çok yönlü ise, yanlış bir şey yaptığınızı söylemeye hevesliyim


9
Ama yine de bir yerlerde bu sırları takip etmem gerekecek . Örneğin, bu satırlar boyunca tuş geçidi falan, değil mi?
Chris W.

Özel verilerin depolanmasının düzenlenmesi ve uygulanması, projenin şirket politikasına bağlıdır. Herhangi bir üçüncü taraf test cihazı veya programcı bunları görebileceği için projenin kaynak kodunun uygun bir yer olduğundan şüpheliyim
Hedde van der Heide

4

DÜZENLEME: Sanırım önceki parola sürümlerinizi takip etmek istediğinizi varsayalım.

GnuPG'nin en iyi yol olduğunu düşünüyorum - zaten bulut hizmetlerinde depolanan depo içeriğini şifrelemek için git ile ilgili bir projede (git-ek) kullanılıyor. GnuPG (gnu pgp) çok güçlü bir anahtar tabanlı şifreleme sağlar.

  1. Yerel makinenizde bir anahtar tutuyorsunuz.
  2. Yok sayılan dosyalara 'parolamı' eklersiniz.
  3. Taahhüt öncesi kancada, parola dosyasını git tarafından izlenen mypassword.gpg dosyasına şifrelersiniz ve bu parolayı kaydedersiniz.
  4. Birleştirme sonrası kancada mypassword.gpg şifresini mypassword olarak çözmeniz yeterlidir.

Şimdi 'şifrem' dosyanız değişmediyse, şifrelemek aynı şifre metniyle sonuçlanır ve dizine eklenmez (artıklık yoktur). Mypassword'ün en küçük değişikliği, hazırlama alanındaki radikal olarak farklı şifreleme metniyle sonuçlanır ve mypassword.gpg, depodakinden çok farklıdır, bu nedenle taahhüde eklenecektir. Saldırgan, gpg anahtarınızı tutsa bile, parolayı bruteforce etmesi gerekir. Saldırgan, şifreli metinle uzak depoya erişirse, bir grup şifreyi karşılaştırabilir, ancak sayıları ona ihmal edilemez bir avantaj sağlamak için yeterli olmayacaktır.

Daha sonra .gitattributes komutunu kullanarak şifrenizin quit git diff komutunu anında kullanabilirsiniz.

Ayrıca farklı şifre türleri için ayrı anahtarlara sahip olabilirsiniz.


3

Genellikle, bir yapılandırma dosyası olarak şifreyi ayırırım. ve onları dağıtma.

/yourapp
    main.py
    default.cfg.dist

Ve main.pykoştuğumda, gerçek şifreyi default.cfgkopyalanan yere koy .

ps. git veya hg ile çalışırken. *.cfgyapmak için dosyaları yoksayabilirsiniz .gitignoreveya.hgignore


.dist dosyaları neden bahsettiğim: gerçek yapılandırma dosyalarına örnekler. İyi bir uygulama, yazılımı yalnızca ".dist" uzantısını (veya daha iyisi: kopyalama) kaldırarak yeniden adlandırarak çalıştırabilmenizdir; yani, yazılımı, bütün gün.
tiktak

3

Yapılandırmayı geçersiz kılmak için bir yol sağlayın

Yapılandırmanın tamamlanmasına veya ana bilgisayar adları ve kimlik bilgileri gibi şeyler içermesine gerek kalmadan check-in yaptığınız yapılandırma için bir dizi aklı varsayılanını yönetmenin en iyi yolu budur. Varsayılan yapılandırmaları geçersiz kılmanın birkaç yolu vardır.

Ortam değişkenleri (diğerlerinin de belirttiği gibi) bunu yapmanın bir yoludur.

En iyi yol, varsayılan yapılandırma değerlerini geçersiz kılan harici bir yapılandırma dosyası aramaktır. Bu, harici yapılandırmaları Şef, Kukla veya Cfengine gibi bir yapılandırma yönetim sistemi aracılığıyla yönetmenizi sağlar. Yapılandırma yönetimi, kod tabanından ayrı yapılandırmaların yönetimi için standart yanıttır, bu nedenle tek bir ana bilgisayarda veya bir grup ana bilgisayarda yapılandırmayı güncellemek için bir sürüm yapmanız gerekmez.

Bilginize: Kredileri şifrelemek, özellikle sınırlı kaynaklara sahip bir yerde, her zaman en iyi uygulama değildir. Kredilerin şifrelenmesi size ek risk azaltma getirmeyecek ve sadece gereksiz bir karmaşıklık katmanı ekleyecektir. Bir karar vermeden önce uygun analizi yaptığınızdan emin olun.


2

Parolalar dosyasını örneğin GPG kullanarak şifreleyin. Anahtarları yerel makinenize ve sunucunuza ekleyin. Dosyanın şifresini çözün ve repo klasörlerinizin dışına koyun.

Ana klasörümde bulunan bir passwords.conf dosyası kullanıyorum. Her dağıtımda bu dosya güncellenir.


Daha sonra yazılımın şifre dosyasının şifresini çözmesi gerekir.
tiktak

Peki, sadece siteyi dağıtırken şifre çözülür ve düz metin şifre dosyasına yazılır
Willian

2

Hayır, özel anahtarlar ve şifreler revizyon kontrolü altına girmez. Büyük olasılıkla hepsinin bu hizmetlere erişimi olmaması gerektiğinde, deponuza okuma erişimi olan herkesi, üretimde kullanılan hassas hizmet kimlik bilgilerini bilmekle yüklemek için bir neden yoktur.

Django 1.4'ten başlayarak, Django projeleriniz şimdi nesneyiproject.wsgi tanımlayan bir modülle birlikte gelir ve siteye özgü yapılandırmalar içeren bir ayar modülünün kullanımını uygulamaya başlamak için mükemmel bir yerdir .applicationproject.local

Bu ayarlar modülü düzeltme denetiminden yoksayılır, ancak proje örneğinizi üretim ortamları için tipik olan bir WSGI uygulaması olarak çalıştırırken varlığı gerekir. Bu şekilde görünmelidir:

import os

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "project.local")

# This application object is used by the development server
# as well as any WSGI server configured to use this file.
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()

Artık local.pysahibi ve grubu olan bir modülün yalnızca yetkili personelin ve Django işlemlerinin dosyanın içeriğini okuyabileceği şekilde yapılandırılabilmesini sağlayabilirsiniz.


2

Sırlarınız için VCS'ye ihtiyacınız varsa, bunları en azından gerçek kodunuzdan ayrı olarak ikinci bir depoda tutmalısınız. Böylece ekip üyelerinize kaynak kodu deposuna erişme izni verebilirsiniz ve kimlik bilgilerinizi görmezler. Ayrıca bu havuzu başka bir yerde barındırın (örn. Github'da değil şifreli bir dosya sistemi ile kendi sunucunuzda) ve üretim sistemine bakmak için git-submodule gibi bir şey kullanabilirsiniz .


1

Başka bir yaklaşım, sürüm kontrol sistemlerinde sırların kaydedilmesinden tamamen kaçınmak ve bunun yerine , bir API ve gömülü şifreleme ile anahtar haddeleme ve denetleme ile gizli bir depo olan hashicorp'un kasası gibi bir araç kullanmak olabilir .


1

Bu benim işim:

  • $ HOME / .bashrc kaynaklarının $ HOME / .secrets (go-r perms) değişkeninde env değişken olarak tüm sırları saklayın (bu şekilde birinin önünde .bashrc'yi açarsanız, sırları görmezler)
  • Yapılandırma dosyaları VCS'de config.properties.tmpl olarak saklanan config.properties gibi şablonlar olarak saklanır
  • Şablon dosyaları sır için bir yer tutucu içerir, örneğin:

    my.password = ## MY_PASSWORD ##

  • Uygulama dağıtımında, şablon dosyasını hedef dosyaya dönüştüren ve yer tutucuları ## MY_PASSWORD ## değerini $ MY_PASSWORD değerine değiştirme gibi ortam değişkenlerinin değerleriyle değiştiren komut dosyası çalıştırılır.


0

Sisteminiz bunu sağlıyorsa EncFS kullanabilirsiniz. Böylece, uygulamanızın kenara monte edilen verilere şifresi çözülmüş bir görünüm sağlarken, şifrelenmiş verilerinizi deponuzun bir alt klasörü olarak tutabilirsiniz. Şifreleme şeffaf olduğu için çekme veya itme işleminde özel bir işlem gerekmez.

Bununla birlikte, uygulamanız tarafından sürüm klasörlerinin dışında başka bir yerde saklanan bir parolaya (örn. Ortam değişkenleri) dayalı olarak yapılabilen EncFS klasörlerinin bağlanması gerekir.

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.