查询示例

本页面提供示例查询,展示如何使用 AnalyzeIamPolicyAnalyzeIamPolicyLongrunning 方法进行政策分析。

准备工作

AnalyzeIamPolicy

  • 您必须为项目启用 Cloud Asset API

  • 如果您使用 API 来运行这些查询,则需要设置环境和 gcurl

  1. 设置您的环境

  2. 要设置 gcurl 别名,请完成以下步骤。

    如果您在 Compute Engine 实例上,请运行以下命令。

    alias gcurl='curl -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
    -H "Content-Type: application/json" -X POST -H "X-HTTP-Method-Override: GET"'
    

    如果您不在 Compute Engine 实例上,请运行以下命令。

    alias gcurl='curl -H "$(oauth2l header --json CREDENTIALS cloud-platform)" \
    -H "Content-Type: application/json" -X POST -H "X-HTTP-Method-Override: GET"'
    

    其中,CREDENTIALS 是您的凭据文件路径,例如 ~/credentials.json

AnalyzeIamPolicyLongrunning

  • 您必须为项目启用 Cloud Asset API

  • 如果您使用 API 来运行这些查询,则需要设置环境和 gcurl

  1. 设置您的环境

  2. 要设置 gcurl 别名,请完成以下步骤。

    如果您在 Compute Engine 实例上,请运行以下命令。

    alias gcurl='curl -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
    -H "Content-Type: application/json" -X POST'
    

    如果您不在 Compute Engine 实例上,请运行以下命令。

    alias gcurl='curl -H "$(oauth2l header --json CREDENTIALS cloud-platform)" \
    -H "Content-Type: application/json" -X POST'
    

    其中,CREDENTIALS 是您的凭据文件路径,例如 ~/credentials.json

查找具有特定资源的特定角色/权限的身份

如需查找被授予指定服务帐号的 iam.serviceAccounts.actAsiam.serviceAccounts.get 权限的身份,请运行以下命令。

gcloud

gcloud asset GCLOUD_METHOD_NAME \
    --organization="ORG_ID" \
    --full-resource-name="FULL_RESOURCE_NAME" \
    --permissions="COMMA_SEPARATED_PERMISSIONS" \
    --expand-groups \
    --output-group-edges \
    --show-response

例如:

gcloud asset analyze-iam-policy --organization="123456789" \
    --full-resource-name="//iam.googleapis.com/projects/project1/serviceAccounts/sa1@project1.iam.gserviceaccount.com" \
    --permissions="iam.serviceAccounts.actAs,iam.serviceAccounts.get" \
    --expand-groups \
    --output-group-edges \
    --show-response

REST

  1. 为请求正文创建文件 request.json,并将其内容设置为 JSON 格式的分析请求。

    {
      "analysisQuery":{
        "scope":"organizations/ORG_ID",
        "resourceSelector":{
           "fullResourceName":"FULL_RESOURCE_NAME"
        },
        "accessSelector":{
           "permissions":[
              "iam.serviceAccounts.actAs",
              "iam.serviceAccounts.get"
           ]
        },
        "options":{
           "expandGroups":EXPAND_GROUPS,
           "outputGroupEdges":OUTPUT_GROUP_EDGES,
           "outputResourceEdges":OUTPUT_RESOURCE_EDGES,
           "analyzeServiceAccountImpersonation":ANALYZE_SERVICE_ACCOUNT_IMPERSONATION
        }
      }
    }
    

    例如:

    {
      "analysisQuery":{
        "scope":"organizations/123456789",
        "resourceSelector":{
           "fullResourceName":"//iam.googleapis.com/projects/project1/serviceAccounts/sa1@project1.iam.gserviceaccount.com"
        },
        "accessSelector":{
           "permissions":[
              "iam.serviceAccounts.actAs",
              "iam.serviceAccounts.get"
           ]
          },
        "options":{
           "expandGroups":true,
           "outputGroupEdges":true,
           "outputResourceEdges":false,
           "analyzeServiceAccountImpersonation":false
        }
      }
    }
    
  2. 创建 request.json 文件后,您可以使用 gcurl 别名通过以下命令运行请求。

    gcurl -d @request.json  \
    "https://cloudasset.googleapis.com/v1/organizations/ORG_ID:REST_ANALYZE_METHOD"
    

    其中:

    • ORG_ID 是您的组织 ID,例如 1234567890
    • REST_ANALYZE_METHOD 是分析方法(analyzeIamPolicyanalyzeIamPolicyLongrunning)。

