Batch'te kullanıcı hesapları altında görevleri çalıştırma

Not

Bu makalede açıklanan kullanıcı hesapları, güvenlik nedeniyle Uzak Masaüstü Protokolü (RDP) veya Secure Shell (SSH) için kullanılan kullanıcı hesaplarından farklıdır.

SSH aracılığıyla Linux sanal makine yapılandırmasını çalıştıran bir düğüme bağlanmak için bkz . Xrdp'yi Ubuntu ile Uzak Masaüstü kullanacak şekilde yükleme ve yapılandırma. RDP aracılığıyla Windows çalıştıran düğümlere bağlanmak için bkz . Windows çalıştıran bir Azure sanal makinesine bağlanma ve oturum açma.

RDP aracılığıyla öğesini çalıştıran bir düğüme bağlanmak için bkz . Azure Cloud Services'da Bir Rol için Uzak Masaüstü Bağlantısını Etkinleştirme.

Azure Batch'teki bir görev her zaman bir kullanıcı hesabı altında çalışır. Varsayılan olarak, görevler yönetici izinleri olmadan standart kullanıcı hesapları altında çalışır. Belirli senaryolarda, bir görevin çalıştırılmasını istediğiniz kullanıcı hesabını yapılandırmak isteyebilirsiniz. Bu makalede kullanıcı hesabı türleri ve bunları senaryonuz için yapılandırma konuları ele alınmaktadır.

Kullanıcı hesabı türleri

Azure Batch, görevleri çalıştırmak için iki tür kullanıcı hesabı sağlar:

  • Otomatik kullanıcı hesapları. Otomatik kullanıcı hesapları, Batch hizmeti tarafından otomatik olarak oluşturulan yerleşik kullanıcı hesaplarıdır. Varsayılan olarak, görevler otomatik kullanıcı hesabı altında çalışır. Görevin otomatik kullanıcı belirtimini, görevin hangi otomatik kullanıcı hesabı altında çalıştırılması gerektiğini belirtmek üzere yapılandırabilirsiniz. Otomatik kullanıcı belirtimi, görevi çalıştıracak otomatik kullanıcı hesabının yükseltme düzeyini ve kapsamını belirtmenize olanak tanır.

  • Adlandırılmış bir kullanıcı hesabı. Havuzu oluştururken havuz için bir veya daha fazla adlandırılmış kullanıcı hesabı belirtebilirsiniz. Her kullanıcı hesabı havuzun her düğümünde oluşturulur. Hesap adına ek olarak, kullanıcı hesabı parolasını, yükseltme düzeyini ve Linux havuzları için SSH özel anahtarını belirtirsiniz. Bir görev eklediğinizde, görevin altında çalıştırılacak adlandırılmış kullanıcı hesabını belirtebilirsiniz.

Önemli

Batch hizmeti sürüm 2017-01-01.4.0, kodunuzu bu sürümü veya sonraki bir sürümü çağırmak için güncelleştirmenizi gerektiren bir hataya neden olan bir değişiklik yaptı. Batch kodunuzu eski bir sürümden güncelleştirmeye yönelik hızlı yönergeler için bkz . Kodunuzu en son Batch istemci kitaplığına güncelleştirme.

Dosya ve dizinlere kullanıcı hesabı erişimi

Hem otomatik kullanıcı hesabı hem de adlandırılmış kullanıcı hesabı, görevin çalışma dizinine, paylaşılan dizine ve çok örnekli görevler dizinine okuma/yazma erişimine sahiptir. Her iki hesap türü de başlangıç ve iş hazırlama dizinlerine okuma erişimine sahiptir.

