您如何查明是谁冒充了 GCP 服务帐号?
Posted
技术标签:
【中文标题】您如何查明是谁冒充了 GCP 服务帐号?【英文标题】:How do you find out who has impersonated the GCP Service account? 【发布时间】:2020-03-18 04:51:54 【问题描述】:我正在处理一个需求,其中需要知道哪个用户/机器实际创建了实例。
例如,如果一个计算实例是由一个服务帐户创建的,我们如何知道是哪个用户创建的。基本上,目的是我们是否可以捕获 IP 地址/MAC 地址以检查是否存在任何安全漏洞?
欢迎任何提示!!!
【问题讨论】:
1/2) 任何拥有服务帐户密钥的人都可以使用服务帐户。没有直接的方法可以跟踪这一点。如果用户登录到 Compute Engine 实例,auth.log 将记录谁/何时登录。但是,您必须手动设置 Stackdriver 来记录此文件。对于 IP 地址,这会记录到 Stackdriver,以使用服务帐号身份记录每个记录的操作。但是,登录用户和使用服务帐户的行为没有匹配。这将不得不被推断。操作系统服务也可以使用服务帐户。 2/2) 服务帐户是一种身份。可以“假设”一个服务帐户身份,但这在 Google Cloud 中很少见。最简单形式的服务帐户只是一个密钥。与谁在使用它没有联系。您必须实施策略以向每个用户发出单独的密钥以跟踪他们的使用情况。例如,只给用户 Bob 服务帐户 X。那么您可以从 Stackdriver 的访问日志中暗示 Bob 是用户。否则,您必须对活动进行逆向工程。 感谢@JohnHanley 提供的信息。我相信,设置一个流程来控制谁访问服务帐户的活动将是前进的最佳方式。 【参考方案1】:列出可以访问服务帐号的成员 选择一个项目。单击您要允许成员模拟的服务帐户的电子邮件地址。单击权限选项卡。有权访问此服务帐户的成员部分列出了可以访问该服务帐户的成员。 您可以在[1]中找到模拟服务帐户的整个过程 [1]https://cloud.google.com/iam/docs/impersonating-service-accounts#:~:text=Listing%20members%20that%20can%20access%20a%20service%20account,-Use%20the%20Cloud&text=Select%20a%20project.,can%20access%20the%20service%20account.
【讨论】:
【参考方案2】:当用户使用--impersonate-service-account
参数调用gcloud
时,会在定义服务帐户的项目中生成一条日志消息:
resource.type="service_account" resource.labels.email_id="sa-name@projectid.iam.gserviceaccount.com"
protoPayload.methodName="GenerateAccessToken"
创建 GCE 实例时,会在 创建 vm 的项目中生成列出主体和模拟者的日志消息。
resource.type="gce_instance"
resource.labels.zone="us-central1-a"
protoPayload.methodName="v1.compute.instances.insert"
protoPayload.authenticationInfo.principalEmail="sa-name@projectid.iam.gserviceaccount.com"
您要查找的值在protoPayload.serviceAccountDelegationInfo
中。调用者的IP在protoPayload.requestMetadata.callerIp
。
【讨论】:
以上是关于您如何查明是谁冒充了 GCP 服务帐号?的主要内容,如果未能解决你的问题,请参考以下文章
无法访问。您可能没有权限使用网络资源。请与这台服务器的管理员联系以查明您是不是有访问权限。