此方法会返回政策中显示的身份和通过群组成员资格授予权限的身份。如需仅返回政策中显示的身份,请停用 --expand-groups--output-group-edges 选项。

如果您想了解指定资源如何从政策附加资源继承政策,可以启用 --output-resource-edges 选项。例如,假设政策设置在文件夹 f1 上,您将看到 f1-to-project1 和 project1-to-sa1 资源边缘。

如果您要查找可能通过服务帐号模拟间接访问指定资源的身份,可以启用 --analyze-service-account-impersonation 选项。

查找具有特定资源的任意角色/权限的身份

如需查找被授予指定服务帐号的任意角色或权限的身份,请运行以下命令。

gcloud

gcloud asset GCLOUD_METHOD_NAME \
    --organization="ORG_ID" \
    --full-resource-name="FULL_RESOURCE_NAME" \
    --expand-roles

例如:

gcloud asset analyze-iam-policy --organization="123456789" \
    --full-resource-name="//iam.googleapis.com/projects/project1/serviceAccounts/sa1@project1.iam.gserviceaccount.com" \
    --expand-roles

REST

  1. 为请求正文创建文件 request.json,并将其内容设置为 JSON 格式的分析请求。

    {
      "analysisQuery":{
        "scope":"organizations/ORG_ID",
        "resourceSelector":{
           "fullResourceName":"FULL_RESOURCE_NAME"
        },
        "options":{
           "expandRoles":EXPAND_ROLES,
           "expandGroups":EXPAND_GROUPS,
           "outputGroupEdges":OUTPUT_GROUP_EDGES,
           "outputResourceEdges":OUTPUT_RESOURCE_EDGES,
           "analyzeServiceAccountImpersonation":ANALYZE_SERVICE_ACCOUNT_IMPERSONATION
        }
      }
    }
    

    例如:

    {
      "analysisQuery":{
        "scope":"organizations/123456789",
        "resourceSelector":{
           "fullResourceName":"//iam.googleapis.com/projects/project1/serviceAccounts/sa1@project1.iam.gserviceaccount.com"
        },
        "options":{
           "expandRoles":true,
           "expandGroups":false,
           "outputGroupEdges":false,
           "outputResourceEdges":false,
           "analyzeServiceAccountImpersonation":false
        }
      }
    }
    
  2. 创建 request.json 文件后,您可以使用 gcurl 别名通过以下命令运行请求。

    gcurl -d @request.json  \
    "https://cloudasset.googleapis.com/v1/organizations/ORG_ID:REST_ANALYZE_METHOD"
    

    其中:

    • ORG_ID 是您的组织 ID,例如 1234567890
    • REST_ANALYZE_METHOD 是分析方法(analyzeIamPolicyanalyzeIamPolicyLongrunning)。

此方法会返回政策中显示的角色和政策附加角色中包含的权限。如需仅显示政策中显示的角色,请停用 --expand-roles 选项。

如果您要在结果中查看通过群组成员资格获得权限的身份,可以启用 --expand-groups--output-group-edges 选项。

如果您想了解指定资源如何从政策附加资源继承政策,可以启用 --output-resource-edges 选项。例如,假设政策设置在文件夹 f1 上,您将看到 f1-to-project1 和 project1-to-sa1 资源边缘。

如果您要查找可能通过服务帐号模拟间接访问指定资源的身份,可以启用 --analyze-service-account-impersonation 选项。

查找具有某个项目下特定角色/权限的身份

要查找被授予项目下任意服务帐号的 iam.serviceAccounts.actAsiam.serviceAccounts.get 权限的身份,请运行以下命令。

gcloud