Görev, başlangıç görevini çalıştırmak için kullanılan hesapla çalışıyorsa, görevin başlangıç görevi dizinine okuma-yazma erişimi vardır. Benzer şekilde, bir görev bir iş hazırlama görevini çalıştırmak için kullanılan hesapla çalışıyorsa, görevin iş hazırlama görev dizinine okuma-yazma erişimi vardır. Görev, başlangıç görevinden veya iş hazırlama görevinden farklı bir hesap altında çalışıyorsa, görevin ilgili dizine yalnızca okuma erişimi olur.

Bir görevden dosya ve dizinlere erişme hakkında daha fazla bilgi için bkz . Dosyalar ve dizinler.

Görevler için yükseltilmiş erişim

Kullanıcı hesabının yükseltme düzeyi, görevin yükseltilmiş erişimle çalışıp çalışmadığını gösterir. Hem otomatik kullanıcı hesabı hem de adlandırılmış kullanıcı hesabı yükseltilmiş erişimle çalıştırılabilir. Yükseltme düzeyi için iki seçenek şunlardır:

  • NonAdmin: Görev, yükseltilmiş erişim olmadan standart bir kullanıcı olarak çalışır. Batch kullanıcı hesabı için varsayılan yükseltme düzeyi her zaman NonAdmin'dir.
  • Yönetici: Görev yükseltilmiş erişime sahip bir kullanıcı olarak çalışır ve tam Yönetici izinleriyle çalışır.

Otomatik kullanıcı hesapları

Varsayılan olarak, görevler Batch'te otomatik kullanıcı hesabı altında, yükseltilmiş erişimi olmayan standart bir kullanıcı olarak ve havuz kapsamıyla çalışır. Havuz kapsamı, görevin havuzdaki herhangi bir görev için kullanılabilen bir otomatik kullanıcı hesabı altında çalıştığı anlamına gelir. Havuz kapsamı hakkında daha fazla bilgi için bkz . Görevi havuz kapsamına sahip otomatik kullanıcı olarak çalıştırma.

Havuz kapsamının alternatifi görev kapsamıdır. Otomatik kullanıcı belirtimi görev kapsamı için yapılandırıldığında, Batch hizmeti yalnızca bu görev için bir otomatik kullanıcı hesabı oluşturur.

Otomatik kullanıcı belirtimi için her biri benzersiz bir otomatik kullanıcı hesabına karşılık gelen dört olası yapılandırma vardır:

  • Görev kapsamıyla yönetici olmayan erişim
  • Görev kapsamına sahip yönetici (yükseltilmiş) erişim
  • Havuz kapsamıyla yönetici olmayan erişim
  • Havuz kapsamıyla yönetici erişimi

Önemli

Görev kapsamı altında çalışan görevlerin düğümdeki diğer görevlere fiili erişimi yoktur. Ancak, hesaba erişimi olan kötü amaçlı bir kullanıcı, yönetici ayrıcalıklarıyla çalışan ve diğer görev dizinlerine erişen bir görev göndererek bu kısıtlamaya geçici bir çözüm sağlayabilir. Kötü amaçlı bir kullanıcı bir düğüme bağlanmak için RDP veya SSH de kullanabilir. Böyle bir senaryonun önüne geçmek için Batch hesap anahtarlarınıza erişimi korumak önemlidir. Hesabınızın gizliliğinin ihlal edilmiş olabileceğinden şüpheleniyorsanız anahtarlarınızı yeniden oluşturduğunuzdan emin olun.

Yükseltilmiş erişime sahip bir görevi otomatik kullanıcı olarak çalıştırma

Yükseltilmiş erişime sahip bir görevi çalıştırmanız gerektiğinde yönetici ayrıcalıkları için otomatik kullanıcı belirtimini yapılandırabilirsiniz. Örneğin, bir başlangıç görevinin düğüme yazılım yüklemek için yükseltilmiş erişime ihtiyacı olabilir.

Not

