Megosztás a következőn keresztül:


Feladatok futtatása felhasználói fiókok alatt a Batchben

Megjegyzés

A cikkben tárgyalt felhasználói fiókok biztonsági okokból eltérnek a Távoli asztali protokollhoz (RDP) vagy a Secure Shellhez (SSH) használt felhasználói fiókoktól.

Ha SSH-n keresztül szeretne csatlakozni egy Linux rendszerű virtuálisgép-konfigurációt futtató csomóponthoz, tekintse meg az xrdp telepítését és konfigurálását a Távoli asztal Ubuntuval való használatához. Ha RDP-n keresztül szeretne csatlakozni a Windowst futtató csomópontokhoz, tekintse meg a Windowst futtató Azure-beli virtuális géphez való csatlakozást és bejelentkezést ismertető cikket.

Az RDP-n keresztül futó csomóponthoz való csatlakozáshoz lásd: Távoli asztali kapcsolat engedélyezése szerepkörhöz az Azure Cloud Services.

A Azure Batch feladat mindig egy felhasználói fiók alatt fut. Alapértelmezés szerint a feladatok rendszergazdai engedélyek nélkül, standard felhasználói fiókokban futnak. Bizonyos esetekben érdemes lehet konfigurálni azt a felhasználói fiókot, amely alatt futtatni szeretné a feladatot. Ez a cikk a felhasználói fiókok típusait és azok konfigurálását ismerteti az Ön forgatókönyvéhez.

Felhasználói fiókok típusai

Azure Batch kétféle felhasználói fiókot biztosít a feladatok futtatásához:

  • Automatikus felhasználói fiókok. Az automatikus felhasználói fiókok olyan beépített felhasználói fiókok, amelyeket a Batch szolgáltatás automatikusan hoz létre. Alapértelmezés szerint a feladatok automatikus felhasználói fiók alatt futnak. A tevékenységek automatikus felhasználói specifikációját úgy konfigurálhatja, hogy jelezze, melyik automatikus felhasználói fiók alatt kell futtatnia egy feladatot. Az automatikus felhasználói specifikáció lehetővé teszi a feladatot futtató automatikus felhasználói fiók jogosultságszintjének és hatókörének megadását.

  • Egy elnevezett felhasználói fiók. A készlet létrehozásakor megadhat egy vagy több elnevezett felhasználói fiókot a készlethez. Minden felhasználói fiók a készlet minden csomópontján létrejön. A fióknév mellett meg kell adnia a felhasználói fiók jelszavát, a jogosultságszintet és a Linux-készletek esetében az SSH titkos kulcsát. Feladat hozzáadásakor megadhatja azt a nevesített felhasználói fiókot, amely alatt a feladatnak futnia kell.

Fontos

A Batch szolgáltatás 2017-01-01.4.0-s verziója kompatibilitástörő változást vezetett be, amely miatt frissítenie kell a kódot, hogy meghívja az adott verziót vagy újabb verziót. A Batch-kód egy régebbi verzióról való frissítéséhez tekintse meg a Kód frissítése a Legújabb Batch-ügyfélkódtárra című témakört.

Felhasználói fiók hozzáférése fájlokhoz és könyvtárakhoz

Az automatikus felhasználói fiók és a nevesített felhasználói fiók egyaránt olvasási/írási hozzáféréssel rendelkezik a feladat munkakönyvtárához, a megosztott címtárhoz és a többpéldányos feladatok könyvtárához. Mindkét típusú fiók olvasási hozzáféréssel rendelkezik az indítási és feladat-előkészítési könyvtárakhoz.

Ha egy tevékenység ugyanabban a fiókban fut, mint amelyet az indítási tevékenység futtatásához használtak, a tevékenység olvasási-írási hozzáféréssel rendelkezik a kezdési tevékenység könyvtárához. Hasonlóképpen, ha egy tevékenység ugyanabban a fiókban fut, mint amelyet a feladat-előkészítési tevékenység futtatásához használtak, a tevékenység olvasási-írási hozzáféréssel rendelkezik a feladat-előkészítési tevékenység könyvtárához. Ha egy tevékenység az indítási vagy a feladat-előkészítési tevékenységétől eltérő fiókban fut, akkor a tevékenység csak olvasási hozzáféréssel rendelkezik a megfelelő könyvtárhoz.

