Vale Anahtarı düzeniValet Key pattern

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.Use a token that provides clients with restricted direct access to a specific resource, in order to offload data transfer from the application. 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.This is particularly useful in applications that use cloud-hosted storage systems or queues, and can minimize cost and maximize scalability and performance.

Bağlam ve sorunContext and problem

İstemci programları ve web tarayıcılarının sıklıkla bir uygulamanın depolama alanına giden ve gelen veri akışlarını okuması ve yazması gerekir.Client programs and web browsers often need to read and write files or data streams to and from an application’s storage. Genellikle uygulama — verilerinin hareketini işlemek için ya verileri depolama alanından getirip istemciye akışla aktarır, ya da istemciden karşıya yüklenmiş akışı okuyup veri deposunda saklar.Typically, the application will handle the movement of the data — either by fetching it from storage and streaming it to the client, or by reading the uploaded stream from the client and storing it in the data store. Ancak, bu yaklaşım işlem, bellek ve bant genişliği gibi değerli kaynakları içine alır.However, this approach absorbs valuable resources such as compute, memory, and bandwidth.

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.Data stores have the ability to handle upload and download of data directly, without requiring that the application perform any processing to move this data. Ancak bu istemcinin depo için güvenlik kimlik bilgilerine erişebilmesini gerektirir.But, this typically requires the client to have access to the security credentials for the store. 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.This can be a useful technique to minimize data transfer costs and the requirement to scale out the application, and to maximize performance. Ancak aynı zamanda bu, uygulamanın verilerin güvenliğini yönetemeyeceği anlamına gelir.It means, though, that the application is no longer able to manage the security of the data. İstemci, doğrudan erişim için veri deposuna bağlantı elde ettikten sonra ağ geçidi denetleyicisi gibi davranamaz.After the client has a connection to the data store for direct access, the application can't act as the gatekeeper. Artık işlemlerin denetiminde değildir ve daha sonra veri deposuna yapılan yüklemeleri ve depodan yapılan indirmeleri engelleyemez.It's no longer in control of the process and can't prevent subsequent uploads or downloads from the data store.

Bu, güvenilmeyen istemcilere hizmet etmesi gereken dağıtılmış sistemler için gerçekçi bir yaklaşım değildir.This isn't a realistic approach in distributed systems that need to serve untrusted clients. 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.Instead, applications must be able to securely control access to data in a granular way, but still reduce the load on the server by setting up this connection and then allowing the client to communicate directly with the data store to perform the required read or write operations.

ÇözümSolution

İstemcilerin kimlik doğrulama ve yetkilendirme işlemlerini yönetemeyen veri deposuna olan erişimi denetleme sorununu çözmeniz gerekir.You need to resolve the problem of controlling access to a data store where the store can't manage authentication and authorization of clients. Çözümlerden biri, veri deposunun genel bağlantısına erişimi kısıtlamak ve istemciye veri deposunun doğrulayabileceği bir anahtar veya belirteç sağlamaktır.One typical solution is to restrict access to the data store’s public connection and provide the client with a key or token that the data store can validate.

Bu anahtar veya belirteç genellikle vale anahtarı olarak bilinir.This key or token is usually referred to as a valet key. 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.It provides time-limited access to specific resources and allows only predefined operations such as reading and writing to storage or queues, or uploading and downloading in a web browser. 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.Applications can create and issue valet keys to client devices and web browsers quickly and easily, allowing clients to perform the required operations without requiring the application to directly handle the data transfer. Bu, uygulamadan ve sunucudan ek işlem yükü ile performans ve ölçeklenebilirlik üzerindeki etkiyi kaldırır.This removes the processing overhead, and the impact on performance and scalability, from the application and the server.

Ş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.The client uses this token to access a specific resource in the data store for only a specific period, and with specific restrictions on access permissions, as shown in the figure. Belirtilen süre sonunda, anahtar geçersiz olur ve kaynağa erişime izin vermez.After the specified period, the key becomes invalid and won't allow access to the resource.