Yükseltilmiş erişimi yalnızca gerektiğinde kullanın. En iyi yöntemler, istenen sonuca ulaşmak için gereken en düşük ayrıcalığı vermenizi önerir. Örneğin, bir başlangıç görevi tüm kullanıcılar yerine geçerli kullanıcı için yazılım yüklerse, görevlere yükseltilmiş erişim vermekten kaçınabilirsiniz. Başlangıç görevi de dahil olmak üzere aynı hesap altında çalıştırılması gereken tüm görevler için havuz kapsamı ve yönetici olmayan erişim için otomatik kullanıcı belirtimini yapılandırabilirsiniz.

Aşağıdaki kod parçacıklarında otomatik kullanıcı belirtiminin nasıl yapılandırılır gösterilmektedir. Örnekler, yükseltme düzeyini olarak Admin , kapsamı ise olarak Taskayarlar.

Batch .NET

task.UserIdentity = new UserIdentity(new AutoUserSpecification(elevationLevel: ElevationLevel.Admin, scope: AutoUserScope.Task));

Batch Java

taskToAdd.withId(taskId)
        .withUserIdentity(new UserIdentity()
            .withAutoUser(new AutoUserSpecification()
                .withElevationLevel(ElevationLevel.ADMIN))
                .withScope(AutoUserScope.TASK));
        .withCommandLine("cmd /c echo hello");

Batch Python

user = batchmodels.UserIdentity(
    auto_user=batchmodels.AutoUserSpecification(
        elevation_level=batchmodels.ElevationLevel.admin,
        scope=batchmodels.AutoUserScope.task))
task = batchmodels.TaskAddParameter(
    id='task_1',
    command_line='cmd /c "echo hello world"',
    user_identity=user)
batch_client.task.add(job_id=jobid, task=task)

Görevi havuz kapsamına sahip otomatik kullanıcı olarak çalıştırma

Bir düğüm sağlandığında, havuzdaki her düğümde biri yükseltilmiş erişimli, diğeri de yükseltilmiş erişimi olmayan iki havuz genelinde otomatik kullanıcı hesabı oluşturulur. Belirli bir görev için otomatik kullanıcının kapsamını havuz kapsamına ayarlamak, görevi havuz genelindeki bu iki otomatik kullanıcı hesabından birinin altında çalıştırır.

Otomatik kullanıcı için havuz kapsamı belirttiğinizde, yönetici erişimiyle çalışan tüm görevler aynı havuz genelindeki otomatik kullanıcı hesabı altında çalışır. Benzer şekilde, yönetici izinleri olmadan çalışan görevler de havuz genelinde tek bir otomatik kullanıcı hesabı altında çalışır.

Not

Havuz genelindeki iki otomatik kullanıcı hesabı ayrı hesaplardır. Havuz genelinde yönetim hesabı altında çalışan görevler, standart hesap altında çalışan görevlerle veri paylaşamaz ve tam tersi de geçerlidir.

Aynı otomatik kullanıcı hesabı altında çalıştırmanın avantajı, görevlerin aynı düğümde çalışan diğer görevlerle veri paylaşabilmesidir.

Gizli dizileri görevler arasında paylaşmak, havuz genelindeki iki otomatik kullanıcı hesabından birinin altında görevleri çalıştırmanın yararlı olduğu bir senaryodur. Örneğin, bir başlangıç görevinin düğümde diğer görevlerin kullanabileceği bir gizli dizi sağlaması gerektiğini varsayalım. Windows Veri Koruma API'sini (DPAPI) kullanabilirsiniz, ancak yönetici ayrıcalıkları gerektirir. Bunun yerine, gizli diziyi kullanıcı düzeyinde koruyabilirsiniz. Aynı kullanıcı hesabı altında çalışan görevler gizli diziye yükseltilmiş erişim olmadan erişebilir.

Havuz kapsamına sahip bir otomatik kullanıcı hesabı altında görevleri çalıştırmak isteyebileceğiniz bir diğer senaryo da İleti Geçirme Arabirimi (MPI) dosya paylaşımıdır. MPI görevindeki düğümlerin aynı dosya verileri üzerinde çalışması gerektiğinde MPI dosya paylaşımı yararlıdır. Baş düğüm, alt düğümlerin aynı otomatik kullanıcı hesabı altında çalışıyorsa erişebileceği bir dosya paylaşımı oluşturur.

