关于GCP中IAM日志记录和权限分析的咨询

Inquiry Regarding IAM Logging and Permission Analysis in GCP

提问人:ss080026 提问时间:11/15/2023 更新时间:11/15/2023 访问量:10

问:

我目前正在学习 IAM(身份和访问管理),并且正在开发代码来分析每个云服务提供商 (CSP) 的用户日志,目标是分配最低必要的权限。

对于 AWS,我能够利用 CloudTrail 提取用户使用的权限列表,CloudTrail 会记录用户执行的所有事件。根据这些日志,我可以指定所需的时间范围,并提取用户在该时间段内使用的权限列表。

但是,在 GCP 中,尽管在 Cloud Audit Logs 中为所有服务启用了数据读取访问权限,但我还是遇到了一个挑战。记录涉及数据更改的事件,例如 SetIamPolicy 或 CreateRole。但是,日志中不会捕获与读取相关的操作,例如检查角色列表。因此,我在根据日志提取用户使用的权限列表时遇到了困难。

作为替代方案,我探索了 Recommender API 的安全统计信息的用法来提取用户使用的权限。但是,我似乎无法指定数据提取的时间范围,并且它似乎检索了过去 90 天内使用的所有权限。有没有办法提取过去 90 天内特定时间段内使用的权限列表?

此外,我想询问在为用户分配新角色时,开始在安全统计信息中记录新角色分配的时间。如果为用户分配了新角色,则此新角色从哪个时间点开始出现在安全统计信息中?

此外,我观察到组的安全统计信息中没有信息。是否可以从安全统计信息中提取属于特定组的用户使用的权限列表?

我很想知道默认情况下是否未在控制台日志中记录读取操作,或者我的方法是否可能存在问题。

如果事实证明并非所有用户事件都被记录下来,我将不胜感激任何关于提取用户在指定时间范围内使用的所有权限列表的替代方法的指导。


当我无法从 GCP 日志中提取用户使用的权限列表时,我编写了以下 Python 代码作为解决方法:

from google.cloud.recommender_v1 import RecommenderClient
from google.oauth2 import service_account
from google.api_core.exceptions import GoogleAPICallError
import json


with open('config/conf.json') as f:
    config_data = json.load(f)

KEY_FILE_PATH = config_data["GOOGLE_APPLICATION_CREDENTIALS2"]
PROJECT_ID = config_data["GCP_PROJECT_ID"]


def list_insights(project_id, location):
    credentials = service_account.Credentials.from_service_account_file(KEY_FILE_PATH)
    client = RecommenderClient(credentials=credentials)

    parent = f"projects/{project_id}/locations/{location}/insightTypes/google.iam.policy.Insight"

    try:
        request = client.list_insights(parent=parent)

        for response in request.pages:
            for insight in response.insights:
                print("Insight name: ", insight.name)
                print("Insight description: ", insight.description)
                print("Insight content: ")
                for key, value in insight.content.items():
                    if key == "condition":
                        print(f"    {key}:")
                        for key2, value2 in value.items():
                            print(f"        {key2}: {value2}")
                    elif key == "inferredPermissions":
                        print(f"    {key}:")
                        for item in value:
                            for key3, value3 in item.items():
                                print(f"        {key3}: {value3}")
                    elif key == "exercisedPermissions":
                        print(f"    {key}:")
                        for item in value:
                            for key4, value4 in item.items():
                                print(f"        {key4}: {value4}")
                    else:
                        print(f"    {key}: {value}")
                print("Insight last refresh time: ", insight.last_refresh_time)
                print("Insight observation period: ", insight.observation_period)
                print("Insight state info: ", insight.state_info)
                print("Insight category: ", insight.category)
                print("Insight associated recommendations: ", insight.associated_recommendations)
                print("Insight target resources: ", insight.target_resources)
                print("Insight insight subtype: ", insight.insight_subtype)
                print("Insight etag: ", insight.etag)
                print("Insight severity: ", insight.severity)
    except GoogleAPICallError as e:
        print(f"Recommender API error: {e}")


project_id = PROJECT_ID
location = "global"

list_insights(project_id, location)

虽然这允许我获取用户在过去 90 天内使用的权限列表,但我遇到了限制。具体来说,我无法提取特定时间范围的权限。此外,在为用户分配新角色时,该角色需要相当长的时间才能显示在安全统计信息中。我不确定如何提取属于组的用户使用的权限列表。我正在寻求有关在 GCP 中指定时间范围内提取用户使用的权限列表的方法的指导。

提前感谢您的帮助。

python google-cloud-platform 日志记录 权限

评论

0赞 John Hanley 11/16/2023
非常有趣的帖子,但对于 Stack Overflow 来说可能不是一个好的帖子,因为您需要新功能。我建议直接联系 Google Cloud 并发布功能请求

答: 暂无答案