Şekil 1 - Düzene genel bakış

Veri kapsamı gibi diğer bağımlılıklara sahip bir anahtar yapılandırmak da mümkündür.It's also possible to configure a key that has other dependencies, such as the scope of the data. Örneğin, veri deposu özelliklerine bağlı olarak, anahtar veri deposunda tam bir tablo veya yalnızca bir tablodaki belirli satırları belirtebilir.For example, depending on the data store capabilities, the key can specify a complete table in a data store, or only specific rows in a table. Bulut depolama sistemlerinde anahtar, bir kapsayıcıyı ya da yalnızca bir kapsayıcıdaki belirli bir öğeyi belirtebilir.In cloud storage systems the key can specify a container, or just a specific item within a container.

Anahtar ayrıca uygulama tarafından geçersiz kılınabilir.The key can also be invalidated by the application. Bu, istemcinin sunucuya veri aktarımı işleminin tamamlandığını bildirmesi durumunda faydalı bir yaklaşımdır.This is a useful approach if the client notifies the server that the data transfer operation is complete. Sunucu daha sonra erişimi daha da önlemek için anahtarı geçersiz kılabilir.The server can then invalidate that key to prevent further access.

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.Using this pattern can simplify managing access to resources because there's no requirement to create and authenticate a user, grant permissions, and then remove the user again. Sadece çalışma zamanında bir anahtar oluşturarak, konumu, izni ve geçerlilik süresini kısıtlamayı da kolay hale getirir.It also makes it easy to limit the location, the permission, and the validity period—all by simply generating a key at runtime. Ö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.The important factors are to limit the validity period, and especially the location of the resource, as tightly as possible so that the recipient can only use it for the intended purpose.

Sorunlar ve dikkat edilmesi gerekenlerIssues and considerations

Bu düzenin nasıl uygulanacağına karar verirken aşağıdaki noktaları göz önünde bulundurun:Consider the following points when deciding how to implement this pattern:

Anahtarın geçerlilik durumunu ve süresini yönetin.Manage the validity status and period of the key. 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.If leaked or compromised, the key effectively unlocks the target item and makes it available for malicious use during the validity period. Nasıl kullanıldığına bağlı olarak anahtar iptal edilebilir veya devre dışı bırakılabilir.A key can usually be revoked or disabled, depending on how it was issued. Sunucu tarafı ilkeleri değiştirilebilir veya birlikte imzalandığı sunucu anahtarı geçersiz kılınabilir.Server-side policies can be changed or, the server key it was signed with can be invalidated. 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.Specify a short validity period to minimize the risk of allowing unauthorized operations to take place against the data store. Ancak, geçerlilik süresi çok kısa olursa, anahtarın süresi dolmadan önce istemci işlemi tamamlayamayabilir.However, if the validity period is too short, the client might not be able to complete the operation before the key expires. Korumalı kaynağa birden çok erişim gerekiyorsa, geçerlilik süresi dolmadan önce yetkili kullanıcıların anahtarı yenilemelerine izin verin.Allow authorized users to renew the key before the validity period expires if multiple accesses to the protected resource are required.

Anahtarın sağlayacağı erişim düzeyini denetleyin.Control the level of access the key will provide. 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.Typically, the key should allow the user to only perform the actions necessary to complete the operation, such as read-only access if the client shouldn't be able to upload data to the data store. 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.For file uploads, it's common to specify a key that provides write-only permission, as well as the location and the validity period. Anahtarın uygulandığı kaynağı veya kaynak kümesini doğru bir şekilde belirtmek önemlidir.It's critical to accurately specify the resource or the set of resources to which the key applies.

