Aracılığıyla paylaş


Azure Data Lake Storage'da ACL'leri yönetmek için Node.js JavaScript SDK'sını kullanma

Bu makalede, dizinlerin ve dosyaların erişim denetim listelerini almak, ayarlamak ve güncelleştirmek için Node.js nasıl kullanılacağı gösterilmektedir.

Paket (Düğüm Paket Yöneticisi) | Örnekler | Geri BildirimDe bulunmak

Önkoşullar

  • Azure aboneliği - Ücretsiz bir abonelik oluşturun.
  • Hiyerarşik ad alanı (HNS) etkinleştirilmiş Azure depolama hesabı. Oluşturmak için bu yönergeleri izleyin.
  • Node.js LTS
  • Azure CLI sürümü 2.6.0 veya üzeri.
  • Aşağıdaki güvenlik izinlerinden biri:
    • Hedef kapsayıcı, depolama hesabı, üst kaynak grubu veya abonelik kapsamında Depolama Blobu Veri Sahibi rolü atanmış, sağlanan bir Microsoft Entra Id güvenlik sorumlusu.
    • ACL ayarlarını uygulamayı planladığınız hedef kapsayıcının veya dizinin sahibi olan kullanıcı. ACL'leri özyinelemeli olarak ayarlamak için, hedef kapsayıcıdaki veya dizindeki tüm alt öğeleri içerir.
    • Depolama hesabı anahtarı.

Projenizi ayarlama

Bu bölümde, JavaScript için Azure Data Lake Storage istemci kitaplığıyla çalışmak üzere bir proje hazırlama işleminde size yol gösterilir.

Paketleri yükleme

komutunu kullanarak npm install Azure Data Lake Storage ve Azure Identity istemci kitaplıkları için paketleri yükleyin. Azure hizmetlerine parolasız bağlantılar için @azure/kimlik paketi gereklidir.

npm install @azure/storage-file-datalake
npm install @azure/identity

Modülleri yükleme

Gerekli modülleri yüklemek için dosyanızın en üstüne aşağıdaki kodu ekleyin:

const {
AzureStorageDataLake,
DataLakeServiceClient,
StorageSharedKeyCredential
} = require("@azure/storage-file-datalake");

const { DefaultAzureCredential } = require('@azure/identity');

Hesaba bağlanma

Bu makaledeki kod örneklerini çalıştırmak için depolama hesabını temsil eden bir DataLakeServiceClient örneği oluşturmanız gerekir. İstemci nesnesini Microsoft Entra Id kimlik bilgileriyle veya bir hesap anahtarıyla yetkilandırabilirsiniz.

Uygulamanızın kimliğini Microsoft Entra ID ile doğrulamak için JavaScript için Azure kimlik istemci kitaplığını kullanabilirsiniz.

Not

Erişimi yetkilendirmek için Microsoft Entra Id kullanıyorsanız güvenlik sorumlunuza Depolama Blobu Veri Sahibi rolünün atandığından emin olun. ACL izinlerinin nasıl uygulandığı ve bunların değiştirilmesinin etkileri hakkında daha fazla bilgi edinmek için bkz . Azure Data Lake Storage'da erişim denetimi modeli.

İlk olarak, güvenlik sorumlunuza aşağıdaki Azure rol tabanlı erişim denetimi (Azure RBAC) rollerinden birini atamanız gerekir:

Role ACL ayarı özelliği
Depolama Blob Verileri Sahibi Hesaptaki tüm dizinler ve dosyalar.
Depolama Blobu Veri Katılımcısı Yalnızca güvenlik sorumlusuna ait dizinler ve dosyalar.

Ardından bir DataLakeServiceClient örneği oluşturun ve DefaultAzureCredential sınıfının yeni bir örneğini geçirin.

function GetDataLakeServiceClientAD(accountName) {

  const dataLakeServiceClient = new DataLakeServiceClient(
      `https://${accountName}.dfs.core.windows.net`,
      new DefaultAzureCredential()
  );

  return dataLakeServiceClient;
}

