Feladatok futtatása felhasználói fiókok alatt a Batchben
Feljegyzé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, olvassa el az xrdp telepítése és konfigurálása a Távoli asztal Ubuntuval való használatához című témakört. Ha RDP-n keresztül szeretne csatlakozni a Windowst futtató csomópontokhoz, olvassa el a Windowst futtató Azure-beli virtuális gépekhez való csatlakozást és bejelentkezést ismertető témakört.
Ha RDP-n keresztül szeretne csatlakozni egy csomóponthoz, olvassa el a Távoli asztali kapcsolat engedélyezése szerepkörhöz az Azure Cloud Servicesben című témakört.
Az Azure Batchben lévő feladatok mindig felhasználói fiók alatt futnak. A feladatok alapértelmezés szerint rendszergazdai engedélyek nélkül, standard felhasználói fiókokban futnak. Bizonyos esetekben érdemes konfigurálni azt a felhasználói fiókot, amely alatt futtatni szeretné a feladatot. Ez a cikk ismerteti a felhasználói fiókok típusait és azok konfigurálását az Ön forgatókönyvéhez.
Felhasználói fiókok típusai
Az 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ókban kell futtatnia egy feladatot. Az automatikus felhasználó specifikációja lehetővé teszi a feladatot futtató automatikus felhasználói fiók jogosultságszintjének és hatókörének megadását.
Névvel ellátott felhasználói fiók. A készlet létrehozásakor megadhat egy vagy több elnevezett felhasználói fiókot egy 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ágszintszintet és a Linux-készletek esetében az SSH titkos kulcsát. Feladat hozzáadásakor megadhatja azt a elnevezett 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 olyan kompatibilitástörő változást vezetett be, amely megköveteli, hogy frissítse a kódot az adott verzió vagy újabb verzió meghívásához. A Batch-kód régebbi verzióról való frissítésével kapcsolatos rövid útmutatókért 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 tevékenység munkakönyvtárához, megosztott könyvtárához és többpéldányos tevékenységkönyvtárához. Mindkét típusú fiók olvasási hozzáféréssel rendelkezik az indítási és a feladat-előkészítési könyvtárakhoz.
Ha egy tevékenység ugyanabban a fiókban fut, mint amelyet egy indítási tevékenység futtatásához használtak, a tevékenység írás-olvasási hozzáféréssel rendelkezik a kezdő tevékenység könyvtárához. Hasonlóképpen, ha egy tevékenység ugyanabban a fiókban fut, amely egy feladat-előkészítési tevékenység futtatásához volt használva, 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 a kezdé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 névvel ellátott felhasználói fiók is rendszergazdai hozzáféréssel futtatható. A szintszint két lehetősége a következő:
- NonAdmin: A feladat normál felhasználóként fut emelt szintű hozzáférés nélkül. A Batch felhasználói fiókok alapértelmezett emelési szintje mindig NonAdmin.
- Rendszergazda: A feladat rendszergazdai jogosultsággal rendelkező felhasználóként fut, és teljes rendszergazdai engedélyekkel működik.
Automatikus felhasználói fiókok
A feladatok alapértelmezés szerint a Batchben automatikus felhasználói fiók alatt futnak, normál, rendszergazdai hozzáféréssel nem rendelkező felhasználóként és készlet hatókörrel. A készlet hatóköre azt jelenti, hogy a tevékenység egy automatikus felhasználói fiók alatt fut, amely a készlet bármely tevékenységéhez elérhető. A készlet hatókörével kapcsolatos további információkért lásd : Feladat futtatása automatikus felhasználóként készlethatókörrel.
A készlet hatókörének alternatíva a tevékenység hatóköre. Ha az automatikus felhasználó specifikációja a tevékenység hatóköréhez van konfigurálva, a Batch szolgáltatás csak ehhez a tevékenységhez hoz létre automatikus felhasználói fiókot.
Az automatikus felhasználói specifikáció négy lehetséges konfigurációval rendelkezik, amelyek mindegyike egy egyedi automatikus felhasználói fióknak felel meg:
- Nem rendszergazdai hozzáférés tevékenységhatókörrel
- Rendszergazdai (emelt szintű) hozzáférés tevékenységhatókörrel
- Nem rendszergazdai hozzáférés a készlet hatókörével
- Rendszergazdai hozzáférés a készlet hatókörével
Fontos
A tevékenység hatókörében 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 megvédeni a Batch-fiókkulcsokhoz való hozzáférést. 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
A rendszergazdai jogosultságok automatikus felhasználói specifikációját konfigurálhatja, ha emelt szintű hozzáféréssel rendelkező feladatot kell futtatnia. 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.
Feljegyzés
Csak akkor használjon emelt szintű hozzáférést, ha szükséges. 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, akkor előfordulhat, hogy elkerülheti, hogy emelt szintű hozzáférést biztosítson a tevékenységekhez. 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 tevékenységhez, amelyet ugyanazon a fiókon kell futtatni, beleértve a kezdő feladatot is.
Az alábbi kódrészletek bemutatják az automatikus felhasználói specifikáció konfigurálását. A példák a jogosultságszintet és a hatókört a következőre Admin
Task
állítják be: .
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, egy pedig emelt szintű hozzáféréssel. Ha az automatikus felhasználó hatókörét egy adott tevékenységhez készlet hatókörre állítja, a feladat a két készletszintű automatikus felhasználói fiók valamelyike alatt fut.
Amikor megadja az automatikus felhasználó készlettartományá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élyek nélkül futó feladatok is egyetlen készletszintű automatikus felhasználói fiókban futnak.
Feljegyzé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 ugyanazon az automatikus felhasználói fiókon való futtatás előnye, hogy a tevékenységek megoszthatják az adatokat az ugyanazon a csomóponton futó más feladatokkal.
A feladatok közötti titkos kódok megosztása olyan forgatókönyv, amelyben a feladatok futtatása a két készletszintű automatikus felhasználói fiók egyikében hasznos. Tegyük fel például, hogy egy kezdő tevékenységnek titkos kulcsot kell kiépítenie 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 megvédheti a titkos kulcsokat. Az ugyanazon a felhasználói fiókon 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 automatikus felhasználói fiókban szeretne feladatokat futtatni a készlet hatókörével, 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. A fő 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észletre a Batch .NET-ben. A jogosultságszint nincs megadva, ezért a tevékenység 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
Elnevezett felhasználói fiókokat definiálhat készlet létrehozásakor. Egy elnevezett felhasználói fióknak van egy ön által megadott neve és jelszava. Megadhatja egy elnevezett felhasználói fiók emelési szintjét. Linux-csomópontok esetén SSH titkos kulcsot is megadhat.
A névvel ellátott felhasználói fiók a készlet összes csomópontján megtalálható, és az ezeken a csomópontokon futó összes feladat számára elérhető. A készlethez tetszőleges számú elnevezett felhasználót definiálhat. Tevékenység vagy feladatgyűjtemény hozzáadásakor megadhatja, hogy a tevékenység a készletben definiált nevesített felhasználói fiókok egyikében fusson.
A névvel ellátott felhasználói fiókok akkor hasznosak, 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 az adott elnevezett felhasználói fiók alatt. Ezután minden feladat megoszthat egy titkos kulcsot 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ásokon, például fájlmegosztásokon. Egy elnevezett felhasználói fiókkal szabályozhatja a felhasználói identitást, és ezzel a felhasználói identitással állíthat be engedélyeket.
Az elnevezett 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 többpéldányos feladatok futtatásához szükséges Linux-csomópontokkal is használhat. A készlet minden csomópontja futtathat feladatokat a teljes készleten meghatározott felhasználói fiókban. A többpéldányos tevékenységekről további információt a Többpéldányos feladatok használata MPI-alkalmazások futtatásához című témakörben talál.
Elnevezett felhasználói fiókok létrehozása
Ha elnevezett felhasználói fiókokat szeretne létrehozni a Batchben, adjon hozzá felhasználói fiókok gyűjteményét a készlethez. Az alábbi kódrészletek bemutatják, hogyan hozhat létre elnevezett felhasználói fiókokat .NET-ben, Java-ban és 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", "A1bC2d", ElevationLevel.Admin),
new UserAccount("nonAdminUser", "A1bC2d", 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: "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-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='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)
Feladat futtatása emelt szintű hozzáféréssel rendelkező elnevezett felhasználói fiók alatt
Ha rendszergazdai jogú 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étrehozvaAdmin
.
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észleten. Ebben az esetben a névvel ellátott 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, a korábbi verziókban elérhető runElevated tulajdonságot pedig 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=user hol user = batchmodels.UserIdentity( auto_user=batchmodels.AutoUserSpecification( elevation_level=batchmodels.ElevationLevel.admin)) |
run_elevated=False |
user_identity=user hol 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
- Ismerje meg a Batch szolgáltatás munkafolyamatát és az elsődleges erőforrásokat , például készleteket, csomópontokat, feladatokat és feladatokat.
- Tudnivalók az Azure Batch fájljairól és könyvtárairól .