Vale Anahtarı düzeni
Uygulamadan veri aktarımı boşaltmak için, istemcilere belirli bir kaynağa yönelik kısıtlı doğrudan erişim sağlayan bir belirteç kullanın. Bu, özellikle bulutta barındırılan depolama sistemleri veya kuyrukları kullanan uygulamalarda kullanışlıdır ve maliyeti en aza indirip ölçeklenebilirliği ve performansı en üst düzeye çıkarabilir.
Bağlam ve sorun
İstemci programlarının ve web tarayıcılarının genellikle bir uygulamanın depolama alanına/depolama alanına dosya veya veri akışı okuması ve yazması gerekir. Genellikle uygulama, verileri depolamadan alıp istemciye akışla akışıyla ya da istemciden karşıya yüklenen akışı okuyarak ve veri deposuna depolayarak verilerin hareketini işler. Ancak, bu yaklaşım işlem, bellek ve bant genişliği gibi değerli kaynakları içine alır.
Uygulamanın verileri taşıması için herhangi bir işlem gerçekleştirmesine gerek kalmadan, veri depoları bu verileri doğrudan karşıya yükleyip indirebilirler. Ancak bu istemcinin depo için güvenlik kimlik bilgilerine erişebilmesini gerektirir. Bu, veri aktarımı maliyetlerini ve uygulamayı ölçeklendirme gereksinimini en aza indirmek ve performansı en üst düzeye çıkarmak için kullanışlı bir yöntem olabilir. Ancak aynı zamanda bu, uygulamanın verilerin güvenliğini yönetemeyeceği anlamına gelir. İstemci, doğrudan erişim için veri deposuna bağlantı elde ettikten sonra ağ geçidi denetleyicisi gibi davranamaz. Artık işlemlerin denetiminde değildir ve daha sonra veri deposuna yapılan yüklemeleri ve depodan yapılan indirmeleri engelleyemez.
Bu, güvenilmeyen istemcilere hizmet etmesi gereken dağıtılmış sistemler için gerçekçi bir yaklaşım değildir. Bunun yerine, uygulamaların verilere erişimi ayrıntılı ve güvenli bir şekilde denetlemesi, ancak yine de bu bağlantıyı ayarlayıp ardından gerekli okuma veya yazma işlemlerini gerçekleştirmesi için istemcinin veri deposuyla doğrudan iletişim kurmasını sağlayarak sunucu üzerindeki yükü azaltması gerekir.
Çözüm
İstemcilerin kimlik doğrulama ve yetkilendirme işlemlerini yönetemeyen veri deposuna olan erişimi denetleme sorununu çözmeniz gerekir. Tipik çözümlerden biri, veri deposunun genel bağlantısına erişimi kısıtlamak ve istemciye veri deposunun doğrulanması için bir anahtar veya belirteç sağlamaktır.
Bu anahtar veya belirteç genellikle vale anahtarı olarak bilinir. Bu, belirli kaynaklara süre sınırlı erişim sağlar ve yalnızca depolama alanına ya da kuyruğa okuma ve yazma veya bir web tarayıcısında karşıya yükleme ve indirme gibi önceden tanımlanmış işlemlere izin verir. Uygulamalar, hızlı ve kolay bir şekilde istemci cihazlarına ve web tarayıcılarına vale anahtarları oluşturup çıkarabilir. Böylelikle, istemciler uygulamanın veri aktarımını doğrudan işlemesine ihtiyaç duymadan gerekli işlemleri gerçekleştirebilir. Bu, uygulamadan ve sunucudan ek işlem yükü ile performans ve ölçeklenebilirlik üzerindeki etkiyi kaldırır.
Şekilde gösterildiği gibi, istemci bu belirteci yalnızca belirli bir süre için, erişim izinlerine olan belirli kısıtlamalarla veri deposundaki belirli bir kaynağa erişmek için kullanır. Belirtilen süre sonunda, anahtar geçersiz olur ve kaynağa erişime izin vermez.