gcloud asset GCLOUD_METHOD_NAME \
    --organization="ORG_ID" \
    --full-resource-name="FULL_RESOURCE_NAME" \
    --permissions="COMMA_SEPARATED_PERMISSIONS" \
    --expand-resources

例如:

gcloud asset analyze-iam-policy --organization="123456789" \
    --full-resource-name="//cloudresourcemanager.googleapis.com/projects/project1" \
    --permissions="iam.serviceAccounts.actAs" \
    --expand-resources

REST

  1. 为请求正文创建文件 request.json,并将其内容设置为 JSON 格式的分析请求。

    {
      "analysisQuery":{
        "scope":"organizations/ORG_ID",
        "resourceSelector":{
           "fullResourceName":"FULL_RESOURCE_NAME"
        },
        "accessSelector":{
           "permissions":[
              "iam.serviceAccounts.actAs"
           ]
        },
        "options":{
           "expandResources":EXPAND_RESOURCES
        }
      }
    }
    

    例如:

    {
      "analysisQuery":{
        "scope":"organizations/123456789",
        "resourceSelector":{
           "fullResourceName":"//cloudresourcemanager.googleapis.com/projects/project1"
        },
        "accessSelector":{
           "permissions":[
              "iam.serviceAccounts.actAs"
           ]
        },
        "options":{
           "expandResources":true
        }
      }
    }
    
  2. 创建 request.json 文件后,您可以使用 gcurl 别名通过以下命令运行请求。

    gcurl -d @request.json  \
    "https://cloudasset.googleapis.com/v1/organizations/ORG_ID:REST_ANALYZE_METHOD"
    

    其中:

    • ORG_ID 是您的组织 ID,例如 1234567890
    • REST_ANALYZE_METHOD 是分析方法(analyzeIamPolicyanalyzeIamPolicyLongrunning)。

查找特定身份具有特定角色/权限的资源

如需查找指定用户拥有 iam.serviceAccounts.actAsiam.serviceAccounts.get 权限的资源,请运行以下命令。

gcloud

gcloud asset GCLOUD_METHOD_NAME \
    --organization="ORG_ID" \
    --identity="IDENTITY" \
    --permissions="COMMA_SEPARATED_PERMISSIONS"

例如:

gcloud asset analyze-iam-policy --organization="123456789" \
    --identity="user:user1@example.com" \
    --permissions="iam.serviceAccounts.actAs,iam.serviceAccounts.get"

REST

  1. 为请求正文创建文件 request.json,并将其内容设置为 JSON 格式的分析请求。

    {
      "analysisQuery":{
        "scope":"organizations/ORG_ID",
        "identitySelector":{
           "identity":"IDENTITY"
        },
        "accessSelector":{
           "permissions":[
              "iam.serviceAccounts.actAs",
              "iam.serviceAccounts.get"
           ]
        },
        "options":{
           "outputGroupEdges":OUTPUT_GROUP_EDGES,
           "expandResources":EXPAND_RESOURCES,
           "outputResourceEdges":OUTPUT_RESOURCE_EDGES,
           "analyzeServiceAccountImpersonation":ANALYZE_SERVICE_ACCOUNT_IMPERSONATION
        }
      }
    }
    

    例如:

    {
      "analysisQuery":{
        "scope":"organizations/123456789",
        "identitySelector":{
           "identity":"user:user1@example.com"
        },
        "accessSelector":{
           "permissions":[
              "iam.serviceAccounts.actAs",
              "iam.serviceAccounts.get"
           ]
        },
        "options":{
           "outputGroupEdges":false,
           "expandResources":false,
           "outputResourceEdges":false,
           "analyzeServiceAccountImpersonation":false
        }
      }
    }
    
  2. 创建 request.json 文件后,您可以使用 gcurl 别名通过以下命令运行请求。

    gcurl -d @request.json  \
    "https://cloudasset.googleapis.com/v1/organizations/ORG_ID:REST_ANALYZE_METHOD"
    

    其中:

    • ORG_ID 是您的组织 ID,例如 1234567890
    • REST_ANALYZE_METHOD 是分析方法(analyzeIamPolicyanalyzeIamPolicyLongrunning)。

