Search code examples
bashgoogle-cloud-platformgcloud

How to get GCP "iampolicy" information in .CSV format with project ID?


I am not good at programming. I am trying to generate csv report from GCP cloud account. I need information about number of projects created in account and it's owner, IAM role and member etc.

I did try with bash script and I received output in json.

CODE

#!/bin/bash
for project in  $(gcloud projects list --format="value(projectId)")
do
  echo "ProjectId:  $project"
  iampolicy=$(gcloud projects get-iam-policy "$project" --format json")
  echo "$iampolicy"
  printf '%s\n' $iampolicy | paste -sd ',' >> file.csv
done 

Output

ProjectId:  test-project1-xyz
{
  "bindings": [
    {
      "members": [
        "user:123@gmail.com"
      ],
      "role": "roles/owner"
    }
  ],
  "etag": "xyz=",
  "version": 1
}

Currently I m getting same json output data in the file.csv file.

Expected Output

File.csv

Project ID  Members-Email   Role
xyz         xyz              xyz

Can anyone help me with this? Thank you in advance for your support.


Solution

  • Perhaps:

    #!/bin/bash
    echo "ID,Name,Member,Role"
    gcloud projects list --format="csv[no-heading](projectId,name)" |\
    while IFS="," read -r ID NAME
    do
      POLICY=$(\
        gcloud projects get-iam-policy ${ID} \
        --flatten="bindings[].members[]" \
        --format="csv[no-heading](bindings.members,bindings.role)")
      # Prefix ${PROJECT} to each line in the policy
      for LINE in ${POLICY}
      do
        echo ${ID},${NAME},${LINE}
      done
    done