A fájlok és könyvtárak feladatból való eléréséről további információt a Fájlok és könyvtárak című témakörben talál.

Emelt szintű hozzáférés a tevékenységekhez

A felhasználói fiók jogosultságszintje azt jelzi, hogy egy tevékenység emelt szintű hozzáféréssel fut-e. Az automatikus felhasználói fiók és a nevesített felhasználói fiók is futtatható emelt szintű hozzáféréssel. A jogosultságszint-emelés két lehetősége a következő:

  • Nem Admin: A feladat általános jogú felhasználóként fut emelt szintű hozzáférés nélkül. A Batch-felhasználói fiókok alapértelmezett jogosultságszintje mindig NonAdmin.
  • Rendszergazda: A feladat emelt szintű hozzáféréssel rendelkező felhasználóként fut, és teljes rendszergazdai engedélyekkel működik.

Automatikus felhasználói fiókok

Alapértelmezés szerint a feladatok egy automatikus felhasználói fiók alatt, rendszergazdai hozzáférés nélküli standard felhasználóként és készlethatókörrel futnak a Batchben. A készlet hatóköre azt jelenti, hogy a feladat egy automatikus felhasználói fiók alatt fut, amely a készlet bármely feladata számára elérhető. További információ a készlet hatóköréről: Feladat futtatása automatikus felhasználóként készlethatókörrel.

A készlet hatókörének alternatíva a tevékenységhatókör. Ha az automatikus felhasználói specifikáció konfigurálva van a tevékenységhatókörhöz, a Batch szolgáltatás csak az adott tevékenységhez hoz létre automatikus felhasználói fiókot.

Az automatikus felhasználói specifikációnak négy lehetséges konfigurációja van, amelyek mindegyike egy egyedi automatikus felhasználói fióknak felel meg:

  • Nem rendszergazdai hozzáférés tevékenységhatókörrel
  • Rendszergazda (emelt szintű) hozzáférés tevékenységhatókörrel
  • Nem rendszergazdai hozzáférés készlethatókörrel
  • Rendszergazda hozzáférés a készlet hatókörével

Fontos

A tevékenységhatókör alatt futó tevékenységek nem rendelkeznek de facto hozzáféréssel a csomóponton lévő többi tevékenységhez. A fiókhoz hozzáféréssel rendelkező rosszindulatú felhasználók azonban megkerülhetik ezt a korlátozást egy rendszergazdai jogosultságokkal futtatott és más feladatkönyvtárakhoz hozzáférő feladat elküldésével. A rosszindulatú felhasználók RDP-vel vagy SSH-val is csatlakozhatnak egy csomóponthoz. Az ilyen esetek elkerülése érdekében fontos a Batch-fiókkulcsokhoz való hozzáférés védelme. Ha azt gyanítja, hogy a fiókját feltörték, mindenképpen hozza létre újra a kulcsokat.

Feladat futtatása emelt szintű hozzáféréssel rendelkező automatikus felhasználóként

Rendszergazdai jogosultságokhoz konfigurálhatja az automatikus felhasználói specifikációt, ha emelt szintű hozzáféréssel kell futtatnia egy feladatot. Előfordulhat például, hogy egy indítási feladatnak emelt szintű hozzáférésre van szüksége a szoftver csomópontra való telepítéséhez.

Megjegyzés

Csak akkor használjon emelt szintű hozzáférést, ha szükséges. Az ajánlott eljárások a kívánt eredmény eléréséhez szükséges minimális jogosultság megadását javasolják. Ha például egy indítási feladat szoftvereket telepít az aktuális felhasználó számára, nem pedig az összes felhasználó számára, előfordulhat, hogy elkerülheti, hogy emelt szintű hozzáférést adjon a feladatokhoz. Konfigurálhatja az automatikus felhasználói specifikációt a készlet hatóköréhez és a nem rendszergazdai hozzáféréshez minden olyan feladathoz, amelyet ugyanabban a fiókban kell futtatni, beleértve az indítási feladatot is.

Az alábbi kódrészletek bemutatják, hogyan konfigurálható az automatikus felhasználói specifikáció. A példák a jogosultságszintet értékre Admin , a hatókört pedig értékre Taskállítják.

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)

