azure-aml-job-submit
Submit a training/pipeline/AutoML job whose command or script runs on the cluster as the compute MI.
match (effective permission)
{
"action": "Microsoft.MachineLearningServices/workspaces/jobs/write",
"scope_type": "resource|resourceGroup|subscription"
}
emit
| source type | Identity |
|---|---|
| source | <principal> |
| target | <AML compute cluster or compute instance (BatchJob / VirtualMachine)> |
| permissions | Microsoft.MachineLearningServices/workspaces/jobs/write |
| conditions | service_state |
| state logic | ACTIVE when the target compute has available nodes and the job spec carries an attacker-controlled command / script / notebook reference. CONDITIONAL(service_state) when the cluster is at zero nodes (auto-scale to zero) — the job will run when scale-up occurs. Built-in role AzureML Data Scientist grants this action. |
Narrative
{principal.name} can submit a training or pipeline job (workspaces/jobs/write) to cluster {target.name}; the job command or script runs as the cluster's managed identity.
Raw rule rules/derived/azure/machinelearning.yaml
id: azure-aml-job-submit
emits: CanModifyCode
description: Submit a training/pipeline/AutoML job whose command or script runs on the cluster as the
compute MI.
match_effective_permission:
action: Microsoft.MachineLearningServices/workspaces/jobs/write
scope_type: resource|resourceGroup|subscription
emit:
source_type: Identity
source: <principal>
target: <AML compute cluster or compute instance (BatchJob / VirtualMachine)>
permissions:
- Microsoft.MachineLearningServices/workspaces/jobs/write
conditions:
- service_state
state_logic: "ACTIVE when the target compute has available nodes and the job spec carries an attacker-controlled\
\ command / script / notebook reference. CONDITIONAL(service_state) when the cluster is at zero nodes\
\ (auto-scale to zero) \u2014 the job will run when scale-up occurs. Built-in role AzureML Data Scientist\
\ grants this action."
false_positive_note: The job must carry an attacker-controlled command, script, or notebook reference.
Submitting a job with a trusted, pinned script to a zero-node cluster is CONDITIONAL(service_state).
Does NOT require compute/write; the job submission alone triggers code execution on the existing compute.
narrative: '{principal.name} can submit a training or pipeline job (workspaces/jobs/write) to cluster
{target.name}; the job command or script runs as the cluster''s managed identity.'