Kullanıcıların davranışlarını nasıl denetleyeceğinizi göz önünde bulundurun.Consider how to control users’ behavior. Bu düzen uygulandığında, kullanıcıların izin verdiği kaynaklar üzerinde bir miktar denetim kaybı olur.Implementing this pattern means some loss of control over the resources users are granted access to. 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.The level of control that can be exerted is limited by the capabilities of the policies and permissions available for the service or the target data store. Ö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.For example, it's usually not possible to create a key that limits the size of the data to be written to storage, or the number of times the key can be used to access a file. 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.This can result in huge unexpected costs for data transfer, even when used by the intended client, and might be caused by an error in the code that causes repeated upload or download. 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.To limit the number of times a file can be uploaded, where possible, force the client to notify the application when one operation has completed. Örneğin, bazı veri depoları, uygulama kodunun işlemleri izlemesi ve kullanıcı davranışını denetlemesi için kullanabileceği olayları tetikleyebilir.For example, some data stores raise events the application code can use to monitor operations and control user behavior. 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.However, it's hard to enforce quotas for individual users in a multi-tenant scenario where the same key is used by all the users from one tenant.

Karşıya yüklenen tüm verileri doğrulayın ve isteğe bağlı olarak temizleyin.Validate, and optionally sanitize, all uploaded data. Anahtara erişim elde eden kötü niyetli bir kullanıcı, sistemin güvenliğini tehlikeye atacak şekilde tasarlanmış verileri karşıya yükleyebilir.A malicious user that gains access to the key could upload data designed to compromise the system. 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.Alternatively, authorized users might upload data that's invalid and, when processed, could result in an error or system failure. 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.To protect against this, ensure that all uploaded data is validated and checked for malicious content before use.

Tüm işlemleri denetleyin.Audit all operations. Anahtar tabanlı mekanizmaların birçoğu, yüklemeler, indirmeler ve hatalar gibi işlemleri günlüğe kaydedebilir.Many key-based mechanisms can log operations such as uploads, downloads, and failures. 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.These logs can usually be incorporated into an audit process, and also used for billing if the user is charged based on file size or data volume. 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.Use the logs to detect authentication failures that might be caused by issues with the key provider, or accidental removal of a stored access policy.

Anahtarı güvenli bir şekilde teslim edin.Deliver the key securely. 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.It can be embedded in a URL that the user activates in a web page, or it can be used in a server redirection operation so that the download occurs automatically. Anahtarı güvenli bir kanal üzerinden teslim etmek için her zaman HTTPS kullanın.Always use HTTPS to deliver the key over a secure channel.

Aktarımda hassas verileri koruyun.Protect sensitive data in transit. 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.Sensitive data delivered through the application will usually take place using SSL or TLS, and this should be enforced for clients accessing the data store directly.

Bu düzeni uygularken dikkat edilmesi gereken diğer sorunlar şunlardır:Other issues to be aware of when implementing this pattern are:

  • İ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.If the client doesn't, or can't, notify the server of completion of the operation, and the only limit is the expiration period of the key, the application won't be able to perform auditing operations such as counting the number of uploads or downloads, or preventing multiple uploads or downloads.

  • Oluşturulabilecek anahtar ilkeleri esnekliği sınırlı olabilir.The flexibility of key policies that can be generated might be limited. Örneğin, bazı mekanizmalar yalnızca zamanlanmış kullanım süresi kullanmaya izin verir.For example, some mechanisms only allow the use of a timed expiration period. Diğerleri, yeterli ayrıntı düzeyinde okuma/yazma izinleri belirtemiyor.Others aren't able to specify a sufficient granularity of read/write permissions.

  • 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.If the start time for the key or token validity period is specified, ensure that it's a little earlier than the current server time to allow for client clocks that might be slightly out of synchronization. Belirtilmediyse, genellikle varsayılan geçerli sunucu saatidir.The default, if not specified, is usually the current server time.

  • Anahtarı içeren URL, sunucu günlük dosyalarında kaydedilir.The URL containing the key will be recorded in server log files. 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.While the key will typically have expired before the log files are used for analysis, ensure that you limit access to them. 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.If log data is transmitted to a monitoring system or stored in another location, consider implementing a delay to prevent leakage of keys until after their validity period has expired.

  • İ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.If the client code runs in a web browser, the browser might need to support cross-origin resource sharing (CORS) to enable code that executes within the web browser to access data in a different domain from the one that served the page. Bazı eski tarayıcılar ve veri depoları CORS desteklemiyor ve bu tarayıcıların içinde çalışan kod, verilere bulut depolama hesabı gibi farklı bir etki alanında erişim sağlayan bir vale anahtarı kullanabilir.Some older browsers and some data stores don't support CORS, and code that runs in these browsers might be able to use a valet key to provide access to data in a different domain, such as a cloud storage account.