Feladat futtatása automatikus felhasználóként készlethatókörrel

Csomópont kiépítésekor két készletszintű automatikus felhasználói fiók jön létre a készlet minden csomópontján, egy emelt szintű hozzáféréssel és egy emelt szintű hozzáféréssel. Ha az automatikus felhasználó hatókörét készlethatókörre állítja egy adott tevékenységhez, a rendszer a feladatot a két készletszintű automatikus felhasználói fiók egyikében futtatja.

Amikor megadja az automatikus felhasználó készlethatókörét, a rendszergazdai hozzáféréssel futtatott összes feladat ugyanabban a készletszintű automatikus felhasználói fiókban fut. Hasonlóképpen, a rendszergazdai engedélyekkel nem rendelkező feladatok is egyetlen készletszintű automatikus felhasználói fiókban futnak.

Megjegyzés

A két készletszintű automatikus felhasználói fiók külön fiók. A készletszintű felügyeleti fiókban futó feladatok nem oszthatnak meg adatokat a standard fiókban futó feladatokkal, és fordítva.

Az egyazon automatikus felhasználói fiókban való futtatás előnye, hogy a feladatok adatokat oszthatnak meg az ugyanazon a csomóponton futó más feladatokkal.

A titkos kulcsok tevékenységek közötti megosztása olyan forgatókönyv, amelyben a két készletszintű automatikus felhasználói fiók egyikében futtatott feladatok hasznosak. Tegyük fel például, hogy egy indítási tevékenységnek ki kell építenie egy titkos kódot a csomópontra, amelyet más tevékenységek használhatnak. Használhatja a Windows Data Protection API-t (DPAPI), de rendszergazdai jogosultságokat igényel. Ehelyett felhasználói szinten is védheti a titkos kódot. Az ugyanabban a felhasználói fiókban futó feladatok emelt szintű hozzáférés nélkül férhetnek hozzá a titkos kódhoz.

Egy másik forgatókönyv, amikor egy készlethatókörrel rendelkező automatikus felhasználói fiókban szeretne feladatokat futtatni, az üzenetátadási felület (MPI) fájlmegosztása. Az MPI-fájlmegosztás akkor hasznos, ha az MPI-feladat csomópontjainak ugyanazon a fájladatokon kell dolgozniuk. Az átjárócsomópont létrehoz egy fájlmegosztást, amelyhez a gyermekcsomópontok hozzáférhetnek, ha ugyanazon az automatikus felhasználói fiókon futnak.

Az alábbi kódrészlet beállítja az automatikus felhasználó hatókörét egy tevékenység hatókörének készletbe való beállítására a Batch .NET-ben. A jogosultságszint nincs megadva, így a feladat a standard készletszintű automatikus felhasználói fiók alatt fut.

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

Elnevezett felhasználói fiókok

Készlet létrehozásakor definiálhat elnevezett felhasználói fiókokat. Egy elnevezett felhasználói fióknak van egy ön által megadott neve és jelszava. Megadhatja egy elnevezett felhasználói fiók jogosultságszint-emelési szintjét. Linux-csomópontok esetén SSH titkos kulcsot is megadhat.

A készlet összes csomópontján létezik egy elnevezett felhasználói fiók, amely az adott csomópontokon futó összes feladat számára elérhető. A készlethez tetszőleges számú elnevezett felhasználót definiálhat. Feladat vagy feladatgyűjtemény hozzáadásakor megadhatja, hogy a feladat a készletben definiált nevesített felhasználói fiókok egyike alatt fusson.

A nevesített felhasználói fiók akkor hasznos, ha egy feladat összes feladatát ugyanabban a felhasználói fiókban szeretné futtatni, de el szeretné különíteni őket a más feladatokban egyidejűleg futó feladatoktól. Létrehozhat például egy elnevezett felhasználót minden feladathoz, és futtathatja az egyes feladatok feladatait a nevesített felhasználói fiók alatt. Ezután minden feladat megoszthat egy titkos kódot a saját tevékenységeivel, más feladatokban futó feladatokkal azonban nem.

