| #/bin/bash |
| |
| set -e -x |
| source ../kube/config.sh |
| |
| # New service account we will create. |
| SA_NAME="skia-codesize" |
| SA_EMAIL="${SA_NAME}@${PROJECT_SUBDOMAIN}.iam.gserviceaccount.com" |
| |
| # Create service account. |
| gcloud --project=${PROJECT_ID} iam service-accounts create "${SA_NAME}" \ |
| --display-name="Service account for codesize.skia.org in skia-public" |
| |
| # Allow the new service account to impersonate the Google Cloud service account. See |
| # https://cloud.google.com/kubernetes-engine/docs/how-to/workload-identity#authenticating_to. |
| gcloud iam service-accounts add-iam-policy-binding \ |
| --role roles/iam.workloadIdentityUser \ |
| --member "serviceAccount:skia-public.svc.id.goog[default/skia-codesize]" \ |
| skia-codesize@skia-public.iam.gserviceaccount.com |
| |
| # Grant full control over the contents of the skia-codesize GCS bucket. |
| gsutil iam ch "serviceAccount:${SA_EMAIL}:objectAdmin" gs://skia-codesize |
| |
| # Necessary in order create PubSub subscriptions to the skia-codesize-files topic. GCS will notify |
| # us of changes to the gs://skia-codesize bucket via this topic. |
| # |
| # Unlike most other apps in our repo, replicas do not share a set of pre-existing subscriptions. |
| # Instead, Each replica creates its own unique subscription (using its hostname as a suffix for the |
| # subscription name) in order to prevent PubSub from load-balancing messages across replicas. This |
| # guarantees that all replicas will be notified when a new file is uploaded to the GCS bucket. The |
| # pubsub.editor role is thus needed because less permissive roles such as pubsub.subscriber or |
| # pubsub.viewer do not allow creating new subscriptions. |
| gcloud projects add-iam-policy-binding ${PROJECT_ID} \ |
| --member serviceAccount:${SA_EMAIL} --role roles/pubsub.editor |