Aşağıdaki kod parçacığı, Batch .NET'teki bir görevin otomatik kullanıcı kapsamını havuz kapsamına ayarlar. Yükseltme düzeyi atlandığından, görev standart havuz genelindeki otomatik kullanıcı hesabı altında çalışır.

task.UserIdentity = new UserIdentity(new AutoUserSpecification(scope: AutoUserScope.Pool));

Adlandırılmış kullanıcı hesapları

Havuz oluştururken adlandırılmış kullanıcı hesapları tanımlayabilirsiniz. Adlandırılmış bir kullanıcı hesabının sağladığınız bir adı ve parolası vardır. Adlandırılmış bir kullanıcı hesabı için yükseltme düzeyini belirtebilirsiniz. Linux düğümleri için bir SSH özel anahtarı da sağlayabilirsiniz.

Adlandırılmış bir kullanıcı hesabı havuzdaki tüm düğümlerde bulunur ve bu düğümlerde çalışan tüm görevler için kullanılabilir. Havuz için herhangi bir sayıda adlandırılmış kullanıcı tanımlayabilirsiniz. Bir görev veya görev koleksiyonu eklediğinizde, görevin havuzda tanımlanan adlandırılmış kullanıcı hesaplarından biri altında çalıştırılacağını belirtebilirsiniz.

Adlandırılmış kullanıcı hesabı, bir işteki tüm görevleri aynı kullanıcı hesabı altında çalıştırmak, ancak bunları aynı anda diğer işlerde çalışan görevlerden yalıtmak istediğinizde kullanışlıdır. Örneğin, her iş için adlandırılmış bir kullanıcı oluşturabilir ve her işin görevlerini bu adlandırılmış kullanıcı hesabı altında çalıştırabilirsiniz. Daha sonra her iş kendi görevleriyle bir gizli dizi paylaşabilir, ancak diğer işlerde çalışan görevlerle paylaşılmaz.

Dosya paylaşımları gibi dış kaynaklarda izinleri ayarlayan bir görevi çalıştırmak için adlandırılmış bir kullanıcı hesabı da kullanabilirsiniz. Adlandırılmış bir kullanıcı hesabıyla, kullanıcı kimliğini denetlersiniz ve izinleri ayarlamak için bu kullanıcı kimliğini kullanabilirsiniz.

Adlandırılmış kullanıcı hesapları, Linux düğümleri arasında parolasız SSH'yi etkinleştirir. Çok örnekli görevleri çalıştırması gereken Linux düğümleriyle adlandırılmış bir kullanıcı hesabı kullanabilirsiniz. Havuzdaki her düğüm, havuzun tamamında tanımlanan bir kullanıcı hesabı altında görevler çalıştırabilir. Çok örnekli görevler hakkında daha fazla bilgi için bkz . MPI uygulamalarını çalıştırmak için çok örnekli görevleri kullanma.

Adlandırılmış kullanıcı hesapları oluşturma

Batch'te adlandırılmış kullanıcı hesapları oluşturmak için havuza bir kullanıcı hesapları koleksiyonu ekleyin. Aşağıdaki kod parçacıkları .NET, Java ve Python'da adlandırılmış kullanıcı hesaplarının nasıl oluşturulacağını gösterir. Bu kod parçacıkları, bir havuzda hem yönetici hem de yönetici olmayan adlandırılmış hesapların nasıl oluşturulacağını gösterir.

Batch .NET örneği (Windows)

CloudPool pool = null;
Console.WriteLine("Creating pool [{0}]...", poolId);

