Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Uwaga
Konta użytkowników omówione w tym artykule różnią się od kont użytkowników używanych w przypadku protokołu RDP (Remote Desktop Protocol) lub Secure Shell (SSH) ze względów bezpieczeństwa.
Aby nawiązać połączenie z węzłem z uruchomioną konfiguracją maszyny wirtualnej z systemem Linux za pośrednictwem protokołu SSH, zobacz Instalowanie i konfigurowanie środowiska xrdp do korzystania z pulpitu zdalnego z systemem Ubuntu. Aby nawiązać połączenie z węzłami z systemem Windows za pośrednictwem protokołu RDP, zobacz Jak nawiązać połączenie i zalogować się do maszyny wirtualnej platformy Azure z systemem Windows.
Zadanie w usłudze Azure Batch zawsze jest uruchamiane na koncie użytkownika. Domyślnie zadania są uruchamiane na kontach użytkowników standardowych bez uprawnień administratora. W przypadku niektórych scenariuszy możesz skonfigurować konto użytkownika, w ramach którego ma zostać uruchomione zadanie. W tym artykule omówiono typy kont użytkowników i sposób ich konfigurowania na potrzeby danego scenariusza.
Typy kont użytkowników
Usługa Azure Batch udostępnia dwa typy kont użytkowników do uruchamiania zadań:
Automatyczne konta użytkowników. Konta użytkowników automatycznych to wbudowane konta użytkowników tworzone automatycznie przez usługę Batch. Domyślnie zadania są uruchamiane na koncie użytkownika automatycznego. Możesz skonfigurować specyfikację automatycznego użytkownika dla zadania, aby wskazać, w ramach którego konta użytkownika automatycznego ma zostać uruchomione zadanie. Specyfikacja użytkownika automatycznego umożliwia określenie poziomu podniesienia uprawnień i zakresu konta użytkownika automatycznego, który uruchamia zadanie.
Nazwane konto użytkownika. Podczas tworzenia puli można określić jedno lub więcej nazwanych kont użytkowników dla puli. Każde konto użytkownika jest tworzone w każdym węźle puli. Oprócz nazwy konta należy określić hasło konta użytkownika, poziom podniesienia uprawnień i, w przypadku pul systemu Linux, klucz prywatny SSH. Po dodaniu zadania można określić nazwane konto użytkownika, w ramach którego ma zostać uruchomione to zadanie.
Ważne
Usługa Batch w wersji 2017-01-01.4.0 wprowadziła zmianę niekompatybilną, która wymaga zaktualizowania kodu w celu wywołania tej wersji lub nowszej. Zobacz Aktualizowanie kodu do najnowszej biblioteki klienta usługi Batch, aby uzyskać szybkie wskazówki dotyczące aktualizowania kodu usługi Batch ze starszej wersji.
Dostęp konta użytkownika do plików i katalogów
Zarówno konto użytkownika automatycznego, jak i nazwane konto użytkownika mają dostęp do odczytu/zapisu do katalogu roboczego zadania, katalogu udostępnionego i katalogu zadań wieloinstancyjnych. Oba typy kont mają dostęp do odczytu do katalogów uruchamiania i przygotowywania zadań.
Jeśli zadanie jest uruchamiane na tym samym koncie, które zostało użyte do uruchamiania zadania startowego, zadanie ma dostęp do odczytu i zapisu do katalogu zadania startowego. Podobnie, jeśli zadanie jest uruchamiane na tym samym koncie, które zostało użyte do uruchamiania zadania przygotowawczego, zadanie ma dostęp do odczytu i zapisu do katalogu tego zadania przygotowawczego. Jeśli zadanie jest uruchamiane na innym koncie niż zadanie startowe lub przygotowania, ma ono tylko dostęp do odczytu do odpowiedniego katalogu.
Ważne
Odrębni użytkownicy zadań w usłudze Batch nie są wystarczającą granicą bezpieczeństwa dla izolacji między zadaniami i skojarzonymi z nimi danymi zadań. W usłudze Batch granica izolacji zabezpieczeń znajduje się na poziomie puli. Jednak niewłaściwa kontrola dostępu do interfejsu API Batch może prowadzić do uzyskania dostępu do wszystkich pul na koncie Batch, jeśli posiada się wystarczające uprawnienia. Zapoznaj się z najlepszymi rozwiązaniami dotyczącymi zabezpieczeń puli.
Aby uzyskać więcej informacji na temat uzyskiwania dostępu do plików i katalogów z zadania, zobacz Pliki i katalogi.
Podwyższony poziom dostępu dla zadań
Poziom podniesienia uprawnień konta użytkownika wskazuje, czy zadanie jest uruchamiane z podwyższonym poziomem dostępu. Zarówno konto użytkownika automatycznego, jak i nazwane konto użytkownika mogą być uruchamiane z podwyższonym poziomem uprawnień. Dostępne są dwie opcje poziomu podniesienia uprawnień:
- NonAdmin: zadanie jest uruchamiane jako użytkownik standardowy bez podwyższonego poziomu dostępu. Domyślny poziom podniesienia uprawnień dla konta użytkownika usługi Batch to zawsze NonAdmin.
- Administrator: zadanie jest uruchamiane jako użytkownik z podwyższonym poziomem dostępu i działa z pełnymi uprawnieniami administratora.
Konta użytkowników automatycznych
Domyślnie zadania są uruchamiane w usłudze Batch w ramach konta użytkownika automatycznego, jako użytkownik standardowy bez podwyższonego poziomu dostępu i z zakresem puli. Zakres puli oznacza, że zadanie jest uruchamiane w ramach konta użytkownika automatycznego, które jest dostępne dla dowolnego zadania w puli. Aby uzyskać więcej informacji na temat zakresu puli, zobacz Uruchamianie zadania jako użytkownik automatyczny z zakresem puli.
Alternatywą dla zakresu puli jest zakres zadań. Gdy specyfikacja automatycznego użytkownika jest skonfigurowana dla zakresu zadań, usługa Batch tworzy tylko konto użytkownika automatycznego dla tego zadania.
Istnieją cztery możliwe konfiguracje specyfikacji użytkownika automatycznego, z których każde odpowiada unikatowemu kontu użytkownika automatycznego.
- Dostęp bez uprawnień administratora z zakresem zadań
- Dostęp administratora (podwyższony poziom uprawnień) z zakresem zadań
- Dostęp bez uprawnień administratora w obszarze puli
- Dostęp administratora z zakresem puli
Uwaga
Konta użytkowników automatycznych z podwyższonym poziomem uprawnień dostępu administratora mają bezpośredni dostęp do zapisu do wszystkich innych katalogów zadań w węźle obliczeniowym wykonującym zadanie. Rozważ uruchomienie zadań z najniższymi uprawnieniami wymaganymi do pomyślnego wykonania.
Uruchom zadanie jako automatyczny użytkownik z podwyższonym poziomem dostępu
Możesz skonfigurować specyfikację automatycznego użytkownika dla uprawnień administratora, gdy musisz uruchomić zadanie z podwyższonym poziomem uprawnień. Na przykład zadanie uruchamiania może wymagać podwyższonego poziomu dostępu do instalowania oprogramowania w węźle.
Uwaga
Użyj dostępu z podwyższonym poziomem uprawnień tylko wtedy, gdy jest to konieczne. Typowym przypadkiem użycia używania podwyższonego poziomu dostępu administratora jest uruchomienie zadania, które musi instalować oprogramowanie w węźle obliczeniowym przed zaplanowaniem innych zadań. W przypadku kolejnych zadań należy użyć zainstalowanego oprogramowania jako użytkownika zadania bez podniesienia uprawnień.
Poniższe fragmenty kodu pokazują, jak skonfigurować specyfikację automatycznego użytkownika. Przykłady ustawiają poziom podniesienia na Admin
i zakres na Task
.
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");
Program wsadowy w Pythonie
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)
Uruchamianie zadania jako użytkownika automatycznego z zakresem puli
Po aprowizacji węzła na każdym węźle w puli są tworzone dwa konta automatycznego użytkownika w całej puli, jedno z podwyższonym poziomem dostępu i jedno bez podwyższonego poziomu dostępu. Ustawienie zakresu użytkownika automatycznego na zakres puli dla danego zadania powoduje uruchomienie tego zadania na jednym z dwóch kont automatycznych dostępnych w całej puli.
Po określeniu zakresu puli dla użytkownika automatycznego wszystkie zadania uruchamiane z dostępem administratora są uruchamiane w ramach tego samego konta użytkownika automatycznego w całej puli. Podobnie zadania uruchamiane bez uprawnień administratora są także uruchamiane na jednym koncie auto-użytkownika w puli.
Zaletą uruchamiania w ramach tego samego konta użytkownika automatycznego jest możliwość łatwego udostępniania danych innym zadaniam uruchomionym w tym samym węźle. Istnieją również korzyści z wydajności ponownego użycia konta użytkownika.
Udostępnianie wpisów tajnych między zadaniami jest jednym ze scenariuszy, w którym uruchamianie zadań w ramach jednego z dwóch kont użytkowników automatycznych w całej puli jest przydatne. Załóżmy na przykład, że zadanie startowe musi umieścić tajny klucz na węźle, którego mogą używać inne zadania. Możesz użyć interfejsu API ochrony danych systemu Windows (DPAPI), ale wymaga uprawnień administratora. Zamiast tego możesz chronić sekret na poziomie użytkownika. Zadania uruchomione na tym samym koncie użytkownika mogą uzyskiwać dostęp do wpisu tajnego bez podwyższonego poziomu dostępu.
Inny scenariusz, w którym możesz chcieć uruchamiać zadania w ramach konta użytkownika automatycznego w obrębie puli, to udostępnianie plików MPI (Message Passing Interface). Udział plików MPI jest przydatny, gdy węzły w zadaniu MPI muszą pracować nad tymi samymi danymi pliku. Węzeł główny tworzy udział plików, do którego węzły podrzędne mogą uzyskiwać dostęp, jeśli są uruchomione na tym samym koncie użytkownika automatycznego.
Poniższy fragment kodu ustawia zakres użytkownika na poziom puli dla zadania w Batch .NET. Poziom podniesienia uprawnień zostanie pominięty, więc zadanie jest uruchamiane w ramach standardowego konta automatycznego użytkownika w całej puli.
task.UserIdentity = new UserIdentity(new AutoUserSpecification(scope: AutoUserScope.Pool));
Nazwane konta użytkowników
Podczas tworzenia puli można zdefiniować nazwane konta użytkowników. Nazwane konto użytkownika ma podaną nazwę i hasło. Możesz określić poziom podniesienia uprawnień dla nazwanego konta użytkownika. W przypadku węzłów systemu Linux można również podać klucz prywatny SSH.
Nazwane konto użytkownika istnieje na każdym węźle w puli i jest dostępne dla wszystkich zadań uruchamianych na tych węzłach. Możesz zdefiniować dowolną liczbę nazwanych użytkowników w ramach puli. Po dodaniu zadania lub kolekcji zadań można określić, że zadanie jest uruchamiane w ramach jednego z nazwanych kont użytkowników zdefiniowanych w puli.
Nazwane konto użytkownika jest przydatne, gdy chcesz uruchamiać wszystkie zadania w zadaniu w ramach tego samego konta użytkownika, ale odizolować je od zadań uruchomionych w innych zadaniach jednocześnie. Można na przykład utworzyć nazwanego użytkownika dla każdego zadania i uruchomić zadania każdego zadania w ramach tego nazwanego konta użytkownika. Każda praca może następnie udostępnić tajny element własnym zadaniom, ale nie zadaniom działającym w innych pracach.
Możesz również użyć nazwanego konta użytkownika do uruchomienia zadania, które ustawia uprawnienia dla zasobów zewnętrznych, takich jak udziały plików. Za pomocą nazwanego konta użytkownika kontrolujesz tożsamość użytkownika i możesz użyć tej tożsamości użytkownika do ustawienia uprawnień.
Nazwane konta użytkowników umożliwiają korzystanie z protokołu SSH bez hasła między węzłami systemu Linux. Możesz użyć nazwanego konta użytkownika z węzłami systemu Linux, które muszą uruchamiać zadania z wieloma wystąpieniami. Każdy węzeł w puli może uruchamiać zadania w ramach konta użytkownika zdefiniowanego w całej puli. Aby uzyskać więcej informacji na temat zadań obejmujących wiele wystąpień, zobacz Używanie zadań z wieloma wystąpieniami do uruchamiania aplikacji MPI.
Tworzenie nazwanych kont użytkowników
Aby utworzyć nazwane konta użytkowników w usłudze Batch, dodaj kolekcję kont użytkowników do puli. Poniższe fragmenty kodu pokazują, jak utworzyć nazwane konta użytkowników na platformie .NET, w języku Java i Python. Te fragmenty kodu pokazują, jak utworzyć konta administratorów i kont innych niż administratorzy w puli.
Przykład platformy .NET usługi Batch (Windows)
CloudPool pool = null;
Console.WriteLine("Creating pool [{0}]...", poolId);
// Create a pool using Virtual Machine Configuration.
pool = batchClient.PoolOperations.CreatePool(
poolId: poolId,
targetDedicatedComputeNodes: 2,
virtualMachineSize: "standard_d2s_v3",
VirtualMachineConfiguration: new VirtualMachineConfiguration(
imageReference: new ImageReference(
publisher: "MicrosoftWindowsServer",
offer: "WindowsServer",
sku: "2022-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();
Przykład platformy .NET usługi Batch (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> isUbuntu2404 = imageRef =>
imageRef.Publisher == "Canonical" &&
imageRef.Offer == "ubuntu-24_04-lts" &&
imageRef.Sku.Contains("server");
// Obtain the first node agent SKU in the collection that matches
NodeAgentSku ubuntuAgentSku = nodeAgentSkus.First(sku =>
sku.VerifiedImageReferences.Any(isUbuntu2404));
// Select an ImageReference from those available for node agent.
ImageReference imageReference =
ubuntuAgentSku.VerifiedImageReferences.First(isUbuntu2404);
// 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: 2,
virtualMachineSize: "Standard_d2s_v3",
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();
Przykład języka Java wsadowego
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);
Przykładowy język Python w usłudze Batch
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)
Uruchamianie zadania w ramach nazwanego konta użytkownika z podwyższonym poziomem uprawnień dostępu
Aby uruchomić zadanie jako użytkownik z podwyższonym poziomem uprawnień, ustaw właściwość UserIdentity zadania Admin
wartość .
Ten fragment kodu określa, że zadanie powinno być uruchamiane w ramach nazwanego konta użytkownika. To nazwane konto użytkownika zostało zdefiniowane w puli podczas tworzenia puli. W takim przypadku nazwane konto użytkownika zostało utworzone z uprawnieniami administratora:
CloudTask task = new CloudTask("1", "cmd.exe /c echo 1");
task.UserIdentity = new UserIdentity(AdminUserAccountName);
Aktualizowanie kodu do najnowszej biblioteki klienta usługi Batch
Usługa Batch w wersji 2017-01-01.4.0 wprowadziła zmianę powodującą niezgodność, zastępując właściwość runElevated dostępną we wcześniejszych wersjach właściwości userIdentity. W poniższych tabelach przedstawiono proste mapowanie, którego można użyć do zaktualizowania kodu z wcześniejszych wersji bibliotek klienckich.
Batch .NET
Jeśli kod używa... | Zaktualizuj go do.... |
---|---|
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 nie określono |
Brak wymaganej aktualizacji |
Batch Java
Jeśli kod używa... | Zaktualizuj go do.... |
---|---|
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 nie określono |
Brak wymaganej aktualizacji |
Batch Python
Jeśli Twój kod używa... | Zaktualizuj go do.... |
---|---|
run_elevated=True |
user_identity=user gdzie user = batchmodels.UserIdentity( auto_user=batchmodels.AutoUserSpecification( elevation_level=batchmodels.ElevationLevel.admin)) |
run_elevated=False |
user_identity=user , gdzie user = batchmodels.UserIdentity( auto_user=batchmodels.AutoUserSpecification( elevation_level=batchmodels.ElevationLevel.non_admin)) |
run_elevated nie określono |
Brak wymaganej aktualizacji |
Następne kroki
- Dowiedz się więcej o schemacie działania usługi Batch oraz o podstawowych zasobach, takich jak pule, węzły, zadania i operacje.
- Dowiedz się więcej o plikach i katalogach w Azure Batch.