如果您要查看指定身份拥有指定访问权限的继承资源,可以启用 --expand-resources--output-resource-edges 选项。

如果您想了解指定身份如何通过群组成员资格继承访问权限,可以启用 --output-group-edges 选项。例如,假设政策有成员组 g1 且 user1 是其成员,您将会看到 g1-user1 群组边缘。

如果您要查找指定身份可能通过服务帐号模拟间接访问的资源,可以启用 --analyze-service-account-impersonation 选项。

查找指定身份具有任意角色/权限的资源

如需查找指定用户拥有任意角色/权限的资源,请运行以下命令。

gcloud

gcloud asset GCLOUD_METHOD_NAME \
    --organization="ORG_ID" \
    --identity="IDENTITY" \
    --expand-roles \
    --expand-resources \
    --output-resource-edges \
    --show-response

例如:

gcloud asset analyze-iam-policy --organization="123456789" \
    --identity="user:user1@example.com" \
    --expand-roles \
    --expand-resources \
    --output-resource-edges \
    --show-response

REST

  1. 为请求正文创建文件 request.json,并将其内容设置为 JSON 格式的分析请求。

    {
      "analysisQuery":{
        "scope":"organizations/123456789",
        "identitySelector":{
           "identity":"user:user1@example.com"
        },
        "options":{
           "expandRoles":EXPAND_ROLES,
           "outputGroupEdges":OUTPUT_GROUP_EDGES,
           "expandResources":EXPAND_RESOURCES,
           "outputResourceEdges":OUTPUT_RESOURCE_EDGES,
           "analyzeServiceAccountImpersonation":ANALYZE_SERVICE_ACCOUNT_IMPERSONATION
        }
      }
    }
    

    例如:

    {
      "analysisQuery":{
        "scope":"organizations/123456789",
        "identitySelector":{
           "identity":"user:user1@example.com"
        },
        "options":{
           "expandRoles":true,
           "outputGroupEdges":false,
           "expandResources":true,
           "outputResourceEdges":true,
           "analyzeServiceAccountImpersonation":false
        }
      }
    }
    
  2. 创建 request.json 文件后,您可以使用 gcurl 别名通过以下命令运行请求。

    gcurl -d @request.json  \
    "https://cloudasset.googleapis.com/v1/organizations/ORG_ID:REST_ANALYZE_METHOD"
    

    其中:

    • ORG_ID 是您的组织 ID,例如 1234567890
    • REST_ANALYZE_METHOD 是分析方法(analyzeIamPolicyanalyzeIamPolicyLongrunning)。

此方法会返回政策中显示的角色和政策附加角色中包含的权限。如需仅显示政策中显示的角色,请停用 --expand-roles 选项。

此命令会返回政策中显示的资源以及指定身份拥有任意访问权限的继承资源。如需仅显示政策中显示的资源,请停用 --expand-resources--output-resource-edges 选项。

如果您想了解指定身份如何通过群组成员资格继承访问权限,可以启用 --output-group-edges 选项。例如,假设政策有成员组 g1 且 user1 是其成员,您将会看到 g1-user1 群组边缘。

如果您要查找指定身份可能通过服务帐号模拟间接访问的资源,可以启用 --analyze-service-account-impersonation 选项。

查找特定身份具有的指定资源的角色/权限

如需查找指定用户被授予的指定服务帐号的角色或权限,请运行以下命令。

gcloud

gcloud asset GCLOUD_METHOD_NAME \
    --organization="ORG_ID" \
    --full-resource-name="FULL_RESOURCE_NAME" \
    --identity="IDENTITY" \
    --expand-roles

例如:

gcloud asset analyze-iam-policy --organization="123456789" \
    --full-resource-name="//iam.googleapis.com/projects/project1/serviceAccounts/sa1@project1.iam.gserviceaccount.com" \
    --identity="user:user1@example.com" \
    --expand-roles

