本页面提供示例查询,展示如何使用 AnalyzeIamPolicy
和 AnalyzeIamPolicyLongrunning
方法进行政策分析。
准备工作
AnalyzeIamPolicy
您必须为项目启用 Cloud Asset API。
如果您使用 API 来运行这些查询,则需要设置环境和
gcurl
。
要设置
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
。
要设置
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.actAs
或 iam.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
为请求正文创建文件
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 } } }
创建
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 是分析方法(
analyzeIamPolicy
或analyzeIamPolicyLongrunning
)。
- ORG_ID 是您的组织 ID,例如
此方法会返回政策中显示的身份和通过群组成员资格授予权限的身份。如需仅返回政策中显示的身份,请停用 --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
为请求正文创建文件
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 } } }
创建
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 是分析方法(
analyzeIamPolicy
或analyzeIamPolicyLongrunning
)。
- ORG_ID 是您的组织 ID,例如
此方法会返回政策中显示的角色和政策附加角色中包含的权限。如需仅显示政策中显示的角色,请停用 --expand-roles
选项。
如果您要在结果中查看通过群组成员资格获得权限的身份,可以启用 --expand-groups
和 --output-group-edges
选项。
如果您想了解指定资源如何从政策附加资源继承政策,可以启用 --output-resource-edges
选项。例如,假设政策设置在文件夹 f1 上,您将看到 f1-to-project1 和 project1-to-sa1 资源边缘。
如果您要查找可能通过服务帐号模拟间接访问指定资源的身份,可以启用 --analyze-service-account-impersonation
选项。
查找具有某个项目下特定角色/权限的身份
要查找被授予项目下任意服务帐号的 iam.serviceAccounts.actAs
或 iam.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
为请求正文创建文件
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 } } }
创建
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 是分析方法(
analyzeIamPolicy
或analyzeIamPolicyLongrunning
)。
- ORG_ID 是您的组织 ID,例如
查找特定身份具有特定角色/权限的资源
如需查找指定用户拥有 iam.serviceAccounts.actAs
或 iam.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
为请求正文创建文件
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 } } }
创建
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 是分析方法(
analyzeIamPolicy
或analyzeIamPolicyLongrunning
)。
- ORG_ID 是您的组织 ID,例如
如果您要查看指定身份拥有指定访问权限的继承资源,可以启用 --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
为请求正文创建文件
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 } } }
创建
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 是分析方法(
analyzeIamPolicy
或analyzeIamPolicyLongrunning
)。
- ORG_ID 是您的组织 ID,例如
此方法会返回政策中显示的角色和政策附加角色中包含的权限。如需仅显示政策中显示的角色,请停用 --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
为请求正文创建文件
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 } } }
创建
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 是分析方法(
analyzeIamPolicy
或analyzeIamPolicyLongrunning
)。
- ORG_ID 是您的组织 ID,例如
此命令会返回政策中显示的角色和政策附加角色中包含的权限。如需仅显示政策中显示的角色,请停用 --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
为请求正文创建文件
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 } } }
创建
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 是分析方法(
analyzeIamPolicy
或analyzeIamPolicyLongrunning
)。
- ORG_ID 是您的组织 ID,例如
如果您要在结果中查看通过群组成员资格获得权限的身份,可以启用 --expand-groups
和 --output-group-edges
选项。
如果您要查看指定身份拥有任意访问权限的继承资源,可以启用 --expand-resources
和 --output-resource-edges
选项。