Я пытаюсь получить текущий (вошедший в систему) принципал службы \ идентификатор объекта приложения.мой код:
graphrbac_client = GraphRbacManagementClient(
credentials = ServicePrincipalCredentials(
client_id = CLIENT,
secret = KEY,
tenant = TENANT_ID,
resource = "https://graph.windows.net"
),
TENANT_ID
)
for sp in graphrbac_client.service_principals.list():
if sp.app_id == graphrbac_client.config.credentials.id:
print('found it')
, который работает, но требует слишком много разрешений для приложения (мне только удалось заставить его работать с Directory.ReadAll, не работает с Application.ReadWrite.All , по некоторым причинам).Кажется, что все методы, которые я нахожу для поиска, требуют знать objectId заранее ... это то, что я пытаюсь получить.
, используя this :
def resolve_service_principal(identifier):
"""Get an object_id from a client_id.
"""
graphrbac_credentials = ServicePrincipalCredentials(
client_id=os.environ['AZURE_CLIENT_ID'],
secret=os.environ['AZURE_CLIENT_SECRET'],
tenant=os.environ['AZURE_TENANT_ID'],
resource="https://graph.windows.net"
)
graphrbac_client = GraphRbacManagementClient(
graphrbac_credentials,
os.environ['AZURE_TENANT_ID']
)
result = list(graphrbac_client.service_principals.list(filter="servicePrincipalNames/any(c:c eq '{}')".format(identifier)))
if result:
return result[0].object_id
raise RuntimeError("Unable to get object_id from client_id")