Veri kapsamı gibi diğer bağımlılıklara sahip bir anahtar yapılandırmak da mümkündür. Örneğin, veri deposu özelliklerine bağlı olarak, anahtar veri deposunda tam bir tablo veya yalnızca bir tablodaki belirli satırları belirtebilir. Bulut depolama sistemlerinde anahtar, bir kapsayıcıyı ya da yalnızca bir kapsayıcıdaki belirli bir öğeyi belirtebilir.
Anahtar ayrıca uygulama tarafından geçersiz kılınabilir. Bu, istemcinin sunucuya veri aktarımı işleminin tamamlandığını bildirmesi durumunda faydalı bir yaklaşımdır. Daha sonra sunucu daha fazla erişimi önlemek için bu anahtarı geçersiz kılındırabilirsiniz.
Bir kullanıcı oluşturup kimliğini doğrulamaya, izin vermeye ve ardından kullanıcıyı tekrar kaldırmaya gerek olmadığından bu düzeni kullanmak, kaynaklara erişimi yönetmeyi basitleştirebilir. Ayrıca çalışma zamanında yalnızca bir anahtar oluşturarak konumu, izni ve geçerlilik dönemini sınırlamayı da kolaylaştırır. Önemli faktörler, geçerlilik süresini ve özellikle kaynağın konumunu olabildiğince sıkı bir şekilde kısıtlayarak istemcinin bunu yalnızca hedeflenen amaç için kullanmasını sağlamaktır.
Sorunlar ve dikkat edilmesi gerekenler
Bu düzenin nasıl uygulanacağına karar verirken aşağıdaki noktaları göz önünde bulundurun:
Anahtarın geçerlilik durumunu ve süresini yönetin. Sızdırıldıysa veya gizliliği tehlikeye girdiyse, anahtar etkili olarak hedef öğenin kilidini açar ve geçerlilik süresi boyunca kötü amaçlı kullanım için kullanılabilir hale getirir. Nasıl kullanıldığına bağlı olarak anahtar iptal edilebilir veya devre dışı bırakılabilir. Sunucu tarafı ilkeleri değiştirilebilir veya birlikte imzalandığı sunucu anahtarı geçersiz kılınabilir. Veri deposuna karşı gerçekleşen yetkisiz işlemlere izin verme riskini en aza indirmek için kısa bir geçerlilik süresi belirtin. Ancak, geçerlilik süresi çok kısa olursa, anahtarın süresi dolmadan önce istemci işlemi tamamlayamayabilir. Korumalı kaynağa birden çok erişim gerekiyorsa, geçerlilik süresi dolmadan önce yetkili kullanıcıların anahtarı yenilemelerine izin verin.
Anahtarın sağlayacağı erişim düzeyini denetleyin. Genellikle, anahtar işlemin tamamlanması için kullanıcıya yanızca, istemcinin veri deposuna veri yükleyememesi durumunda salt okunur erişim gibi gerekli eylemleri gerçekleştirmesine izin vermelidir. Dosyaların karşıya yüklenmesi için, sadece yazılabilir izinlerle birlikte konum ve geçerlilik süresi sağlayan bir anahtar belirtmek yaygındır. Anahtarın uygulandığı kaynağı veya kaynak kümesini doğru bir şekilde belirtmek önemlidir.
Kullanıcıların davranışını denetlemeyi göz önünde bulundurabilirsiniz. Bu düzen uygulandığında, kullanıcıların izin verdiği kaynaklar üzerinde bir miktar denetim kaybı olur. Sarf edilebilen denetim düzeyi, hizmet veya hedef veri deposu için kullanılabilir olan ilke ve izinlerin özellikleri tarafından sınırlandırılır. Örneğin, depolama alanına yazılacak verilerin boyutunu ya da bir dosyaya erişmek için anahtarın kaç kez kullanılabileceğini sınırlayan bir anahtar oluşturmak genellikle mümkün değildir. Hedeflenen istemci tarafından kullanıldığında bile bu çok büyük ve beklenmedik veri aktarımı maliyetlerine neden olabilir ve bu, kodda yinelenen karşıya yükleme ve indirme işlemlerine neden olan bir hata tarafından kaynaklanabilir. Bir dosyanın karşıya yüklenebilme sayısını sınırlamak için, mümkünse bir işlem tamamlandığında istemciyi uygulamayı bildirmeye zorlayın. Örneğin, bazı veri depoları, uygulama kodunun işlemleri izlemesi ve kullanıcı davranışını denetlemesi için kullanabileceği olayları tetikleyebilir. Ancak, aynı anahtarın bir kiracıdaki tüm kullanıcılar tarafından kullanıldığı çoklu kiracı senaryosunda bireysel kullanıcılar için kota zorlamak güçtür.
Karşıya yüklenen tüm verileri doğrulayın ve isteğe bağlı olarak temizleyin. Anahtara erişim elde eden kötü niyetli bir kullanıcı, sistemin güvenliğini tehlikeye atacak şekilde tasarlanmış verileri karşıya yükleyebilir. Alternatif olarak, yetkili kullanıcılar geçersiz verileri karşıya yükleyebilir ve işlendiğinde bu bir hataya ya da sistem hatasına neden olabilir. Buna karşı korunmak için, kullanmadan önce karşıya yüklenen tüm verilerin kötü amaçlı içerik olup olmadığını doğrulayıp denetleyin.
Tüm işlemleri denetleyin. Anahtar tabanlı mekanizmaların birçoğu, yüklemeler, indirmeler ve hatalar gibi işlemleri günlüğe kaydedebilir. Bu günlükler genellikle, bir denetim işlemine dahil edilebilir ve ayrıca kullanıcı dosya boyutuna veya veri hacmine göre ücretlendirilmişse faturalandırma için de kullanılabilir. Günlükleri, anahtar sağlayıcısıyla oluşan sorunların ya da depolanmış erişim ilkesini yanlışlıkla kaldırmanın neden olmuş olabileceği kimlik doğrulama hatalarını algılamak için kullanın.
Anahtarı güvenli bir şekilde teslim edin. Kullanıcının bir web sayfasında etkinleştirdiği bir URL’ye eklenebilir veya indirmenin otomatik olarak gerçekleşmesi için bir sunucu yeniden yönlendirme işleminde kullanılabilir. Anahtarı güvenli bir kanal üzerinden teslim etmek için her zaman HTTPS kullanın.
Aktarımda hassas verileri koruyun. Uygulama üzerinden teslim edilen hassas veriler genelde SSL veya TLS kullanarak gerçekleşir ve bu, veri deposuna doğrudan erişen istemciler için zorlanmalıdır.
Bu düzeni uygularken dikkat edilmesi gereken diğer sorunlar şunlardır:
İstemci, işlemin tamamlandığını sunucuya bildirmiyor ya da bildiremiyorsa ve tek sınır anahtarın kullanım süresiyse, uygulama karşıya yükleme veya indirme sayılarını sayma ya da çoklu karşıya yüklemeleri veya indirmeleri engelleme gibi denetleme işlemlerini gerçekleştiremez.
Oluşturulabilecek anahtar ilkeleri esnekliği sınırlı olabilir. Örneğin, bazı mekanizmalar yalnızca zamanlanmış kullanım süresi kullanmaya izin verir. Diğerleri, yeterli ayrıntı düzeyinde okuma/yazma izinleri belirtemiyor.
Anahtar veya belirtecin geçerlilik süresine ait başlangıç saati belirtildiyse, kısmen eşzamanlı olmayan istemci saatlerine izin vermek için geçerli sunucu saatinden biraz daha erken olduğundan emin olun. Belirtilmediyse, genellikle varsayılan geçerli sunucu saatidir.
Anahtarı içeren URL, sunucu günlük dosyalarında kaydedilir. Genellikle günlük dosyaları çözümlenmek üzere kullanılmadan önce anahtarın süresi dolacağından, bunlara erişimi sınırladığınızdan emin olun. Günlük verileri, bir izleme sistemine aktarıldıysa veya başka bir konuma depolandıysa, anahtarların sızdırılmasını önlemek için geçerlilik süreleri dolana kadar bir gecikme uygulamayı düşünün.
İstemci kodu bir web tarayıcısında çalıştırılıyorsa, web tarayıcısı içinde yürütülen kodun verilere, sayfada sunulandan farklı bir etki alanında erişmesini sağlamak için tarayıcının çıkış noktaları arası kaynak paylaşmayı (CORS) destekliyor olması gerekebilir. Bazı eski tarayıcılar ve bazı veri depoları CORS'yi desteklemez ve bu tarayıcılarda çalışan kodlar, bulut depolama hesabı gibi farklı bir etki alanındaki verilere erişim sağlamak için vale anahtarını kullanamayabiliyor olabilir.
Bu düzenin kullanılacağı durumlar
Bu düzen şu koşullar için kullanışlıdır:
Kaynak yüklemeyi en aza indirmek ve performans ile ölçeklenebilirliği en üst düzeye çıkarmak için. Vale anahtarı kullanmak, kaynağın kilitlenmesini ve uzaktan sunucu aramayı gerektirmez, çıkarılacak vale anahtarı sayısı sınırı yoktur ve uygulama kodu aracılığıyla veri aktarımı gerçekleştirme sonucu oluşan tek hata noktasını önler. Vale anahtarı oluşturma, genellikle bir anahtarla dize imzalamadan oluşan basit bir şifreleme işlemidir.
İşlem maliyetini en aza indirmek için. Depolara ve kuyruklara doğrudan erişim sağlamak, kaynak ve maliyet açısından verimlidir, daha az ağ gidiş dönüşlerine neden olabilir ve gerekli işlem kaynaklarının sayısını azaltmayı sağlayabilir.
İstemciler verileri düzenli olarak karşıya yüklediğinde veya indirdiğinde, özellikle büyük bir hacim olduğunda veya her işlem büyük dosyalar içerdiğinde.
Barındırma veya maliyet sınırlamaları nedeniyle uygulamanın sınırlı kullanılabilir işlem kaynakları olduğunda. Bu senaryoda, uygulamanın veri aktarımını işlemesine gerek kalmamasını sağladığından, birçok eş zamanlı veri karşıya yüklemesi veya indirmesi varsa bu düzen daha da faydalıdır.
Veriler, uzak bir veri deposunda veya farklı bir veri merkezinde depolandığında. Uygulamanın ağ geçidi denetleyicisi görevini yapması gerekiyorsa, verileri veri merkezleri arasında veya istemciyle uygulama ve sonra da uygulamayla veri deposu arasında genel ve özel ağlarda aktarmaya yönelik ek bant genişliği ücreti uygulanabilir.
Bu düzen aşağıdaki durumlarda kullanışlı olmayabilir:
Uygulamanın, depolanmadan veya istemciye gönderilmeden önce veriler üzerinde bazı görevler gerçekleştirmesi gerekiyorsa. Örneğin, uygulamanın doğrulama gerçekleştirmesi, başarılı erişimleri günlüğe kaydetmesi veya veriler üzerinde dönüşüm yürütmesi gerekiyorsa. Ancak, bazı veri depoları ve istemciler sıkıştırma ve sıkıştırmayı ayıklama gibi basit dönüştürmeler üzerinde anlaşma ve işlem gerçekleştirebilir (örneğin, bir web tarayıcısı genellikle gzip biçimlerini işleyebilirsiniz).
Mevcut bir uygulamanın tasarımı, düzeni dahil etmeyi zorlaştırıyorsa. Bu düzeni kullanmak genellikle veri teslim etmek ve almak için farklı bir mimari yaklaşım gerektirir.
Denetim kayıtlarını korumak ve veri aktarımı işlemlerinin yürütülme sayısını denetlemek önemlidir ve kullanımda olan vale anahtarı mekanizması, sunucunun bu işlemleri yönetmek için kullanabileceği bildirimleri desteklemez.
Özellikle karşıya yükleme işlemleri sırasında verilerin boyutunu sınırlamak gerektiğinde. Buna tek çözüm, uygulamanın işlem tamamlandıktan sonra veri boyutunu veya belirli bir süre sonrasında ya da planlanan bir zamanda karşıya yüklemelerin boyutunu denetlemesidir.
Örnek
Azure, blob’lardaki, tablolardaki ve kuyruklardaki verilere ayrıntılı erişim denetimi ve Service Bus kuyruklarıyla konuları için Azure Depolama’da paylaşılan erişim imzalarını destekler. Paylaşılan erişim imzası belirteci, okuma, yazma, güncelleştirme ve silme gibi belirli erişim haklarını belirli bir tabloya, tablodaki belirli bir anahtar aralığına, bir kuyruğa, bir blob’a veya bir blob kapsayıcısına sağlayacak şekilde yapılandırılabilir. Geçerliliğin belirli bir zaman aralığı olabilir veya zaman sınırı olmayabilir.
Azure paylaşılan erişim imzaları, ayrıca tablo veya blob gibi belirli bir kaynakla ilişkilendirilebilen sunucuda depolanmış erişim ilkelerini destekler. Bu özellik, uygulama tarafından oluşturulan paylaşılan erişim imzası belirteçlerine kıyasla ek denetim ile esneklik sağlar ve mümkün olan her fırsatta kullanılmalıdır. Sunucuda depolanmış bir ilkede tanımlanan ayarlar değiştirilebilir ve yeni bir belirtecin çıkarılmasına gerek kalmadan belirtece yansıtılır, ancak belirteçte tanımlanan ayarlar yeni bir belirteç çıkarılmadan değiştirilemez. Bu yaklaşım ayrıca süresi dolmadan önce geçerli bir paylaşılan erişim imzası belirtecini iptal etmeyi mümkün kılar.
Daha fazla bilgi için bkz. Paylaşılan erişim imzaları (SAS) kullanarak Azure Depolama kaynaklara sınırlı erişim izni ver.
Aşağıdaki kod, beş dakikalığına geçerli olan bir paylaşılan erişim imzası belirtecini oluşturmayı gösterir. GetSharedAccessReferenceForUpload yöntemi, Azure Blob Depolama Alanı’na dosya yüklemek için kullanılabilen bir paylaşılan erişim imzaları belirteci döndürür.
public class ValuesController : ApiController
{
private readonly BlobServiceClient blobServiceClient;
private readonly string blobContainer;
...
/// <summary>
/// Return a limited access key that allows the caller to upload a file
/// to this specific destination for a defined period of time.
/// </summary>
private StorageEntitySas GetSharedAccessReferenceForUpload(string blobName)
{
var blob = blobServiceClient.GetBlobContainerClient(this.blobContainer).GetBlobClient(blobName);
var storageSharedKeyCredential = new StorageSharedKeyCredential(blobServiceClient.AccountName, ConfigurationManager.AppSettings["AzureStorageEmulatorAccountKey"]);
var blobSasBuilder = new BlobSasBuilder
{
BlobContainerName = this.blobContainer,
BlobName = blobName,
Resource = "b",
StartsOn = DateTimeOffset.UtcNow.AddMinutes(-5),
ExpiresOn = DateTimeOffset.UtcNow.AddMinutes(5)
};
blobSasBuilder.SetPermissions(BlobSasPermissions.Write);
return new StorageEntitySas
{
BlobUri = blob.Uri,
Credentials = blobSasBuilder.ToSasQueryParameters(storageSharedKeyCredential).ToString()
};
}
public struct StorageEntitySas
{
public string Credentials;
public Uri BlobUri;
}
}
Tam örnek, GitHub’dan indirebileceğiniz ValetKey çözümünde kullanılabilir. Bu çözümdeki ValetKey.Web projesi, yukarıda gösterilen
ValuesControllersınıfının dahil olduğu bir web uygulaması içerir. Paylaşılan erişim imzaları anahtarı almak ve blob depolama alanına dosya yüklemek için bu web uygulamasını kullanan örnek istemci uygulaması, ValetKey.Client projesinde kullanılabilir.
Sonraki adımlar
Bu düzen uygulanırken aşağıdaki kılavuz uygun olabilir:
- Bu düzeni gösteren bir örnek GitHub’dan edinilebilir.
- Paylaşılan erişim imzaları (SAS) kullanarak Azure Depolama kaynaklara sınırlı erişim izni ver
- Service Bus ile Paylaşılan Erişim İmzası Kimlik Doğrulaması
İlgili yönergeler
Bu düzen uygulanırken aşağıdaki desenler de uygun olabilir:
- Gatekeeper deseni. Bu düzen Vale Anahtarı düzeniyle birlikte, istemcilerle uygulama veya hizmet arasında aracı işlevi gören ayrılmış bir konak örneği kullanarak uygulamaları ve hizmetleri korumak için kullanılabilir. Ağ geçidi denetleyicisi, istekleri doğrular ve temizler ve isteklerle verileri istemci ve uygulama arasında geçirir. Ek bir güvenlik katmanı sağlayabilir ve sistemin saldırı yüzeyini azaltabilir.
- Statik İçerik Barındırma düzeni. Statik kaynakları, pahalı işlem örnekleri gereksinimini azaltmak için bu kaynakları doğrudan istemciye teslim eden bulut tabanlı bir depolama hizmetine dağıtmayı açıklar. Kaynakların gelen kullanıma açık olmadığı yerlerde, Vale Anahtarı düzeni bu kaynakları korumak için kullanılabilir.