Verilere erişimi yetkilendirmek için kullanma DefaultAzureCredential hakkında daha fazla bilgi edinmek için bkz . Genel Bakış: Azure SDK'sını kullanarak Azure'da JavaScript uygulamalarının kimliğini doğrulama.

Dizin ACL'lerini alma ve ayarlama

Bu örnek, adlı my-directorydizinin ACL'sini alır ve ayarlar. Bu örnek, sahip olan kullanıcıya okuma, yazma ve yürütme izinleri verir, sahip olan gruba yalnızca okuma ve yürütme izinleri verir ve diğer tüm kullanıcılara okuma erişimi verir.

Not

Uygulamanız Microsoft Entra Id kullanarak erişim yetkisi verirse, uygulamanızın erişimi yetkilendirmek için kullandığı güvenlik sorumlusuna Depolama Blob Veri Sahibi rolü atandığından emin olun. ACL izinlerinin nasıl uygulandığı ve bunların değiştirilmesinin etkileri hakkında daha fazla bilgi edinmek için bkz . Azure Data Lake Storage'da erişim denetimi.

async function ManageDirectoryACLs(fileSystemClient) {

    const directoryClient = fileSystemClient.getDirectoryClient("my-directory");
    const permissions = await directoryClient.getAccessControl();

    console.log(permissions.acl);

    const acl = [
    {
      accessControlType: "user",
      entityId: "",
      defaultScope: false,
      permissions: {
        read: true,
        write: true,
        execute: true
      }
    },
    {
      accessControlType: "group",
      entityId: "",
      defaultScope: false,
      permissions: {
        read: true,
        write: false,
        execute: true
      }
    },
    {
      accessControlType: "other",
      entityId: "",
      defaultScope: false,
      permissions: {
        read: true,
        write: true,
        execute: false
      }

    }

  ];

  await directoryClient.setAccessControl(acl);
}

Ayrıca bir kapsayıcının kök dizininin ACL'sini alabilir ve ayarlayabilirsiniz. Kök dizini almak için DataLakeFileSystemClient.getDirectoryClient yöntemine boş bir dize (/) geçirin.

Dosya ACL'lerini alma ve ayarlama

Bu örnek, adlı upload-file.txtbir dosyanın ACL'sini alır ve ayarlar. Bu örnek, sahip olan kullanıcıya okuma, yazma ve yürütme izinleri verir, sahip olan gruba yalnızca okuma ve yürütme izinleri verir ve diğer tüm kullanıcılara okuma erişimi verir.

Not

Uygulamanız Microsoft Entra Id kullanarak erişim yetkisi verirse, uygulamanızın erişimi yetkilendirmek için kullandığı güvenlik sorumlusuna Depolama Blob Veri Sahibi rolü atandığından emin olun. ACL izinlerinin nasıl uygulandığı ve bunların değiştirilmesinin etkileri hakkında daha fazla bilgi edinmek için bkz . Azure Data Lake Storage'da erişim denetimi.

async function ManageFileACLs(fileSystemClient) {

  const fileClient = fileSystemClient.getFileClient("my-directory/uploaded-file.txt");
  const permissions = await fileClient.getAccessControl();

  console.log(permissions.acl);

  const acl = [
  {
    accessControlType: "user",
    entityId: "",
    defaultScope: false,
    permissions: {
      read: true,
      write: true,
      execute: true
    }
  },
  {
    accessControlType: "group",
    entityId: "",
    defaultScope: false,
    permissions: {
      read: true,
      write: false,
      execute: true
    }
  },
  {
    accessControlType: "other",
    entityId: "",
    defaultScope: false,
    permissions: {
      read: true,
      write: true,
      execute: false
    }

  }

];

await fileClient.setAccessControl(acl);
}

Ayrıca bkz.