有没有很好的API来列出用户可以执行的GCP项目?

时间:2019-09-12 13:51:32

标签: google-cloud-platform

GCP提供了非常灵活的特权系统,该系统允许任何项目所有者将任何人的特权授予任何人。它对用户很有帮助,但对管理员却很糟糕。...

是否有良好的API可以列出用户/服务帐户对组织具有一定权限的GCP项目?

2 个答案:

答案 0 :(得分:0)

您可以使用一组gcloud命令来实现,我想出了以下脚本:

echo "PROJECT_ID,ROLES,MEMBERS" | cat >> output.csv
for i in $(gcloud projects list |  sed 1d | cut -f1 -d$' '); do
    echo "Getting IAM policies for project:" $i;
    echo "..........";
    paste -d "," <(printf %s "$(for j in $(seq 1 $(gcloud projects get-iam-policy $i | yq '.bindings | .[].role' | cut -d "\"" -f2 | wc -l)); do echo $i; done;)") <(printf %s "$(gcloud projects get-iam-policy $i | yq '.bindings | .[].role' | cut -d "\"" -f2)") <(printf %s "$(gcloud projects get-iam-policy $i | yq '.bindings | .[].members | join(",")' | cut -d"\"" -f2)") | cat >> output.csv

    echo "Done. Logs created at file" $output.csv;
    echo "--------------------------------"
done;

在运行它之前,您应该已经安装jqyq

  • pip install jq
  • pip install yq

此时,您可以运行命令(只需将其复制并粘贴到Cloud Shell中)。这将创建一个名为output.csv的文件,其中包含组织内每个项目的IAM策略。

拥有此输出文件后,您可以使用所需的用户/ SA运行以下命令:

  • cat output.csv | grep <USER/SA>

此命令的输出将具有以下结构:

<PROJECT_NAME>,<ROLE>,<USER/SA>

答案 1 :(得分:0)

您可以使用以下命令在您的组织内的IAM策略中找到所有具有user:foo @的组织/文件夹/项目:

package work.basil.example;

import com.vaadin.flow.component.dependency.CssImport;
import com.vaadin.flow.component.html.H1;
import com.vaadin.flow.component.html.H2;
import com.vaadin.flow.component.orderedlayout.VerticalLayout;
import com.vaadin.flow.component.textfield.TextField;
import com.vaadin.flow.router.Route;


/**
 * The main view contains a button and a click listener.
 */
@Route ( "" )
//@PWA(name = "Project Base for Vaadin", shortName = "Project Base")
@CssImport ( "./styles/shared-styles.css" )
@CssImport ( value = "./styles/vaadin-text-field-styles.css", themeFor = "vaadin-text-field" )
public class MainView extends VerticalLayout
{

    public MainView ( )
    {
        this.add( new H1( "Animal" ) );

        this.add( new H2( "Identity" ) );
        this.add( new TextField( "Name" ) );
        this.add( new TextField( "Species" ) );
        this.add( new TextField( "Color" ) );

        this.add( new H2( "Owner" ) );
        this.add( new TextField( "Name" ) );
        this.add( new TextField( "Phone" ) );
    }
}

您可以将范围更改为文件夹或项目。

您必须对作用域具有cloudasset.assets.searchAllIamPolicies权限。

文档:https://cloud.google.com/asset-inventory/docs/searching-iam-policies

尽管它不涵盖所有政策:https://cloud.google.com/asset-inventory/docs/supported-asset-types#searchable_asset_types