Aracılığıyla paylaş


Java ile kapsayıcı veya blob için kullanıcı temsilcisi SAS'i oluşturma

Paylaşılan erişim imzası (SAS), depolama hesabınızdaki kapsayıcılara ve bloblara sınırlı erişim vermenizi sağlar. SAS oluşturduğunuzda, bir istemcinin erişmesine izin verilen Azure Depolama kaynakları, bu kaynaklar üzerinde sahip olduğu izinler ve SAS'nin ne kadar süre geçerli olduğu gibi sınırlamalarını belirtirsiniz.

Her SAS bir anahtarla imzalanır. SAS'i iki yoldan biriyle imzalayabilirsiniz:

  • Microsoft Entra kimlik bilgileri kullanılarak oluşturulan bir anahtarla. Microsoft Entra kimlik bilgileriyle imzalanan SAS, kullanıcı temsilcisi SAS'dir. Kullanıcı temsilcisi SAS oluşturan bir istemciye Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey eylemini içeren bir Azure RBAC rolü atanmalıdır. Daha fazla bilgi için Kullanıcı temsilcisi SAS'ı oluşturma konusuna bakın.
  • Depolama hesabı anahtarıyla. Hem hizmet SAS'i hem de hesap SAS'i depolama hesabı anahtarıyla imzalanmıştır. Hizmet SAS'si oluşturan istemci, ya hesap anahtarına doğrudan erişime sahip olmalıdır ya da Microsoft.Storage/storageAccounts/listkeys/action izni atanmalıdır. Daha fazla bilgi edinmek için bkz. Hizmet SAS'ı oluşturma veya Hesap SAS'ı oluşturma.

Not

Kullanıcı temsilcisi SAS, depolama hesabı anahtarıyla imzalanmış bir SAS için üstün güvenlik sunar. Microsoft mümkün olduğunda kullanıcı temsilcisi SAS'sini kullanmanızı önerir. Daha fazla bilgi için bkz: Paylaşılan Erişim İmzaları (SAS) ile verilere sınırlı erişim verme.

Bu makalede, Java için Azure Depolama istemci kitaplığını kullanarak kapsayıcı veya blob için kullanıcı temsilcisi SAS'i oluşturmak üzere Microsoft Entra kimlik bilgilerinin nasıl kullanılacağı gösterilmektedir.

Kullanıcı temsilcisi SAS hakkında

Kapsayıcıya veya bloba erişim için SAS belirteci, Microsoft Entra kimlik bilgileri veya hesap anahtarı kullanılarak güvenli hale getirilebilir. Microsoft Entra kimlik bilgileriyle güvenliği sağlanan bir SAS, kullanıcı adına istenen OAuth 2.0 belirteci ile imzalandığından kullanıcı temsilcisi SAS olarak adlandırılır.

Microsoft, mümkün olduğunda microsoft Entra kimlik bilgilerini daha kolay ele geçirilebilen hesap anahtarını kullanmak yerine en iyi güvenlik uygulaması olarak kullanmanızı önerir. Uygulama tasarımınız paylaşılan erişim imzaları gerektirdiğinde, üstün güvenlik için kullanıcı temsilcisi SAS'ı oluşturmak için Microsoft Entra kimlik bilgilerini kullanın. Kullanıcı temsilcisi SAS hakkında daha fazla bilgi için Kullanıcı temsilcisi SAS'i oluşturma başvurusuna bakın.

Dikkat

Geçerli bir SAS'ye sahip olan tüm istemciler, bu SAS'nin izin verdiği şekilde depolama hesabınızdaki verilere erişebilir. SAS'yi kötü amaçlı veya istenmeyen kullanıma karşı korumak önemlidir. SAS dağıtırken dikkatle hareket edin ve tehlikeye atılmış bir SAS'yi iptal etmek için bir plan oluşturun.

Paylaşılan erişim imzaları hakkında daha fazla bilgi için bkz . Paylaşılan erişim imzalarını (SAS) kullanarak Azure Depolama kaynaklarına sınırlı erişim verme.