Elnevezett felhasználói fiók használatával is futtathat olyan feladatot, amely engedélyeket állít be külső erőforrásokra, például fájlmegosztásokra. Egy elnevezett felhasználói fiókkal ön szabályozhatja a felhasználói identitást, és ezzel a felhasználói identitással állíthatja be az engedélyeket.

A nevesített felhasználói fiókok jelszó nélküli SSH-t tesznek lehetővé a Linux-csomópontok között. Egy elnevezett felhasználói fiókot olyan Linux-csomópontokkal is használhat, amelyeknek többpéldányos feladatokat kell futtatniuk. A készlet minden csomópontja futtathat feladatokat a teljes készleten meghatározott felhasználói fiókban. További információ a többpéldányos feladatokról: Többpéldányos feladatok használata MPI-alkalmazások futtatásához.

Elnevezett felhasználói fiókok létrehozása

Ha elnevezett felhasználói fiókokat szeretne létrehozni a Batchben, adjon hozzá egy felhasználói fiókgyűjteményt a készlethez. Az alábbi kódrészletek bemutatják, hogyan hozhat létre elnevezett felhasználói fiókokat a .NET-ben, a Java-ban és a Pythonban. Ezek a kódrészletek bemutatják, hogyan hozhat létre rendszergazdai és nem rendszergazdai nevű fiókokat egy készleten.

Batch .NET-példa (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", "xyz123", ElevationLevel.Admin),
    new UserAccount("nonAdminUser", "123xyz", ElevationLevel.NonAdmin),
};

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

Batch .NET-példa (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: "xyz123",
        elevationLevel: ElevationLevel.Admin,
        linuxUserConfiguration: new LinuxUserConfiguration(
            uid: 12345,
            gid: 98765,
            sshPrivateKey: new Guid().ToString()
            )),
    new UserAccount(
        name: "nonAdminUser",
        password: "123xyz",
        elevationLevel: ElevationLevel.NonAdmin,
        linuxUserConfiguration: new LinuxUserConfiguration(
            uid: 45678,
            gid: 98765,
            sshPrivateKey: new Guid().ToString()
            )),
};

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

Batch Java-példa

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-példa

users = [
    batchmodels.UserAccount(
        name='pool-admin',
        password='******',
        elevation_level=batchmodels.ElevationLevel.admin)
    batchmodels.UserAccount(
        name='pool-nonadmin',
        password='******',
        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)

Feladat futtatása emelt szintű hozzáféréssel rendelkező nevesített felhasználói fiókban

Ha emelt szintű felhasználóként szeretne futtatni egy feladatot, állítsa a tevékenység UserIdentity tulajdonságát egy elnevezett felhasználói fiókra, amely az ElevationLevel tulajdonságával lett létrehozva Admin.

Ez a kódrészlet azt határozza meg, hogy a feladat nevesített felhasználói fiók alatt fusson. Ez a névvel ellátott felhasználói fiók a készlet létrehozásakor lett definiálva a készletben. Ebben az esetben a nevesített felhasználói fiók rendszergazdai engedélyekkel lett létrehozva:

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

A kód frissítése a Batch legújabb ügyfélkódtárára

A Batch szolgáltatás 2017-01-01.4.0-s verziója kompatibilitástörő változást vezetett be, és a korábbi verziókban elérhető runElevated tulajdonságot a userIdentity tulajdonságra cserélte. Az alábbi táblázatok egyszerű leképezést biztosítanak, amellyel frissítheti a kódot az ügyfélkódtárak korábbi verzióiból.

Batch .NET

Ha a kód... Frissítse a...-ra.
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 nincs megadva Nincs szükség frissítésre

Batch Java

Ha a kód... Frissítse a...-ra.
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 nincs megadva Nincs szükség frissítésre

Batch Python

Ha a kód... Frissítse a...-ra.
run_elevated=True user_identity=userAhol
user = batchmodels.UserIdentity(
     auto_user=batchmodels.AutoUserSpecification(
          elevation_level=batchmodels.ElevationLevel.admin))
run_elevated=False user_identity=userAhol
user = batchmodels.UserIdentity(
     auto_user=batchmodels.AutoUserSpecification(
          elevation_level=batchmodels.ElevationLevel.non_admin))
run_elevated nincs megadva Nincs szükség frissítésre

Következő lépések