Bu düzenin kullanılacağı durumlarWhen to use this pattern

Bu düzen şu koşullar için kullanışlıdır:This pattern is useful for the following situations:

  • Kaynak yüklemeyi en aza indirmek ve performans ile ölçeklenebilirliği en üst düzeye çıkarmak için.To minimize resource loading and maximize performance and scalability. 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.Using a valet key doesn't require the resource to be locked, no remote server call is required, there's no limit on the number of valet keys that can be issued, and it avoids a single point of failure resulting from performing the data transfer through the application code. Vale anahtarı oluşturma, genellikle bir anahtarla dize imzalamadan oluşan basit bir şifreleme işlemidir.Creating a valet key is typically a simple cryptographic operation of signing a string with a key.

  • İşlem maliyetini en aza indirmek için.To minimize operational cost. 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.Enabling direct access to stores and queues is resource and cost efficient, can result in fewer network round trips, and might allow for a reduction in the number of compute resources required.

  • İ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.When clients regularly upload or download data, particularly where there's a large volume or when each operation involves large files.

  • Barındırma veya maliyet sınırlamaları nedeniyle uygulamanın sınırlı kullanılabilir işlem kaynakları olduğunda.When the application has limited compute resources available, either due to hosting limitations or cost considerations. 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.In this scenario, the pattern is even more helpful if there are many concurrent data uploads or downloads because it relieves the application from handling the data transfer.

  • Veriler, uzak bir veri deposunda veya farklı bir veri merkezinde depolandığında.When the data is stored in a remote data store or a different datacenter. 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.If the application was required to act as a gatekeeper, there might be a charge for the additional bandwidth of transferring the data between datacenters, or across public or private networks between the client and the application, and then between the application and the data store.

Bu düzen aşağıdaki durumlarda kullanışlı olmayabilir:This pattern might not be useful in the following situations:

  • Uygulamanın, depolanmadan veya istemciye gönderilmeden önce veriler üzerinde bazı görevler gerçekleştirmesi gerekiyorsa.If the application must perform some task on the data before it's stored or before it's sent to the client. Ö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.For example, if the application needs to perform validation, log access success, or execute a transformation on the data. Ancak, bazı veri depoları ve istemciler, sıkıştırma ve açma (örneğin, bir web tarayıcı genellikle GZip biçimlerini işleyebilir) gibi basit dönüştürme işlemleri üzerinde anlaşabiliyor ve bu işlemleri gerçekleştirebiliyor.However, some data stores and clients are able to negotiate and carry out simple transformations such as compression and decompression (for example, a web browser can usually handle GZip formats).

  • Mevcut bir uygulamanın tasarımı, düzeni dahil etmeyi zorlaştırıyorsa.If the design of an existing application makes it difficult to incorporate the pattern. Bu düzeni kullanmak genellikle veri teslim etmek ve almak için farklı bir mimari yaklaşım gerektirir.Using this pattern typically requires a different architectural approach for delivering and receiving data.

  • 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.If it's necessary to maintain audit trails or control the number of times a data transfer operation is executed, and the valet key mechanism in use doesn't support notifications that the server can use to manage these operations.

  • Özellikle karşıya yükleme işlemleri sırasında verilerin boyutunu sınırlamak gerektiğinde.If it's necessary to limit the size of the data, especially during upload operations. 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.The only solution to this is for the application to check the data size after the operation is complete, or check the size of uploads after a specified period or on a scheduled basis.

