@@ -452,13 +452,8 @@ def _obtain_token(
452452 )
453453 arc_endpoint = _get_arc_endpoint ()
454454 if arc_endpoint :
455- if ManagedIdentity .is_user_assigned (managed_identity ):
456- raise ManagedIdentityError ( # Note: Azure Identity for Python raised exception too
457- "Invalid managed_identity parameter. "
458- "Azure Arc supports only system-assigned managed identity, "
459- "See also "
460- "https://learn.microsoft.com/en-us/azure/service-fabric/configure-existing-cluster-enable-managed-identity-token-service" )
461- return _obtain_token_on_arc (http_client , arc_endpoint , resource )
455+ return _obtain_token_on_arc (
456+ http_client , arc_endpoint , resource , managed_identity )
462457 return _obtain_token_on_azure_vm (http_client , managed_identity , resource )
463458
464459
@@ -643,12 +638,19 @@ def _obtain_token_on_service_fabric(
643638class ArcPlatformNotSupportedError (ManagedIdentityError ):
644639 pass
645640
646- def _obtain_token_on_arc (http_client , endpoint , resource ):
641+ def _obtain_token_on_arc (http_client , endpoint , resource , managed_identity = None ):
647642 # https://learn.microsoft.com/en-us/azure/azure-arc/servers/managed-identity-authentication
648643 logger .debug ("Obtaining token via managed identity on Azure Arc" )
644+ params = {"api-version" : "2020-06-01" , "resource" : resource }
645+ if managed_identity :
646+ _adjust_param (params , managed_identity , types_mapping = {
647+ ManagedIdentity .CLIENT_ID : "client_id" ,
648+ ManagedIdentity .RESOURCE_ID : "mi_res_id" ,
649+ ManagedIdentity .OBJECT_ID : "object_id" ,
650+ })
649651 resp = http_client .get (
650652 endpoint ,
651- params = { "api-version" : "2020-06-01" , "resource" : resource } ,
653+ params = params . copy () ,
652654 headers = {"Metadata" : "true" },
653655 )
654656 www_auth = "www-authenticate" # Header in lower case
@@ -674,7 +676,7 @@ def _obtain_token_on_arc(http_client, endpoint, resource):
674676 secret = f .read ()
675677 response = http_client .get (
676678 endpoint ,
677- params = { "api-version" : "2020-06-01" , "resource" : resource } ,
679+ params = params . copy () ,
678680 headers = {"Metadata" : "true" , "Authorization" : "Basic {}" .format (secret )},
679681 )
680682 try :
0 commit comments