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 veya depolama alanından dosya veya veri akışı okuması ve yazması gerekir. Genellikle uygulama, verilerin taşıma işlemini depolama alanından alıp istemciye akışla aktararak veya istemciden karşıya yüklenen akışı okuyarak ve veri deposunda depolayarak 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ğrulayabilecekleri bir anahtar veya belirteç sağlamaktır.
Bu anahtar veya belirteç genellikle vale anahtarı olarak bilinir. Belirli kaynaklara zaman sınırlı erişim sağlar ve yalnızca depolama alanına yazma, okumama veya web tarayıcısında karşıya yükleme ve indirme gibi ayrıntılı denetime sahip ö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.
Vale anahtarı desenini kullanan bir sistem için iş akışı örneğini gösteren diyagram. 1. adım, hedef kaynağı isteyen kullanıcıyı gösterir. 2. adım, vale anahtarı uygulamasının isteğin geçerliliğini denetlemesini ve erişim belirteci oluşturmasını gösterir. 3. adım kullanıcıya döndürülen belirteci gösterir. 4. adım, hedef kaynağa belirteç kullanarak erişen kullanıcıyı gösterir.
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ılabilir.
Bir kullanıcı oluşturma ve kimlik doğrulaması, izin verme ve sonra kullanıcıyı yeniden kaldırma veya daha da kötüsü bu izni ayakta izin olarak bırakma gereksinimi olmadığından, bu düzenin kullanılması kaynaklara erişimi yönetmeyi basitleştirebilir. Ayrıca çalışma zamanında bir anahtar oluşturarak konumu, izni ve geçerlilik süresini 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 bulundurun. 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 tek bir kiracıdaki tüm kullanıcılar tarafından kullanıldığı çok kiracılı bir senaryoda tek tek kullanıcılar için kotaları zorunlu kılmak zordur. Kullanıcılara izinler oluşturma izni vermek, belirteçleri etkili bir şekilde tek kullanımlık hale getirerek güncelleştirilen veri miktarını denetlemenize yardımcı olabilir. Oluşturma izni üzerine yazmalara izin vermez, bu nedenle her belirteç yalnızca bir yazma etkinliği için kullanılabilir.
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 aracılığıyla teslim edilen hassas veriler genellikle TLS kullanılarak gerçekleşir ve bu, veri deposuna doğrudan erişen istemciler için zorunlu kılınmalı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ına kaydedilebilir. 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 kod, bulut depolama hesabı gibi farklı bir etki alanındaki verilere erişim sağlamak için vale anahtarı kullanamayabilir.
İstemcinin son kaynak için önceden yapılandırılmış kimlik doğrulamasına sahip olması gerekmese de, istemcinin vale anahtarı hizmetinde kimlik doğrulama araçlarını önceden oluşturması gerekir.
Anahtarlar yalnızca doğru yetkilendirmeye sahip kimliği doğrulanmış istemcilere dağıtılmalıdır.
Erişim belirteçlerinin oluşturulması ayrıcalıklı bir eylemdir, bu nedenle vale anahtarı hizmetinin katı erişim ilkeleriyle güvenliğinin sağlanması gerekir. Hizmet, üçüncü tarafların hassas sistemlere erişmesine izin vererek bu hizmetin güvenliğinin belirli bir öneme sahiptir.
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 bölgede depolandığında. Uygulamanın ağ geçidi denetleyicisi olarak davranması gerekiyorsa, verileri bölgeler arasında veya istemci ile uygulama arasında genel veya özel ağlar arasında ve ardından uygulama ile veri deposu arasında aktarmaya yönelik ek bant genişliği için ücret uygulanabilir.
Bu düzen aşağıdaki durumlarda kullanışlı olmayabilir:
İstemciler arka uç hizmetinizde zaten benzersiz bir şekilde kimlik doğrulaması gerçekleştirebiliyorsa, örneğin RBAC ile bu düzeni kullanmayın.
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. Bununla birlikte, bazı veri depoları ve istemcileri sıkıştırma ve sıkıştırmayı kaldırma gibi basit dönüştürmeleri (örneğin, bir web tarayıcısı genellikle gzip biçimlerini işleyebilir) müzakere edebilir ve gerçekleştirebilir.
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.
İş yükü tasarımı
Bir mimar, Azure İyi Tasarlanmış Çerçeve yapılarında ele alınan hedefleri ve ilkeleri ele almak için Vale Anahtarı deseninin iş yükünün tasarımında nasıl kullanılabileceğini değerlendirmelidir. Örneğin:
Yapı Taşı | Bu desen sütun hedeflerini nasıl destekler? |
---|---|
Güvenlik tasarımı kararları, iş yükünüzün verilerinin ve sistemlerinin gizliliğini, bütünlüğünü ve kullanılabilirliğini sağlamaya yardımcı olur. | Bu düzen, istemcinin uzun süreli veya kalıcı kimlik bilgilerine gerek kalmadan kaynağa doğrudan erişmesini sağlar. Tüm erişim istekleri denetlenebilir bir işlemle başlar. Verilen erişim hem kapsam hem de süre olarak sınırlandırılır. Bu düzen, verilen erişimi iptal etme işlemini de kolaylaştırır. - SE:05 Kimlik ve erişim yönetimi |
Maliyet İyileştirme, iş yükünüzün yatırım getirisini sürdürmeye ve geliştirmeye odaklanır. | Bu tasarım, tüm istemci isteklerini doğrudan işlemek için bir bileşen eklemeden istemci ile kaynak arasında özel bir ilişki olarak işlemeyi boşaltır. İstemci istekleri sık veya önemli ara sunucu kaynakları gerektirecek kadar büyük olduğunda bu avantaj en çarpıcıdır. - CO:09 Akış maliyetleri |
Performans Verimliliği , ölçeklendirme, veri ve kod iyileştirmeleri aracılığıyla iş yükünüzün talepleri verimli bir şekilde karşılamasını sağlar. | Erişim boşaltma işlemlerini istemci ile kaynak arasında, tüm istemci isteklerini performanslı bir şekilde işlemesi gereken bir büyükelçi bileşeni gerektirmeden özel bir ilişki olarak ara kaynak kullanmamak. Ara sunucu işleme değer eklemediğinde bu deseni kullanmanın avantajı en çok önemlidir. - PE:07 Kod ve altyapı |
Herhangi bir tasarım kararında olduğu gibi, bu desenle ortaya konulabilecek diğer sütunların hedeflerine karşı herhangi bir dengeyi göz önünde bulundurun.
Ö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çerlilik, belirtilen bir zaman aralığı olabilir. Bu işlevsellik, erişim için vale anahtarı kullanmak için uygundur.
Sık sık büyük ikili dosyaları karşıya yükleyen yüzlerce mobil veya masaüstü istemcisinin olduğu bir iş yükü düşünün. Bu düzen olmadan, iş yükünün temelde iki seçeneği vardır. Birincisi, doğrudan bir depolama hesabına yükleme gerçekleştirmek için tüm istemcilere sürekli erişim ve yapılandırma sağlamaktır. Diğeri, istemcilerin depolamaya proksid erişim kullandığı ancak bu işlem için ek değer eklemeyebileceği bir uç nokta ayarlamak için Ağ Geçidi Yönlendirme düzenini uygulamaktır. Her iki yaklaşım da desen bağlamında ele alınan sorunlardan muzdariptir:
- Uzun süreli, önceden paylaşılmış gizli diziler. Büyük olasılıkla farklı istemcilere farklı anahtarlar sağlamanın çok yolu yok.
- Şu anda büyük dosyaları almak için yeterli kaynağa sahip bir işlem hizmetini çalıştırma gideri eklendi.
- Karşıya yükleme işlemine fazladan bir işlem ve ağ atlama katmanı ekleyerek istemci etkileşimlerini yavaşlatma olasılığı.
Vale Anahtarı deseninin kullanılması güvenlik, maliyet iyileştirme ve performans sorunlarını giderir.
İstemciler, son sorumlu anda erişim istemek için basit, ölçek-sıfır Azure İşlevi tarafından barındırılan API'de kimlik doğrulaması yapar.
API isteği doğrular ve ardından zaman ve kapsam sınırlı SaS belirtecini alır ve döndürür.
API tarafından oluşturulan belirteç, istemciyi aşağıdaki sınırlamalarla kısıtlar:
- Kullanılacak depolama hesabı. Başka bir deyişle, istemcinin bu bilgileri önceden bilmesi gerekmez.
- Kullanılacak belirli bir kapsayıcı ve dosya adı; belirtecin en fazla bir dosyayla kullanılabilmesini sağlar.
- Üç dakika gibi kısa bir işlem penceresi. Bu kısa süre, belirteçlerin yardımcı programını aşmayan bir TTL'ye sahip olmasını sağlar.
- Yalnızca blob oluşturma izinleri; indirme, güncelleştirme veya silme izinleri değildir.
Bu belirteç daha sonra istemci tarafından, dosyayı doğrudan depolama hesabına yüklemek için dar zaman penceresinde kullanılır.
API, bu belirteçleri, API'nin kendi Microsoft Entra Id yönetilen kimliğine göre bir kullanıcı temsilci anahtarı kullanarak yetkili istemcilere oluşturur. Günlüğe kaydetme hem depolama hesaplarında hem de belirteç oluşturma API'sinde etkinleştirilir ve belirteç istekleri ile belirteç kullanımı arasında bağıntıya izin verir. API, çok kiracılı bir durumda olduğu gibi hangi depolama hesabını veya kapsayıcıyı kullanacağınıza karar vermek için istemci kimlik doğrulama bilgilerini veya kullanabileceği diğer verileri kullanabilir.
GitHub'da Vale Anahtarı desen örneğinde eksiksiz bir örnek bulunur. Aşağıdaki kod parçacıkları bu örnekten uyarlanmıştır. İlki, Azure İşlevi'nin (ValetKey.Web'de bulunur) Azure İşlevi'nin kendi yönetilen kimliğini kullanarak kullanıcı tarafından temsilci atanan paylaşılan erişim imzası belirtecini nasıl oluşturacağı gösterilir.
[Function("FileServices")]
public async Task<StorageEntitySas> GenerateTokenAsync([HttpTrigger(...)] HttpRequestData req, ...,
CancellationToken cancellationToken)
{
// Authorize the caller, select a blob storage account, container, and file name.
// Authenticate to the storage account with the Azure Function's managed identity.
...
return await GetSharedAccessReferenceForUploadAsync(blobContainerClient, blobName, cancellationToken);
}
/// <summary>
/// Return an access key that allows the caller to upload a blob to this
/// specific destination for about three minutes.
/// </summary>
private async Task<StorageEntitySas> GetSharedAccessReferenceForUploadAsync(BlobContainerClient blobContainerClient,
string blobName,
CancellationToken cancellationToken)
{
var blobServiceClient = blobContainerClient.GetParentBlobServiceClient();
var blobClient = blobContainerClient.GetBlockBlobClient(blobName);
// Allows generating a SaS token that is evaluated as the union of the RBAC permissions on the managed identity
// (for example, Blob Data Contributor) and then narrowed further by the specific permissions in the SaS token.
var userDelegationKey = await blobServiceClient.GetUserDelegationKeyAsync(DateTimeOffset.UtcNow.AddMinutes(-3),
DateTimeOffset.UtcNow.AddMinutes(3),
cancellationToken);
// Limit the scope of this SaS token to the following:
var blobSasBuilder = new BlobSasBuilder
{
BlobContainerName = blobContainerClient.Name, // - Specific container
BlobName = blobClient.Name, // - Specific filename
Resource = "b", // - Blob only
StartsOn = DateTimeOffset.UtcNow.AddMinutes(-3), // - For about three minutes (+/- for clock drift)
ExpiresOn = DateTimeOffset.UtcNow.AddMinutes(3), // - For about three minutes (+/- for clock drift)
Protocol = SasProtocol.Https // - Over HTTPS
};
blobSasBuilder.SetPermissions(BlobSasPermissions.Create);
return new StorageEntitySas
{
BlobUri = blobClient.Uri,
Signature = blobSasBuilder.ToSasQueryParameters(userDelegationKey, blobServiceClient.AccountName).ToString();
};
}
Aşağıdaki kod parçacığı hem API hem de istemci tarafından kullanılan veri aktarım nesnesidir (DTO).
public class StorageEntitySas
{
public Uri? BlobUri { get; internal set; }
public string? Signature { get; internal set; }
}
İstemci (ValetKey.Client içinde bulunur) daha sonra ek kaynaklara gerek kalmadan ve tam istemciden depolama performansına ihtiyaç duymadan yüklemeyi gerçekleştirmek için API'den döndürülen URI'yi ve belirteci kullanır.
...
// Get the SaS token (valet key)
var blobSas = await httpClient.GetFromJsonAsync<StorageEntitySas>(tokenServiceEndpoint);
var sasUri = new UriBuilder(blobSas.BlobUri)
{
Query = blobSas.Signature
};
// Create a blob client using the SaS token as credentials
var blob = new BlobClient(sasUri.Uri);
// Upload the file directly to blob storage
using (var stream = await GetFileToUploadAsync(cancellationToken))
{
await blob.UploadAsync(stream, cancellationToken);
}
...
Sonraki adımlar
Bu desen uygulanırken aşağıdaki yönergeler uygun olabilir:
- Örneğin uygulanması GitHub'da Vale Anahtarı desen örneğinde kullanılabilir.
- Paylaşılan erişim imzaları (SAS) kullanarak Azure Depolama kaynaklarına sınırlı erişim izni verme
- Service Bus ile Paylaşılan Erişim İmzası Kimlik Doğrulaması
İlgili kaynaklar
Bu desen uygulanırken aşağıdaki desenler de uygun olabilir:
- Ağ geçidi denetleyicisi düzeni. 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.