Verilere erişim için Azure rolleri atama

Bir Microsoft Entra güvenlik sorumlusu verilere erişmeye çalıştığında, bu güvenlik sorumlusunun kaynak için izinleri olmalıdır. Güvenlik sorumlusunun Azure'da yönetilen bir kimlik veya geliştirme ortamında kod çalıştıran bir Microsoft Entra kullanıcı hesabı olması fark etmeksizin, güvenlik sorumlusuna verilere erişim izni veren bir Azure rolü atanmalıdır. Azure RBAC aracılığıyla izin atama hakkında bilgi için bkz Blob verilerine erişim için Azure rolü atama.

Projenizi ayarlama

Bu makaledeki kod örnekleriyle çalışmak için aşağıdaki içeri aktarma yönergelerini ekleyin:

import com.azure.storage.blob.*;
import com.azure.storage.blob.models.*;
import com.azure.storage.blob.sas.*;

Kimliği doğrulanmış belirteç kimlik bilgisi edinme

Kodunuzun Blob Depolama'ya yönelik istekleri yetkilendirmek için kullanabileceği bir belirteç kimlik bilgisi almak için DefaultAzureCredential sınıfının bir örneğini oluşturun. Yönetilen kimliğe Blob Depolama'ya erişim yetkisi vermek için DefaultAzureCredential sınıfını kullanma hakkında daha fazla bilgi için Azure Identity istemci kitaplığı for Java'ya bakın.

Aşağıdaki kod parçacığında kimliği doğrulanmış belirteç kimlik bilgilerinin nasıl alınacağı ve Blob depolama için bir hizmet istemcisi oluşturmak için nasıl kullanılacağı gösterilmektedir:

BlobServiceClient blobServiceClient = new BlobServiceClientBuilder()
        .endpoint("https://<storage-account-name>.blob.core.windows.net/")
        .credential(new DefaultAzureCredentialBuilder().build())
        .buildClient();

Java SDK'sı ile uygulamalarınızdan Blob Depolama'ya erişim yetkisi verme hakkında daha fazla bilgi edinmek için bkz . Java ve Azure Identity ile Azure kimlik doğrulaması.

Kullanıcı temsilcisi anahtarını alma

Her bir SAS bir anahtarla imzalanır. Öncelikle kullanıcı temsilcisi SAS'ı oluşturmak için bir kullanıcı temsilcisi anahtarı talep etmeniz gerekir, ardından bu anahtar SAS'yi imzalamak için kullanılır. Kullanıcı temsilcisi anahtarı, Microsoft Entra kimlik bilgilerinize bağlı olması dışında hizmet SAS'sini veya hesap SAS'sini imzalamak için kullanılan hesap anahtarına benzer. bir istemci OAuth 2.0 belirtecini kullanarak kullanıcı temsilci anahtarı istediğinde Blob Depolama, kullanıcı adına kullanıcı temsilci anahtarını döndürür.

Kullanıcı temsilcisi anahtarına sahip olduktan sonra, anahtarın ömrü boyunca istediğiniz sayıda kullanıcı temsilcisi paylaşılan erişim imzası oluşturmak için bu anahtarı kullanabilirsiniz. Kullanıcı temsilcisi anahtarı, anahtarı almak için kullanılan OAuth 2.0 belirtecinin bağımsız olduğundan, anahtar hala geçerliyse belirtecin yenilenmesi gerekmez. Anahtarın en fazla yedi güne kadar geçerli kalacağı süreyi belirtebilirsiniz.

Kullanıcı temsilci anahtarını istemek için aşağıdaki yöntemlerden birini kullanın:

Aşağıdaki kod örneği, kullanıcı temsilcisi anahtarının nasıl isteneceklerini gösterir:

public UserDelegationKey requestUserDelegationKey(BlobServiceClient blobServiceClient) {
    // Request a user delegation key that's valid for 1 day, as an example
    UserDelegationKey userDelegationKey = blobServiceClient.getUserDelegationKey(
        OffsetDateTime.now().minusMinutes(5),
        OffsetDateTime.now().plusDays(1));

    return userDelegationKey;
}

