【问题标题】:How to Correlate an Object ID from Activity Log to a User, SPN Claim or UPN Claim如何将活动日志中的对象 ID 与用户、SPN 声明或 UPN 声明相关联
【发布时间】:2019-06-20 14:08:53
【问题描述】:

查看我的 Azure 审核日志,发现有人删除了一堆服务。我在“发起者”下看到的是对象 ID (GUID)。文档说这在 JSON 中也被称为“调用者”。

呼叫者:根据可用性执行操作、UPN 声明或 SPN 声明的用户的电子邮件地址。

所以现在尝试了这些 AZ CLI 命令,但没有成功:

寻找用户

sdistefa@Azure:~$ az ad user show --upn-or-object-id 5e9a4129-c335-4dcb-84d0-488531e7b026

但是得到:

Resource '5e9a4129-c335-4dcb-84d0-488531e7b026' does not exist or one of its queried reference-property objects are not present.

寻找服务主体:

sdistefa@Azure:~$ az ad sp list --subscription 9350e6db-d02d-4db7-baee-76f9498dfd13 --spn 5e9a4129-c335-4dcb-84d0-488531e7b026
[]

我需要弄清楚如何查询 UPN 声明或服务主体声明……我猜?

我切换到 Powershell。我询问自己以查看我的 ObjectId,然后尝试通过有效 ID 查找自己的命令。 PS Azure:> Get-AzureADUser -ObjectId "sdistefa@itron.com"

ObjectId 显示名称用户主体名称用户类型 -------- ----------- ----- -------- f9f1560e-ecba-461d-a811-c0f923a7895a 迪斯蒂法诺,史蒂夫 sdistefa@itron.com 会员 天蓝色:/ PS Azure:> Get-AzureADObjectByObjectId -objectid f9f1560e-ecba-461d-a811-c0f923a7895a

ObjectId 显示名称用户主体名称用户类型 -------- ----------- ----- -------- f9f1560e-ecba-461d-a811-c0f923a7895a 迪斯蒂法诺,史蒂夫 sdistefa@itron.com 会员

现在我从活动日志中尝试 ObjectId:它返回一个空白: 天蓝色:/ PS Azure:> Get-AzureADObjectByObjectId -objectid 5e9a4129-c335-4dcb-84d0-488531e7b026 天蓝色:/ PS Azure:>

【问题讨论】:

    标签: azure azure-active-directory


    【解决方案1】:

    您正在使用命令 az ad sp list 将 ID 传递给 -spn 标志,但是 spn 代表“服务主体名称”,因为您在这里处理的是 id,最好使用 az ad sp show 和使用-id 标志:

    az ad sp show --id 00000000-0000-0000-0000-000000000000

    【讨论】:

    • 说“资源 '5e....' 不存在或其查询的参考属性对象之一不存在。”
    • 您能否确认您提供的 ID 肯定是 objectid 而不是您要查询的主体的应用程序(客户端 ID)?这就是您正在寻找服务主体(称为企业应用程序 Azure 门户)而不是应用程序注册
    • 此 GUID 出现在 Azure 活动日志中。 JSON 选项卡显示了标记为“调用者”的相同 GUID。我阅读了 Azure 文档及其说明:调用者:根据可用性执行操作、UPN 声明或 SPN 声明的用户的电子邮件地址。所以我真的不知道我在这里寻找三个中的哪一个。这就是问题。不管是删了一堆还是资源。我在想也许它的用户不再与公司合作?这认为它是来自“删除 RG”操作的 SP,但我在上面的 UPN 和 SPN 之后看到了 CLAIM。所以对我来说,这不是很容易理解。
    • 是的,它可能是已删除的主体(服务或用户)。
    【解决方案2】:

    使用 PowerShell,这就是我所做的:

    $valid_email_regex = '^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$'
    
    if ($activityLogs.Caller -match $valid_email_regex) {
      $resourceLogs["event_initiated_by"] = $activityLogs.Caller
    }
    else {
      $resourceLogs["event_initiated_by"] = "{0} ({1})" -f (Get-AzADServicePrincipal -ObjectId $activityLogs.Caller).DisplayName, $activityLogs.Caller
    }
    

    如果不是电子邮件,则它是 ObjectId,因此我使用“Get-AzADServicePrincipal”来检索 DisplayName(确实使用 ObjectId)。然后我格式化结果以在 DisplayName 后面的括号中添加 ObjectId。

    所以回答你问题的主要命令是:

    (Get-AzADServicePrincipal -ObjectId ***************).DisplayName
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-16
      • 2016-05-04
      • 1970-01-01
      • 1970-01-01
      • 2013-11-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多