module/ConfigurationProvider/ControlConfigurations/Services/MachineLearningWorkspace.json

{
  "FeatureName": "MachineLearningWorkspace",
  "Reference": "",
  "IsMaintenanceMode": false,
  "Controls": [
    {
      "ControlID": "Azure_MachineLearningWorkspace_DP_Enable_Encryption_With_Customer_Managed_Keys_MCSB",
      "Description": "[MCSB] Azure Machine Learning workspaces should be encrypted with a customer-managed key",
      "Id": "MachineLearningWorkspace110",
      "ControlSeverity": "High",
      "Automated": "Yes",
      "ControlScanSource": "MDC",
      "DisplayName": "[MCSB] Azure Machine Learning workspaces should be encrypted with a customer-managed key",
      "Category": "Encrypt data in transit",
      "ControlRequirements": "Data must be encrypted in transit and at rest",
      "Rationale": "Data Encryption ensures that sensitive data is stored encrypted at rest. This minimizes the risk of data loss from physical theft and also helps meet regulatory compliance requirements. And by using a customer-managed key, you can supplement default encryption with an additional encryption layer.",
      "Recommendation": "To use customer managed keys in Azure Machine Learning Worskpace, please refer: https://learn.microsoft.com/en-us/azure/machine-learning/how-to-setup-customer-managed-keys",
      "Tags": [
        "MachineLearningWorkspace",
        "Automated",
        "Baseline",
        "DP"
      ],
      "AssessmentProperties": {
        "AssessmentNames": [
          "bbd14f11-6228-4588-82a4-517b8d77b23f"
        ],
        "AssessmentStatusMappings": [
          {
            "AssessmentStatusCode": "NotApplicable",
            "EffectiveVerificationResult": "Failed",
            "AssessmentStatusCausePatterns": "(.)*OffByPolicy|Exempt(.)*",
            "AppendMessageToStatusReason": "Disabling or exempting the policy from getting evaluated is not recommended. The Control will be marked as Failed."
          }
        ]
      },
      "Enabled": false,
      "CustomTags": [
        "Daily",
        "MCSB"
      ]
    },
    {
      "ControlID": "Azure_MachineLearningWorkspace_NetSec_Use_Private_Link_MCSB",
      "Description": "[MCSB] Azure Machine Learning workspaces should use private link",
      "Id": "MachineLearningWorkspace120",
      "ControlSeverity": "High",
      "Automated": "Yes",
      "ControlScanSource": "MDC",
      "DisplayName": "[MCSB] Azure Machine Learning workspaces should use private link",
      "Category": "Deploy controls to restrict network traffic",
      "ControlRequirements": "Restrict network traffic flows",
      "Rationale": "Azure Private Link lets you connect your virtual network to Azure services without a public IP address at the source or destination. The Private Link platform handles the connectivity between the consumer and services over the Azure backbone network. By mapping private endpoints to Azure Machine Learning workspaces, data leakage risks are reduced.",
      "Recommendation": "To configure private links in Azure Machine Learning Workspace, please refer: https://learn.microsoft.com/en-us/azure/machine-learning/how-to-configure-private-link?tabs=azure-portal",
      "Tags": [
        "MachineLearningWorkspace",
        "Automated",
        "Baseline",
        "NetSec"
      ],
      "AssessmentProperties": {
        "AssessmentNames": [
          "692343df-7e70-b082-7b0e-67f97146cea3"
        ],
        "AssessmentStatusMappings": [
          {
            "AssessmentStatusCode": "NotApplicable",
            "EffectiveVerificationResult": "Failed",
            "AssessmentStatusCausePatterns": "(.)*OffByPolicy|Exempt(.)*",
            "AppendMessageToStatusReason": "Disabling or exempting the policy from getting evaluated is not recommended. The Control will be marked as Failed."
          }
        ]
      },
      "Enabled": false,
      "CustomTags": [
        "Daily",
        "MCSB"
      ]
    },
    {
      "ControlID": "Azure_MachineLearningWorkspace_AuthN_Disable_Credential_Based_Access_On_Datastore",
      "Description": "Azure ML workspace datastores must not allow credential based access",
      "Id": "MachineLearningWorkspace130",
      "ControlSeverity": "High",
      "Automated": "Yes",
      "MethodName": "CheckDataStoresAuthenticationType",
      "Rationale": "Using credential based access to datastores allows readers of a workspace to get read only access to underlying datasets even if they do not have access to the storage itself. This may possess privacy concerns for sensitive data and gives alternate ways to get access to the connected storage account. Ensure that access to the data is provided via identity based authentication only.",
      "Recommendation": "Go to Azure portal: Select your Machine Learning workspace -> Overview blade --> Click on 'Launch Studio' -->Under 'Assets' select data blade --> Select datastore from 'Datastore' tab --> Click on 'Update Authentication' --> Disable 'Save credentials with the datastore for data access'. --> Enable 'Use Workspace managed identity for data preview and profiling in azure machine learning studio' --> Click 'Save'.",
      "DisplayName": "Azure ML workspace datastores must not allow credential based access",
      "ControlRequirements": "Access to data, networks, services, utilities, tools, and applications must be controlled by authentication and authorization mechanisms",
      "Category": "Authentication must be enabled on all user accounts and services",
      "Tags": [
        "Automated",
        "AuthN",
        "Baseline",
        "MachineLearningWorkspace"
      ],
      "Enabled": true,
      "ControlScanSource": "Reader",
      "ControlEvaluationDetails": {
        "RequiredProperties": [
          "DataStoreDetails"
        ]
      },
      "ControlSettings": {
        "AllowedCredentialType": [
          "None"
        ],
        "EvaluatedDataStoreType": [
          "AzureBlob",
          "AzureDataLakeGen1",
          "AzureDataLakeGen2"
        ],
        "ExcludedMachineLearningKinds": [
          "Hub",
          "Project"
        ]
      },
      "CustomTags": [
        "Daily"
      ]
    },
    {
      "ControlID": "Azure_MachineLearningWorkspace_DP_Avoid_Plaintext_Secrets",
      "Description": "Azure ML workspace must not have secrets/credentials present in plain text",
      "Id": "MachineLearningWorkspace140",
      "ControlSeverity": "High",
      "Automated": "Yes",
      "MethodName": "AvoidPlaintextSecretsAsync",
      "Rationale": "Using secrets as plaintext in pipelines either in the form of arguments or parameters makes these secrets visible to all readers of the workspace. Further when the published model/component is shared in a registry these secrets will be propagated there as well making it visible to all readers of the registry. Store secrets in a key vault and refer them in your pipelines accordingly.",
      "Recommendation": "1. Go the workspace in the machine learning studio. 2. Navigate to 'Pipelines' under 'Assets'. 3. Select the pipeline job containing the secrets. 4. Delete the pipeline containing the secret and rotate the found the secret. 5. Make changes in the source code to load the secret from a key vault.",
      "DisplayName": "Azure ML workspace must not have secrets/credentials present in plain text",
      "Category": "Credentials Access",
      "ControlRequirements": "Eliminating plain text credentials",
      "Tags": [
        "Automated",
        "DP",
        "Baseline",
        "MachineLearningWorkspace"
      ],
      "Enabled": true,
      "ControlScanSource": "Reader",
      "ControlSettings": {
        "ExcludedDataStore": [ "datastores/azureml_globaldatasets" ],
        "AllowedCredentialType": [
          "None"
        ],
        "EvaluatedDataStoreType": [
          "AzureBlob"
        ],
        "ExcludedMachineLearningKinds": [
          "Hub",
          "Project"
        ]
      },
      "CustomTags": [
        "Daily",
        "TBv11",
        "TenantBaseline",
        "MSD",
        "TRWave4",
        "TRPreview",
        "TRBaseline",
        "CAIPreview",
        "EDPreview",
        "SMTPreview",
        "SN:ML_AvoidSecrets",
        "CAIWave1",
        "Secrets"
      ]
    },
    {
      "ControlID": "Azure_MachineLearningWorkspace_NetSec_Restrict_Network_Access",
      "Description": "Public network access on Machine Learning Workspace should be disabled or restricted to selected IP Addresses",
      "Id": "MachineLearningWorkspace150",
      "ControlSeverity": "High",
      "Automated": "Yes",
      "ControlScanSource": "Reader",
      "MethodName": "CheckPublicNetworkAccess",
      "DisplayName": "Public network access on Machine Learning Workspace should be disabled or restricted",
      "Category": "Deploy controls to restrict network traffic",
      "ControlRequirements": "Restrict network traffic flows",
      "Rationale": "Machine Learning Workspace firewall should be enabled so that the Machine Learning Workspace is not accessible by default to any public IPs.",
      "Recommendation": "To remediate, restrict public network access on your Machine Learning Workspace. Go to Azure Portal --> your Machine Learning workspace --> Settings --> Networking --> Public access --> Public network access --> Choose either 'Disabled' or 'Enabled from selected IP addresses' --> Save",
      "Tags": [
        "MachineLearningWorkspace",
        "Automated",
        "Baseline",
        "NetSec"
      ],
      "ControlSettings": {
        "ExcludedMachineLearningKinds": [
          "Hub",
          "Project"
        ]
      },
        "Enabled": true,
        "CustomTags": [
          "Daily",
          "TBv11",
          "TenantBaseline",
          "MSD",
          "EDPreview",
          "SMTPreview",
          "SN:ML_DisablePublicAccess"
        ]
      },
      {
        "ControlID": "Azure_MachineLearningWorkspace_AuthN_Disable_SSH_Authentication",
        "Description": "Disable SSH Authentication for the Machine Learning Workspace Compute",
        "Id": "MachineLearningWorkspace160",
        "ControlSeverity": "High",
        "Automated": "Yes",
        "ControlScanSource": "MDCAndReader",
        "MethodName": "CheckMachineLearningWorkspaceComputeLocalAuthentication",
        "DisplayName": "Disable SSH Authentication for the Machine Learning Workspace Compute",
        "Category": "Authentication must be enabled on all user accounts and services.",
        "ControlRequirements": "Access to data, networks, services, utilities, tools, and applications must be controlled by authentication and authorization mechanisms",
        "Rationale": "Using the native enterprise directory for authentication ensures that there is a built-in high level of assurance in the user identity established for subsequent access control. All Enterprise subscriptions are automatically associated with their enterprise directory (xxx.onmicrosoft.com) and users in the native directory are trusted for authentication to enterprise subscriptions.",
        "Recommendation": "To disable SSH on Azure Machine Learning Compute resources, create a new compute instance having SSH disabled.",
        "Tags": [
          "MachineLearningWorkspace",
          "Automated",
          "Baseline",
          "AuthN"
        ],
        "AssessmentProperties": {
          "AssessmentNames": [
            "51740d72-1ff9-455d-ace0-c7384e903168"
          ],
          "AssessmentStatusMappings": [
            {
              "AssessmentStatusCode": "NotApplicable",
              "EffectiveVerificationResult": "Failed",
              "AssessmentStatusCausePatterns": "(.)*OffByPolicy|Exempt(.)*",
              "AppendMessageToStatusReason": "Disabling or exempting the policy from getting evaluated is not recommended. The Control will be marked as Failed."
            }
          ],
          "ResourceDetails": {
            "HasExtendedResourceId": true,
            "ExtendedIdResourceTypes": [
              "microsoft.machinelearningservices/workspaces/computes"
            ],
            "UseExtendedResourceMetadata": false
          }
        },
        "Enabled": true,
        "ControlEvaluationDetails": {
          "RequiredProperties": [
            "MLComputeDetails"
          ]
        },
        "ControlSettings": {
          "CoveredComputeTypes": [
            "ComputeInstance",
            "AmlCompute"
          ],
          "ExcludedMachineLearningKinds": [
            "Hub",
            "Project"
          ]
        },
        "CustomTags": [
          "Weekly",
          "CAIPreview",
          "EDPreview",
          "SMTPreview",
          "SN:ML_Disable_SSH"
        ]
      },
      {
        "ControlID": "Azure_MachineLearningWorkspace_SI_Use_Latest_OS_Image",
        "Description": "Azure Machine Learning compute instances must be recreated to get the latest software updates",
        "Id": "MachineLearningWorkspace200",
        "ControlSeverity": "High",
        "Automated": "Yes",
        "ControlScanSource": "MDCOrReader",
        "MethodName": "CheckLatestOSImage",
        "DisplayName": "Azure Machine Learning compute instances must be recreated to get the latest software updates",
        "Category": "Vulnerabilities must be remediated",
        "ControlRequirements": "Vulnerability scans must be performed and vulnerabilities remediated according to prescribed organizational guidance",
        "Rationale": "Ensure Azure Machine Learning compute instances run on the latest available operating system. Security is improved and vulnerabilities reduced by running with the latest security patches. For more information, visit http://aka.ms/azureml-ci-updates/.",
        "Recommendation": "To update the OS image of an Azure Machine Learning Compute Instance, create a new compute instance. For more information, visit https://aka.ms/azureml-ci-updates.",
        "Tags": [
          "MachineLearningWorkspace",
          "Automated",
          "Baseline",
          "SI"
        ],
        "AssessmentProperties": {
          "AssessmentNames": [
            "ce998c5a-e92a-4893-bbdd-4e1c940363a3"
          ],
          "AssessmentStatusMappings": [
            {
              "AssessmentStatusCode": "NotApplicable",
              "EffectiveVerificationResult": "Failed",
              "AssessmentStatusCausePatterns": "(.)*OffByPolicy|Exempt(.)*",
              "AppendMessageToStatusReason": "Disabling or exempting the policy from getting evaluated is not recommended. The Control will be marked as Failed."
            }
          ],
          "ResourceDetails": {
            "HasExtendedResourceId": true,
            "ExtendedIdResourceTypes": [
              "microsoft.machinelearningservices/workspaces/computes"
            ],
            "UseExtendedResourceMetadata": false
          }
        },
        "ControlSettings": {
          "CoveredComputeTypes": [
            "ComputeInstance"
          ],
          "ExcludedMachineLearningKinds": [
            "Hub",
            "Project"
          ]
        },
        "Enabled": true,
        "CustomTags": [
          "Daily",
          "TBv11",
          "TenantBaseline",
          "MSD",
          "EDPreview",
          "SMTPreview",
          "SN:ML_ComputePatching"
        ]
      },
      {
        "ControlID": "Azure_MachineLearningWorkspace_Audit_Enable_Diagnostics_Log",
        "Description": "Diagnostics logs must be enabled for Azure Machine Learning workspace",
        "Id": "MachineLearningWorkspace210",
        "ControlSeverity": "High",
        "Automated": "Yes",
        "ControlScanSource": "Reader",
        "MethodName": "CheckMachineLearningDiagnosticsSettings",
        "DisplayName": "Diagnostics logs must be enabled for Azure Machine Learning workspace",
        "Category": "Monitoring must be correctly configured",
        "ControlRequirements": "Monitoring and auditing must be enabled and correctly configured according to prescribed organizational guidance",
        "Rationale": "Logs should be retained for a long enough period so that activity trail can be recreated when investigations are required in the event of an incident or a compromise. A period of 1 year is typical for several compliance requirements as well.",
        "Recommendation": "You can create or update the diagnostic settings from the Azure Portal by following the steps given here: https://learn.microsoft.com/en-us/azure/azure-monitor/essentials/diagnostic-settings?tabs=portal#create-diagnostic-settings.",
        "Tags": [
          "MachineLearningWorkspace",
          "Automated",
          "Baseline",
          "Audit",
          "Diagnostics"
        ],
        "ControlEvaluationDetails": {
          "RequiredProperties": [
            "DiagnosticSettings"
          ]
        },
        "ControlSettings": {
          "ExcludedMachineLearningKinds": [
            "Hub",
            "Project",
            "FeatureStore"
          ],
          "DiagnosticForeverRetentionValue": "0",
          "DiagnosticMinRetentionPeriod": "365",
          "DiagnosticLogs": [
            "AmlComputeClusterEvent",
            "AmlComputeClusterNodeEvent",
            "AmlComputeJobEvent",
            "AmlComputeCpuGpuUtilization",
            "AmlRunStatusChangedEvent",
            "ModelsChangeEvent",
            "ModelsReadEvent",
            "ModelsActionEvent",
            "DeploymentReadEvent",
            "DeploymentEventACI",
            "DeploymentEventAKS",
            "InferencingOperationAKS",
            "InferencingOperationACI",
            "EnvironmentChangeEvent",
            "EnvironmentReadEvent",
            "DataLabelChangeEvent",
            "DataLabelReadEvent",
            "ComputeInstanceEvent",
            "DataStoreChangeEvent",
            "DataStoreReadEvent",
            "DataSetChangeEvent",
            "DataSetReadEvent",
            "PipelineChangeEvent",
            "PipelineReadEvent",
            "RunEvent",
            "RunReadEvent"
          ]
        },
        "Enabled": true,
        "CustomTags": [
          "Daily",
          "TBv11",
          "TenantBaseline",
          "MSD",
          "EDPreview",
          "SMTPreview",
          "SN:ML_Resourcelogs"
        ]
      },
      {
        "ControlID": "Azure_MachineLearningWorkspace_Netsec_Configure_VNet",
        "Description": "Azure Machine Learning workspace compute services must be connected to a virtual network",
        "Id": "MachineLearningWorkspace220",
        "ControlSeverity": "High",
        "Automated": "Yes",
        "MethodName": "CheckConnectedComputeVnet",
        "Rationale": "Azure Virtual Networks provide enhanced security and isolation for your Azure Machine Learning Compute Clusters and Instances, as well as subnets, access control policies, and other features to further restrict access. When a compute is configured with a virtual network, it is not publicly addressable and can only be accessed from virtual machines and applications within the virtual network.",
        "Recommendation": "To configure virtual network on Azure Machine Learning Compute resources, create a new compute instance with attached virtual networks.",
        "DisplayName": "Azure Machine Learning workspace compute services must be connected to a virtual network",
        "Category": "Deploy controls to restrict network traffic",
        "ControlRequirements": "Restrict network traffic flows",
        "Tags": [
          "Automated",
          "NetSec",
          "Baseline",
          "MachineLearningWorkspace"
        ],
        "Enabled": true,
        "ControlScanSource": "MDCandReader",
        "ControlSettings": {
          "AllowedComputeType": [
            "ComputeInstance",
            "AmlCompute"
          ],
          "ExcludedMachineLearningKinds": [
            "Hub",
            "Project"
          ]
        },
        "AssessmentProperties": {
          "AssessmentNames": [
            "0b712179-f61f-4e80-9286-f7eed8f08a47"
          ],
          "AssessmentStatusMappings": [
            {
              "AssessmentStatusCode": "NotApplicable",
              "EffectiveVerificationResult": "Failed",
              "AssessmentStatusCausePatterns": "(.)*OffByPolicy|Exempt(.)*",
              "AppendMessageToStatusReason": "Disabling or exempting the policy from getting evaluated is not recommended. The Control will be marked as Failed."
            }
          ],
          "ResourceDetails": {
            "HasExtendedResourceId": true,
            "ExtendedIdResourceTypes": [
              "microsoft.machinelearningservices/workspaces/computes"
            ],
            "UseExtendedResourceMetadata": false
          }
        },
        "CustomTags": [
          "Daily",
          "TBv11",
          "TenantBaseline",
          "MSD",
          "EDPreview",
          "SMTPreview",
          "SN:ML_VNet"
        ]
      }
  ]
}