Kullanıcı temsilcisi SAS’ı oluşturma

Uygulamanızın gereksinimlerine göre kapsayıcı veya blob için kullanıcı temsilcisi SAS oluşturabilirsiniz.

Kullanıcı temsilcisi anahtarını aldıktan sonra bir kullanıcı temsilcisi SAS'ı oluşturabilirsiniz. BlobContainerClient örneğinden aşağıdaki yöntemi kullanarak bir kapsayıcı kaynağına sınırlı erişimi devretmek için bir kullanıcı yetkilendirme SAS'ı oluşturabilirsiniz.

SAS'yi imzalamak için kullanıcı temsilcisi anahtarı, BlobServiceSasSignatureValues için belirtilen değerlerle birlikte bu yönteme geçirilir. İzinler BlobContainerSasPermission örneği olarak belirtilir.

Aşağıdaki kod örneği, bir kapsayıcı için kullanıcı temsilcisi SAS'sinin nasıl oluşturulacağını gösterir:

public String createUserDelegationSASContainer(BlobContainerClient containerClient, UserDelegationKey userDelegationKey) {
    // Create a SAS token that's valid for 1 day, as an example
    OffsetDateTime expiryTime = OffsetDateTime.now().plusDays(1);

    // Assign read permissions to the SAS token
    BlobContainerSasPermission sasPermission = new BlobContainerSasPermission()
            .setReadPermission(true);

    BlobServiceSasSignatureValues sasSignatureValues = new BlobServiceSasSignatureValues(expiryTime, sasPermission)
            .setStartTime(OffsetDateTime.now().minusMinutes(5));

    String sasToken = containerClient.generateUserDelegationSas(sasSignatureValues, userDelegationKey);
    return sasToken;
}

İstemci nesnesini yetkilendirmek için kullanıcı temsilcisi SAS'si kullanma

Bir istemci nesnesini SAS tarafından verilen izinlere göre kapsayıcı veya blob üzerinde işlem gerçekleştirme yetkisi vermek için kullanıcı temsilcisi SAS kullanabilirsiniz.

Aşağıdaki kod örneği, bir BlobContainerClient nesnesini yetkilendirmek için önceki örnekte oluşturulan kullanıcı temsilcisi SAS'sinin nasıl kullanılacağını gösterir. Bu istemci nesnesi, SAS tarafından verilen izinlere göre kapsayıcı kaynağında işlemler gerçekleştirmek için kullanılabilir.

// Create a SAS token for a container
BlobContainerClient containerClient = blobServiceClient.getBlobContainerClient("sample-container");
String sasToken = createUserDelegationSASContainer(containerClient, userDelegationKey);

// Create a new BlobContainerClient using the SAS token
BlobContainerClient sasContainerClient = new BlobContainerClientBuilder()
        .endpoint(containerClient.getBlobContainerUrl())
        .sasToken(sasToken)
        .buildClient();

Kaynaklar

Java için Azure Blob Depolama istemci kitaplığını kullanarak kullanıcı temsilcisi SAS oluşturma hakkında daha fazla bilgi edinmek için aşağıdaki kaynaklara bakın.

Kod örnekleri

REST API işlemleri

Java için Azure SDK, Azure REST API'sinin üzerinde derlenmiş kitaplıklar içerir ve tanıdık Java paradigmalarıyla REST API işlemleriyle etkileşim kurmanızı sağlar. Kullanıcı temsilci anahtarı almak için istemci kitaplığı yöntemi aşağıdaki REST API işlemini kullanır:

İstemci kütüphane kaynakları

Ayrıca bkz.

  • Bu makale, Java için Blob Depolama geliştirici kılavuzunun bir parçasıdır. Daha fazla bilgi edinmek için Java uygulamanızı geliştirin derleyicisi makalelerinde geliştirici kılavuzu makalelerinin tam listesine bakın.