Skip to content

Commit 428ccf2

Browse files
wenjie1070116matferrari-msftjiewe
authored
add a new parameter allow_roleassignment_on_rg to allow/disallow role assignment on resource group level (#35939)
* Python SDK System Datastore Auth AML * Python SDK System Datastore Auth AML * Python SDK System Datastore Auth AML * SDK Updates * Add allow_roleassignment_on_rg for customer to determine whether to allow workspace role assignment on RG level Add allow_roleassignment_on_rg for customer to determine whether to allow workspace role assignment on resource group level * update the type of allow_roleassignment_on_rg * update allow_roleassignment_on_rg to be boolean * address lint check errors * run black to fix the formatting issue --------- Co-authored-by: Matthew Ferrari <[email protected]> Co-authored-by: jiewe <[email protected]>
1 parent 72919a9 commit 428ccf2

File tree

12 files changed

+145
-1
lines changed

12 files changed

+145
-1
lines changed

sdk/ml/azure-ai-ml/azure/ai/ml/_arm_deployments/arm_templates/workspace_base.json

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -416,6 +416,24 @@
416416
"description": "Managed network settings to be used for the workspace. If not specified, isolation mode Disabled is the default"
417417
}
418418
},
419+
"systemDatastoresAuthMode": {
420+
"type": "string",
421+
"defaultValue": "accesskey",
422+
"metadata": {
423+
"description": "The authentication mode for system datastores"
424+
}
425+
},
426+
"allowRoleAssignmentOnRG": {
427+
"type": "string",
428+
"defaultValue": "true",
429+
"allowedValues": [
430+
"true",
431+
"false"
432+
],
433+
"metadata": {
434+
"description": "A flag to determine if workspace should be created/update with allow role assignment on resource group level."
435+
}
436+
},
419437
"spark_runtime_version": {
420438
"type": "string",
421439
"defaultValue": "",

sdk/ml/azure-ai-ml/azure/ai/ml/_arm_deployments/arm_templates/workspace_param.json

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,9 @@
128128
"managedNetwork": {
129129
"value": {}
130130
},
131+
"systemDatastoresAuthMode": {
132+
"value": "accesskey"
133+
},
131134
"spark_runtime_version" : {
132135
"value": null
133136
},
@@ -188,6 +191,9 @@
188191
"enable_data_isolation": {
189192
"value": "false"
190193
},
194+
"allowRoleAssignmentOnRG": {
195+
"value": "true"
196+
},
191197
"serverless_compute_settings": {
192198
"value": {}
193199
},

sdk/ml/azure-ai-ml/azure/ai/ml/_restclient/v2023_08_01_preview/models/_models.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31621,6 +31621,8 @@ class Workspace(Resource):
3162131621
:vartype discovery_url: str
3162231622
:ivar enable_data_isolation:
3162331623
:vartype enable_data_isolation: bool
31624+
:ivar allow_roleassignment_on_rg: Determine whether allow workspace role assignment on resource group level.
31625+
:vartype allow_roleassignment_on_rg: bool
3162431626
:ivar encryption:
3162531627
:vartype encryption: ~azure.mgmt.machinelearningservices.models.EncryptionProperty
3162631628
:ivar existing_workspaces:
@@ -31737,6 +31739,7 @@ class Workspace(Resource):
3173731739
'description': {'key': 'properties.description', 'type': 'str'},
3173831740
'discovery_url': {'key': 'properties.discoveryUrl', 'type': 'str'},
3173931741
'enable_data_isolation': {'key': 'properties.enableDataIsolation', 'type': 'bool'},
31742+
'allow_roleassignment_on_rg': {'key': 'properties.allowRoleAssignmentOnRG', 'type': 'bool'},
3174031743
'encryption': {'key': 'properties.encryption', 'type': 'EncryptionProperty'},
3174131744
'existing_workspaces': {'key': 'properties.existingWorkspaces', 'type': '[str]'},
3174231745
'feature_store_settings': {'key': 'properties.featureStoreSettings', 'type': 'FeatureStoreSettings'},
@@ -31804,6 +31807,8 @@ def __init__(
3180431807
:paramtype discovery_url: str
3180531808
:keyword enable_data_isolation:
3180631809
:paramtype enable_data_isolation: bool
31810+
:keyword allow_roleassignment_on_rg: Determine whether allow workspace role assignment on resource group level.
31811+
:paramtype allow_roleassignment_on_rg: bool
3180731812
:keyword encryption:
3180831813
:paramtype encryption: ~azure.mgmt.machinelearningservices.models.EncryptionProperty
3180931814
:keyword existing_workspaces:
@@ -31875,6 +31880,7 @@ def __init__(
3187531880
self.description = kwargs.get('description', None)
3187631881
self.discovery_url = kwargs.get('discovery_url', None)
3187731882
self.enable_data_isolation = kwargs.get('enable_data_isolation', None)
31883+
self.allow_roleassignment_on_rg = kwargs.get('allow_roleassignment_on_rg', None)
3187831884
self.encryption = kwargs.get('encryption', None)
3187931885
self.existing_workspaces = kwargs.get('existing_workspaces', None)
3188031886
self.feature_store_settings = kwargs.get('feature_store_settings', None)
@@ -32319,6 +32325,8 @@ class WorkspaceUpdateParameters(msrest.serialization.Model):
3231932325
:vartype description: str
3232032326
:ivar enable_data_isolation:
3232132327
:vartype enable_data_isolation: bool
32328+
:ivar allow_roleassignment_on_rg: Determine whether allow workspace role assignment on resource group level.
32329+
:vartype allow_roleassignment_on_rg: bool
3232232330
:ivar encryption:
3232332331
:vartype encryption: ~azure.mgmt.machinelearningservices.models.EncryptionUpdateProperties
3232432332
:ivar feature_store_settings: Settings for feature store type workspace.
@@ -32348,6 +32356,9 @@ class WorkspaceUpdateParameters(msrest.serialization.Model):
3234832356
:ivar v1_legacy_mode: Enabling v1_legacy_mode may prevent you from using features provided by
3234932357
the v2 API.
3235032358
:vartype v1_legacy_mode: bool
32359+
:ivar system_datastores_auth_mode: The auth mode used for accessing the system datastores of
32360+
the workspace.
32361+
:vartype system_datastores_auth_mode: str
3235132362
"""
3235232363

3235332364
_attribute_map = {
@@ -32369,6 +32380,8 @@ class WorkspaceUpdateParameters(msrest.serialization.Model):
3236932380
'service_managed_resources_settings': {'key': 'properties.serviceManagedResourcesSettings', 'type': 'ServiceManagedResourcesSettings'},
3237032381
'soft_delete_retention_in_days': {'key': 'properties.softDeleteRetentionInDays', 'type': 'int'},
3237132382
'v1_legacy_mode': {'key': 'properties.v1LegacyMode', 'type': 'bool'},
32383+
'system_datastores_auth_mode': {'key': 'properties.systemDatastoresAuthMode', 'type': 'str'},
32384+
'allow_roleassignment_on_rg' : {'Key': 'properties.allowRoleAssignmentOnRG', 'type': 'bool'}
3237232385
}
3237332386

3237432387
def __init__(
@@ -32392,6 +32405,8 @@ def __init__(
3239232405
:paramtype description: str
3239332406
:keyword enable_data_isolation:
3239432407
:paramtype enable_data_isolation: bool
32408+
:keyword allow_roleassignment_on_rg: Determine whether allow workspace role assignment on resource group level.
32409+
:paramtype allow_roleassignment_on_rg: bool
3239532410
:keyword encryption:
3239632411
:paramtype encryption: ~azure.mgmt.machinelearningservices.models.EncryptionUpdateProperties
3239732412
:keyword feature_store_settings: Settings for feature store type workspace.
@@ -32422,6 +32437,9 @@ def __init__(
3242232437
:keyword v1_legacy_mode: Enabling v1_legacy_mode may prevent you from using features provided
3242332438
by the v2 API.
3242432439
:paramtype v1_legacy_mode: bool
32440+
:keyword system_datastores_auth_mode: The auth mode used for accessing the system datastores of
32441+
the workspace.
32442+
:paramtype system_datastores_auth_mode: str
3242532443
"""
3242632444
super(WorkspaceUpdateParameters, self).__init__(**kwargs)
3242732445
self.identity = kwargs.get('identity', None)
@@ -32431,6 +32449,7 @@ def __init__(
3243132449
self.container_registry = kwargs.get('container_registry', None)
3243232450
self.description = kwargs.get('description', None)
3243332451
self.enable_data_isolation = kwargs.get('enable_data_isolation', None)
32452+
self.allow_roleassignment_on_rg = kwargs.get('allow_roleassignment_on_rg', None)
3243432453
self.encryption = kwargs.get('encryption', None)
3243532454
self.feature_store_settings = kwargs.get('feature_store_settings', None)
3243632455
self.friendly_name = kwargs.get('friendly_name', None)
@@ -32442,3 +32461,4 @@ def __init__(
3244232461
self.service_managed_resources_settings = kwargs.get('service_managed_resources_settings', None)
3244332462
self.soft_delete_retention_in_days = kwargs.get('soft_delete_retention_in_days', None)
3244432463
self.v1_legacy_mode = kwargs.get('v1_legacy_mode', None)
32464+
self.system_datastores_auth_mode = kwargs.get('system_datastores_auth_mode', None)

sdk/ml/azure-ai-ml/azure/ai/ml/_restclient/v2023_08_01_preview/models/_models_py3.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34323,6 +34323,8 @@ class Workspace(Resource):
3432334323
:vartype discovery_url: str
3432434324
:ivar enable_data_isolation:
3432534325
:vartype enable_data_isolation: bool
34326+
:ivar allow_roleassignment_on_rg: Determine whether allow workspace role assignment on resource group level.
34327+
:vartype allow_roleassignment_on_rg: bool
3432634328
:ivar encryption:
3432734329
:vartype encryption: ~azure.mgmt.machinelearningservices.models.EncryptionProperty
3432834330
:ivar existing_workspaces:
@@ -34439,6 +34441,7 @@ class Workspace(Resource):
3443934441
'description': {'key': 'properties.description', 'type': 'str'},
3444034442
'discovery_url': {'key': 'properties.discoveryUrl', 'type': 'str'},
3444134443
'enable_data_isolation': {'key': 'properties.enableDataIsolation', 'type': 'bool'},
34444+
'allow_roleassignment_on_rg': {'key': 'properties.allowRoleAssignmentOnRG', 'type': 'bool'},
3444234445
'encryption': {'key': 'properties.encryption', 'type': 'EncryptionProperty'},
3444334446
'existing_workspaces': {'key': 'properties.existingWorkspaces', 'type': '[str]'},
3444434447
'feature_store_settings': {'key': 'properties.featureStoreSettings', 'type': 'FeatureStoreSettings'},
@@ -34487,6 +34490,7 @@ def __init__(
3448734490
description: Optional[str] = None,
3448834491
discovery_url: Optional[str] = None,
3448934492
enable_data_isolation: Optional[bool] = None,
34493+
allow_roleassignment_on_rg: Optional[bool] = None,
3449034494
encryption: Optional["EncryptionProperty"] = None,
3449134495
existing_workspaces: Optional[List[str]] = None,
3449234496
feature_store_settings: Optional["FeatureStoreSettings"] = None,
@@ -34541,6 +34545,8 @@ def __init__(
3454134545
:paramtype discovery_url: str
3454234546
:keyword enable_data_isolation:
3454334547
:paramtype enable_data_isolation: bool
34548+
:keyword allow_roleassignment_on_rg: Determine whether allow workspace role assignment on resource group level.
34549+
:paramtype allow_roleassignment_on_rg: bool
3454434550
:keyword encryption:
3454534551
:paramtype encryption: ~azure.mgmt.machinelearningservices.models.EncryptionProperty
3454634552
:keyword existing_workspaces:
@@ -34612,6 +34618,7 @@ def __init__(
3461234618
self.description = description
3461334619
self.discovery_url = discovery_url
3461434620
self.enable_data_isolation = enable_data_isolation
34621+
self.allow_roleassignment_on_rg = allow_roleassignment_on_rg
3461534622
self.encryption = encryption
3461634623
self.existing_workspaces = existing_workspaces
3461734624
self.feature_store_settings = feature_store_settings
@@ -35088,6 +35095,8 @@ class WorkspaceUpdateParameters(msrest.serialization.Model):
3508835095
:vartype description: str
3508935096
:ivar enable_data_isolation:
3509035097
:vartype enable_data_isolation: bool
35098+
:ivar allow_roleassignment_on_rg: Determine whether allow workspace role assignment on resource group level.
35099+
:vartype allow_roleassignment_on_rg: bool
3509135100
:ivar encryption:
3509235101
:vartype encryption: ~azure.mgmt.machinelearningservices.models.EncryptionUpdateProperties
3509335102
:ivar feature_store_settings: Settings for feature store type workspace.
@@ -35117,6 +35126,9 @@ class WorkspaceUpdateParameters(msrest.serialization.Model):
3511735126
:ivar v1_legacy_mode: Enabling v1_legacy_mode may prevent you from using features provided by
3511835127
the v2 API.
3511935128
:vartype v1_legacy_mode: bool
35129+
:ivar system_datastores_auth_mode: The auth mode used for accessing the system datastores of
35130+
the workspace.
35131+
:vartype system_datastores_auth_mode: str
3512035132
"""
3512135133

3512235134
_attribute_map = {
@@ -35138,6 +35150,8 @@ class WorkspaceUpdateParameters(msrest.serialization.Model):
3513835150
'service_managed_resources_settings': {'key': 'properties.serviceManagedResourcesSettings', 'type': 'ServiceManagedResourcesSettings'},
3513935151
'soft_delete_retention_in_days': {'key': 'properties.softDeleteRetentionInDays', 'type': 'int'},
3514035152
'v1_legacy_mode': {'key': 'properties.v1LegacyMode', 'type': 'bool'},
35153+
'system_datastores_auth_mode': {'key': 'properties.systemDatastoresAuthMode', 'type': 'str'},
35154+
'allow_roleassignment_on_rg' : {'Key': 'properties.allowRoleAssignmentOnRG', 'type': 'bool'}
3514135155
}
3514235156

3514335157
def __init__(
@@ -35150,6 +35164,7 @@ def __init__(
3515035164
container_registry: Optional[str] = None,
3515135165
description: Optional[str] = None,
3515235166
enable_data_isolation: Optional[bool] = None,
35167+
allow_roleassignment_on_rg: Optional[bool] = None,
3515335168
encryption: Optional["EncryptionUpdateProperties"] = None,
3515435169
feature_store_settings: Optional["FeatureStoreSettings"] = None,
3515535170
friendly_name: Optional[str] = None,
@@ -35161,6 +35176,7 @@ def __init__(
3516135176
service_managed_resources_settings: Optional["ServiceManagedResourcesSettings"] = None,
3516235177
soft_delete_retention_in_days: Optional[int] = None,
3516335178
v1_legacy_mode: Optional[bool] = None,
35179+
system_datastores_auth_mode: Optional[str] = None,
3516435180
**kwargs
3516535181
):
3516635182
"""
@@ -35180,6 +35196,8 @@ def __init__(
3518035196
:paramtype description: str
3518135197
:keyword enable_data_isolation:
3518235198
:paramtype enable_data_isolation: bool
35199+
:keyword allow_roleassignment_on_rg: Determine whether allow workspace role assignment on resource group level.
35200+
:paramtype allow_roleassignment_on_rg: bool
3518335201
:keyword encryption:
3518435202
:paramtype encryption: ~azure.mgmt.machinelearningservices.models.EncryptionUpdateProperties
3518535203
:keyword feature_store_settings: Settings for feature store type workspace.
@@ -35210,6 +35228,9 @@ def __init__(
3521035228
:keyword v1_legacy_mode: Enabling v1_legacy_mode may prevent you from using features provided
3521135229
by the v2 API.
3521235230
:paramtype v1_legacy_mode: bool
35231+
:keyword system_datastores_auth_mode: The auth mode used for accessing the system datastores of
35232+
the workspace.
35233+
:paramtype system_datastores_auth_mode: str
3521335234
"""
3521435235
super(WorkspaceUpdateParameters, self).__init__(**kwargs)
3521535236
self.identity = identity
@@ -35219,6 +35240,7 @@ def __init__(
3521935240
self.container_registry = container_registry
3522035241
self.description = description
3522135242
self.enable_data_isolation = enable_data_isolation
35243+
self.allow_roleassignment_on_rg = allow_roleassignment_on_rg
3522235244
self.encryption = encryption
3522335245
self.feature_store_settings = feature_store_settings
3522435246
self.friendly_name = friendly_name
@@ -35230,3 +35252,4 @@ def __init__(
3523035252
self.service_managed_resources_settings = service_managed_resources_settings
3523135253
self.soft_delete_retention_in_days = soft_delete_retention_in_days
3523235254
self.v1_legacy_mode = v1_legacy_mode
35255+
self.system_datastores_auth_mode = system_datastores_auth_mode

sdk/ml/azure-ai-ml/azure/ai/ml/_schema/workspace/workspace.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,11 @@ class WorkspaceSchema(PathAwareSchema):
3737
allowed_values=[PublicNetworkAccess.DISABLED, PublicNetworkAccess.ENABLED],
3838
casing_transform=snake_to_pascal,
3939
)
40+
system_datastores_auth_mode = fields.Str()
4041
identity = NestedField(IdentitySchema)
4142
primary_user_assigned_identity = fields.Str()
4243
workspace_hub = fields.Str(validate=validate_arm_str)
4344
managed_network = ExperimentalField(NestedField(ManagedNetworkSchema, unknown=EXCLUDE))
4445
enable_data_isolation = fields.Bool()
46+
allow_roleassignment_on_rg = fields.Bool()
4547
serverless_compute = NestedField(ServerlessComputeSettingsSchema)

sdk/ml/azure-ai-ml/azure/ai/ml/entities/_workspace/workspace.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,9 +81,13 @@ class Workspace(Resource):
8181
:type primary_user_assigned_identity: str
8282
:param managed_network: workspace's Managed Network configuration
8383
:type managed_network: ~azure.ai.ml.entities.ManagedNetwork
84+
:param system_datastores_auth_mode: The authentication mode for system datastores.
85+
:type system_datastores_auth_mode: str
8486
:param enable_data_isolation: A flag to determine if workspace has data isolation enabled.
8587
The flag can only be set at the creation phase, it can't be updated.
8688
:type enable_data_isolation: bool
89+
:param allow_roleassignment_on_rg: Determine whether allow workspace role assignment on resource group level.
90+
:type allow_roleassignment_on_rg: bool
8791
:param serverless_compute: The serverless compute settings for the workspace.
8892
:type: ~azure.ai.ml.entities.ServerlessComputeSettings
8993
:param workspace_hub: Deprecated resource ID of an existing workspace hub to help create project workspace.
@@ -120,7 +124,9 @@ def __init__(
120124
identity: Optional[IdentityConfiguration] = None,
121125
primary_user_assigned_identity: Optional[str] = None,
122126
managed_network: Optional[ManagedNetwork] = None,
127+
system_datastores_auth_mode: Optional[str] = None,
123128
enable_data_isolation: bool = False,
129+
allow_roleassignment_on_rg: bool = True,
124130
hub_id: Optional[str] = None, # Hidden input, surfaced by Project
125131
workspace_hub: Optional[str] = None, # Deprecated input maintained for backwards compat.
126132
serverless_compute: Optional[ServerlessComputeSettings] = None,
@@ -159,7 +165,9 @@ def __init__(
159165
self.identity = identity
160166
self.primary_user_assigned_identity = primary_user_assigned_identity
161167
self.managed_network = managed_network
168+
self.system_datastores_auth_mode = system_datastores_auth_mode
162169
self.enable_data_isolation = enable_data_isolation
170+
self.allow_roleassignment_on_rg = allow_roleassignment_on_rg
163171
if workspace_hub and not hub_id:
164172
hub_id = workspace_hub
165173
self.__hub_id = hub_id
@@ -378,8 +386,10 @@ def _from_rest_object(cls, rest_obj: RestWorkspace) -> Optional["Workspace"]:
378386
identity=identity,
379387
primary_user_assigned_identity=rest_obj.primary_user_assigned_identity,
380388
managed_network=managed_network,
389+
system_datastores_auth_mode=rest_obj.system_datastores_auth_mode,
381390
feature_store_settings=feature_store_settings,
382391
enable_data_isolation=rest_obj.enable_data_isolation,
392+
allow_roleassignment_on_rg=rest_obj.allow_roleassignment_on_rg,
383393
hub_id=rest_obj.hub_resource_id,
384394
workspace_id=rest_obj.workspace_id,
385395
serverless_compute=serverless_compute,
@@ -423,8 +433,10 @@ def _to_rest_object(self) -> RestWorkspace:
423433
if self.managed_network
424434
else None
425435
), # pylint: disable=protected-access
436+
system_datastores_auth_mode=self.system_datastores_auth_mode,
426437
feature_store_settings=feature_store_settings,
427438
enable_data_isolation=self.enable_data_isolation,
439+
allow_roleassignment_on_rg=self.allow_roleassignment_on_rg,
428440
hub_resource_id=self._hub_id,
429441
serverless_compute_settings=serverless_compute_settings,
430442
)

sdk/ml/azure-ai-ml/azure/ai/ml/operations/_workspace_operations_base.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ def begin_create(
106106
:rtype: ~azure.core.polling.LROPoller[~azure.ai.ml.entities.Workspace]
107107
:raises ~azure.ai.ml.ValidationException: Raised if workspace is Project workspace and user
108108
specifies any of the following in workspace object: storage_account, container_registry, key_vault,
109-
public_network_access, managed_network, customer_managed_key.
109+
public_network_access, managed_network, customer_managed_key, system_datastores_auth_mode.
110110
"""
111111
existing_workspace = None
112112
resource_group = kwargs.get("resource_group") or workspace.resource_group or self._resource_group_name
@@ -336,6 +336,10 @@ def begin_update(
336336
description=kwargs.get("description", workspace.description),
337337
friendly_name=kwargs.get("display_name", workspace.display_name),
338338
public_network_access=kwargs.get("public_network_access", workspace.public_network_access),
339+
system_datastores_auth_mode=kwargs.get(
340+
"system_datastores_auth_mode", workspace.system_datastores_auth_mode
341+
),
342+
allow_roleassignment_on_rg=kwargs.get("allow_roleassignment_on_rg", workspace.allow_roleassignment_on_rg),
339343
image_build_compute=kwargs.get("image_build_compute", workspace.image_build_compute),
340344
identity=identity,
341345
primary_user_assigned_identity=kwargs.get(
@@ -632,6 +636,12 @@ def _populate_arm_parameters(self, workspace: Workspace, **kwargs: Any) -> Tuple
632636
if workspace.public_network_access:
633637
_set_val(param["publicNetworkAccess"], workspace.public_network_access)
634638

639+
if workspace.system_datastores_auth_mode:
640+
_set_val(param["systemDatastoresAuthMode"], workspace.system_datastores_auth_mode)
641+
642+
if not workspace.allow_roleassignment_on_rg:
643+
_set_val(param["allowRoleAssignmentOnRG"], "false")
644+
635645
if workspace.image_build_compute:
636646
_set_val(param["imageBuildCompute"], workspace.image_build_compute)
637647

0 commit comments

Comments
 (0)