// Create a pool using Virtual Machine Configuration.
pool = batchClient.PoolOperations.CreatePool(
    poolId: poolId,
    targetDedicatedComputeNodes: 3,
    virtualMachineSize: "standard_d1_v2",
    VirtualMachineConfiguration: new VirtualMachineConfiguration(
    imageReference: new ImageReference(
                        publisher: "MicrosoftWindowsServer",
                        offer: "WindowsServer",
                        sku: "2019-datacenter-core",
                        version: "latest"),
    nodeAgentSkuId: "batch.node.windows amd64");

// Add named user accounts.
pool.UserAccounts = new List<UserAccount>
{
    new UserAccount("adminUser", "A1bC2d", ElevationLevel.Admin),
    new UserAccount("nonAdminUser", "A1bC2d", ElevationLevel.NonAdmin),
};

// Commit the pool.
await pool.CommitAsync();

Batch .NET örneği (Linux)

CloudPool pool = null;

// Obtain a collection of all available node agent SKUs.
List<NodeAgentSku> nodeAgentSkus =
    batchClient.PoolOperations.ListNodeAgentSkus().ToList();

// Define a delegate specifying properties of the VM image to use.
Func<ImageReference, bool> isUbuntu1804 = imageRef =>
    imageRef.Publisher == "Canonical" &&
    imageRef.Offer == "UbuntuServer" &&
    imageRef.Sku.Contains("20.04-LTS");

// Obtain the first node agent SKU in the collection that matches
// Ubuntu Server 20.04.
NodeAgentSku ubuntuAgentSku = nodeAgentSkus.First(sku =>
    sku.VerifiedImageReferences.Any(isUbuntu2004));

// Select an ImageReference from those available for node agent.
ImageReference imageReference =
    ubuntuAgentSku.VerifiedImageReferences.First(isUbuntu2004);

// Create the virtual machine configuration to use to create the pool.
VirtualMachineConfiguration virtualMachineConfiguration =
    new VirtualMachineConfiguration(imageReference, ubuntuAgentSku.Id);

Console.WriteLine("Creating pool [{0}]...", poolId);

// Create the unbound pool.
pool = batchClient.PoolOperations.CreatePool(
    poolId: poolId,
    targetDedicatedComputeNodes: 3,
    virtualMachineSize: "Standard_A1",
    virtualMachineConfiguration: virtualMachineConfiguration);
// Add named user accounts.
pool.UserAccounts = new List<UserAccount>
{
    new UserAccount(
        name: "adminUser",
        password: "A1bC2d",
        elevationLevel: ElevationLevel.Admin,
        linuxUserConfiguration: new LinuxUserConfiguration(
            uid: 12345,
            gid: 98765,
            sshPrivateKey: new Guid().ToString()
            )),
    new UserAccount(
        name: "nonAdminUser",
        password: "A1bC2d",
        elevationLevel: ElevationLevel.NonAdmin,
        linuxUserConfiguration: new LinuxUserConfiguration(
            uid: 45678,
            gid: 98765,
            sshPrivateKey: new Guid().ToString()
            )),
};

// Commit the pool.
await pool.CommitAsync();

Batch Java örneği

List<UserAccount> userList = new ArrayList<>();
userList.add(new UserAccount().withName(adminUserAccountName).withPassword(adminPassword).withElevationLevel(ElevationLevel.ADMIN));
userList.add(new UserAccount().withName(nonAdminUserAccountName).withPassword(nonAdminPassword).withElevationLevel(ElevationLevel.NONADMIN));
PoolAddParameter addParameter = new PoolAddParameter()
        .withId(poolId)
        .withTargetDedicatedNodes(POOL_VM_COUNT)
        .withVmSize(POOL_VM_SIZE)
        .withVirtualMachineConfiguration(configuration)
        .withUserAccounts(userList);
batchClient.poolOperations().createPool(addParameter);

Batch Python örneği

users = [
    batchmodels.UserAccount(
        name='pool-admin',
        password='A1bC2d',
        elevation_level=batchmodels.ElevationLevel.admin)
    batchmodels.UserAccount(
        name='pool-nonadmin',
        password='A1bC2d',
        elevation_level=batchmodels.ElevationLevel.non_admin)
]
pool = batchmodels.PoolAddParameter(
    id=pool_id,
    user_accounts=users,
    virtual_machine_configuration=batchmodels.VirtualMachineConfiguration(
        image_reference=image_ref_to_use,
        node_agent_sku_id=sku_to_use),
    vm_size=vm_size,
    target_dedicated=vm_count)
batch_client.pool.add(pool)

Yükseltilmiş erişime sahip adlandırılmış bir kullanıcı hesabı altında görev çalıştırma

Görevi yükseltilmiş kullanıcı olarak çalıştırmak için, görevin UserIdentity özelliğini, ElevationLevel özelliği olarak ayarlanmış olarak oluşturulmuş adlandırılmış bir kullanıcı hesabı olarak Adminayarlayın.

Bu kod parçacığı, görevin adlandırılmış bir kullanıcı hesabı altında çalıştırılması gerektiğini belirtir. Bu adlandırılmış kullanıcı hesabı havuz oluşturulduğunda havuzda tanımlanmıştır. Bu durumda, adlandırılmış kullanıcı hesabı yönetici izinleriyle oluşturulmuştur:

CloudTask task = new CloudTask("1", "cmd.exe /c echo 1");
task.UserIdentity = new UserIdentity(AdminUserAccountName);

Kodunuzu en son Batch istemci kitaplığına güncelleştirme

Batch hizmeti sürüm 2017-01-01.4.0, önceki sürümlerde kullanılabilen runElevated özelliğini userIdentity özelliğiyle değiştirerek hataya neden olan bir değişiklik yaptı. Aşağıdaki tablolar, kodunuzu istemci kitaplıklarının önceki sürümlerinden güncelleştirmek için kullanabileceğiniz basit bir eşleme sağlar.

Batch .NET

Kodunuz kullanıyorsa... Güncelleştirin....
CloudTask.RunElevated = true; CloudTask.UserIdentity = new UserIdentity(new AutoUserSpecification(elevationLevel: ElevationLevel.Admin));
CloudTask.RunElevated = false; CloudTask.UserIdentity = new UserIdentity(new AutoUserSpecification(elevationLevel: ElevationLevel.NonAdmin));
CloudTask.RunElevated belirtilmemiş Güncelleştirme gerekmez

Batch Java

Kodunuz kullanıyorsa... Güncelleştirin....
CloudTask.withRunElevated(true); CloudTask.withUserIdentity(new UserIdentity().withAutoUser(new AutoUserSpecification().withElevationLevel(ElevationLevel.ADMIN));
CloudTask.withRunElevated(false); CloudTask.withUserIdentity(new UserIdentity().withAutoUser(new AutoUserSpecification().withElevationLevel(ElevationLevel.NONADMIN));
CloudTask.withRunElevated belirtilmemiş Güncelleştirme gerekmez

Batch Python

Kodunuz kullanıyorsa... Güncelleştirin....
run_elevated=True user_identity=usernerede
user = batchmodels.UserIdentity(
     auto_user=batchmodels.AutoUserSpecification(
          elevation_level=batchmodels.ElevationLevel.admin))
run_elevated=False user_identity=usernerede
user = batchmodels.UserIdentity(
     auto_user=batchmodels.AutoUserSpecification(
          elevation_level=batchmodels.ElevationLevel.non_admin))
run_elevated belirtilmemiş Güncelleştirme gerekmez

Sonraki adımlar

  • Batch hizmeti iş akışı ve havuzlar, düğümler, işler ve görevler gibi birincil kaynaklar hakkında bilgi edinin.
  • Azure Batch'teki dosyalar ve dizinler hakkında bilgi edinin.