REST

  1. 为请求正文创建文件 request.json,并将其内容设置为 JSON 格式的分析请求。

    {
      "analysisQuery":{
        "scope":"organizations/123456789",
        "resourceSelector":{
           "fullResourceName":"FULL_RESOURCE_NAME"
        },
        "identitySelector":{
           "identity":"IDENTITY"
        },
        "options":{
           "expandRoles":EXPAND_ROLES,
           "outputGroupEdges":OUTPUT_GROUP_EDGES,
           "outputResourceEdges":OUTPUT_RESOURCE_EDGES
        }
      }
    }
    

    例如:

    {
      "analysisQuery":{
        "scope":"organizations/123456789",
        "resourceSelector":{
           "fullResourceName":"//iam.googleapis.com/projects/project1/serviceAccounts/sa1@project1.iam.gserviceaccount.com"
        },
        "identitySelector":{
           "identity":"user:user1@example.com"
        },
        "options":{
           "expandRoles":true,
           "outputGroupEdges":false,
           "outputResourceEdges":false
        }
      }
    }
    
  2. 创建 request.json 文件后,您可以使用 gcurl 别名通过以下命令运行请求。

    gcurl -d @request.json  \
    "https://cloudasset.googleapis.com/v1/organizations/ORG_ID:REST_ANALYZE_METHOD"
    

    其中:

    • ORG_ID 是您的组织 ID,例如 1234567890
    • REST_ANALYZE_METHOD 是分析方法(analyzeIamPolicyanalyzeIamPolicyLongrunning)。

此命令会返回政策中显示的角色和政策附加角色中包含的权限。如需仅显示政策中显示的角色,请停用 --expand-roles 选项。

如果您想了解指定身份如何通过群组成员资格继承访问权限,可以启用 --output-group-edges 选项。例如,假设政策有成员组 g1 且 user1 是其成员,您将会看到 g1-user1 群组边缘。

如果您想了解指定资源如何从政策附加资源继承政策,可以启用 --output-resource-edges 选项。例如,假设政策设置在文件夹 f1 上,您将看到 f1-to-project1 和 project1-to-sa1 资源边缘。

查找具有特定角色/权限的身份和资源

如需查找被授予 iam.serviceAccounts.actAs 权限的身份和资源,请运行以下命令。

gcloud

gcloud asset GCLOUD_METHOD_NAME \
    --organization="ORG_ID" \
    --permissions="COMMA_SEPARATED_PERMISSIONS"

例如,

gcloud asset analyze-iam-policy --organization="123456789" \
    --permissions="iam.serviceAccounts.actAs"

REST

  1. 为请求正文创建文件 request.json,并将其内容设置为 JSON 格式的分析请求。

    {
      "analysisQuery":{
        "scope":"organizations/123456789",
        "resourceSelector":{
           "fullResourceName":"FULL_RESOURCE_NAME"
        },
        "identitySelector":{
           "identity":"IDENTITY"
        },
        "options":{
           "expandGroups":EXPAND_GROUPS,
           "outputGroupEdges":OUTPUT_GROUP_EDGES,
           "expandResources":EXPAND_RESOURCES,
           "outputResourceEdges":OUTPUT_RESOURCE_EDGES
        }
      }
    }
    

    例如:

    {
      "analysisQuery":{
        "scope":"organizations/123456789",
        "accessSelector":{
           "permissions":[
              "iam.serviceAccounts.actAs"
           ]
        },
        "options":{
           "expandGroups":false,
           "outputGroupEdges":false,
           "expandResources":false,
           "outputResourceEdges":false
        }
      }
    }
    
  2. 创建 request.json 文件后,您可以使用 gcurl 别名通过以下命令运行请求。

    gcurl -d @request.json  \
    "https://cloudasset.googleapis.com/v1/organizations/ORG_ID:REST_ANALYZE_METHOD"
    

    其中:

    • ORG_ID 是您的组织 ID,例如 1234567890
    • REST_ANALYZE_METHOD 是分析方法(analyzeIamPolicyanalyzeIamPolicyLongrunning)。

如果您要在结果中查看通过群组成员资格获得权限的身份,可以启用 --expand-groups--output-group-edges 选项。

如果您要查看指定身份拥有任意访问权限的继承资源,可以启用 --expand-resources--output-resource-edges 选项。