ÖrnekExample

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.Azure supports shared access signatures on Azure Storage for granular access control to data in blobs, tables, and queues, and for Service Bus queues and topics. 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.A shared access signature token can be configured to provide specific access rights such as read, write, update, and delete to a specific table; a key range within a table; a queue; a blob; or a blob container. Geçerliliğin belirli bir zaman aralığı olabilir veya zaman sınırı olmayabilir.The validity can be a specified time period or with no time limit.

Azure paylaşılan erişim imzaları, ayrıca tablo veya blob gibi belirli bir kaynakla ilişkilendirilebilen sunucuda depolanmış erişim ilkelerini destekler.Azure shared access signatures also support server-stored access policies that can be associated with a specific resource such as a table or blob. 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.This feature provides additional control and flexibility compared to application-generated shared access signature tokens, and should be used whenever possible. 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.Settings defined in a server-stored policy can be changed and are reflected in the token without requiring a new token to be issued, but settings defined in the token can't be changed without issuing a new token. 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.This approach also makes it possible to revoke a valid shared access signature token before it's expired.

Daha fazla bilgi için MSDN’de Table SAS (Paylaşılan Erişim İmzası) Queue SAS ve Blob SAS güncelleştirmesine giriş ve Paylaşılan Erişim İmzalarını Kullanma konularını görüntüleyin.For more information see Introducing Table SAS (Shared Access Signature), Queue SAS and update to Blob SAS and Using Shared Access Signatures on MSDN.

Aşağıdaki kod, beş dakikalığına geçerli olan bir paylaşılan erişim imzası belirtecini oluşturmayı gösterir.The following code shows how to create a shared access signature token that's valid for five minutes. 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.The GetSharedAccessReferenceForUpload method returns a shared access signatures token that can be used to upload a file to Azure Blob Storage.

public class ValuesController : ApiController
{
  private readonly CloudStorageAccount account;
  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 blobClient = this.account.CreateCloudBlobClient();
    var container = blobClient.GetContainerReference(this.blobContainer);

    var blob = container.GetBlockBlobReference(blobName);

    var policy = new SharedAccessBlobPolicy
    {
      Permissions = SharedAccessBlobPermissions.Write,

      // Specify a start time five minutes earlier to allow for client clock skew.
      SharedAccessStartTime = DateTime.UtcNow.AddMinutes(-5),

      // Specify a validity period of five minutes starting from now.
      SharedAccessExpiryTime = DateTime.UtcNow.AddMinutes(5)
    };

    // Create the signature.
    var sas = blob.GetSharedAccessSignature(policy);

    return new StorageEntitySas
    {
      BlobUri = blob.Uri,
      Credentials = sas,
      Name = blobName
    };
  }

  public struct StorageEntitySas
  {
    public string Credentials;
    public Uri BlobUri;
    public string Name;
  }
}

Tam örnek, GitHub’dan indirebileceğiniz ValetKey çözümünde kullanılabilir.The complete sample is available in the ValetKey solution available for download from GitHub. Bu çözümdeki ValetKey.Web projesi, yukarıda gösterilen ValuesController sınıfının dahil olduğu bir web uygulaması içerir.The ValetKey.Web project in this solution contains a web application that includes the ValuesController class shown above. 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.A sample client application that uses this web application to retrieve a shared access signatures key and upload a file to blob storage is available in the ValetKey.Client project.

Sonraki adımlarNext steps

Bu düzen uygulanırken aşağıdaki düzenler ve yönergeler de yararlı olabilir:The following patterns and guidance might also be relevant when implementing this pattern: