service-account.jinja (70 lines of code) (raw):
{% set SUFFIX = '-account' %}
{% set BASE_NAME = properties['baseName'][:30-SUFFIX|length] + SUFFIX %}
resources:
- name: {{ BASE_NAME }}
type: iam.v1.serviceAccount
properties:
accountId: {{ BASE_NAME }}
displayName: TeamCity service account
- name: get-iam-policy-to-set-roles
action: gcp-types/cloudresourcemanager-v1:cloudresourcemanager.projects.getIamPolicy
metadata:
dependsOn:
- {{ BASE_NAME }}
runtimePolicy:
- UPDATE_ALWAYS
properties:
resource: {{ env['project'] }}
- name: set-account-roles
action: gcp-types/cloudresourcemanager-v1:cloudresourcemanager.projects.setIamPolicy
metadata:
runtimePolicy:
- CREATE
properties:
resource: {{ env['project'] }}
policy: $(ref.get-iam-policy-to-set-roles)
gcpIamPolicyPatch:
add:
- role: "roles/cloudsql.client"
members:
- serviceAccount:$(ref.{{ BASE_NAME }}.email)
- role: "roles/viewer"
members:
- serviceAccount:$(ref.{{ BASE_NAME }}.email)
- role: "roles/compute.instanceAdmin.v1"
members:
- serviceAccount:$(ref.{{ BASE_NAME }}.email)
- role: "roles/storage.objectAdmin"
members:
- serviceAccount:$(ref.{{ BASE_NAME }}.email)
- role: "roles/iam.serviceAccountTokenCreator"
members:
- serviceAccount:$(ref.{{ BASE_NAME }}.email)
- role: "roles/owner"
members:
- serviceAccount:$(ref.{{ BASE_NAME }}.email)
- name: get-iam-policy-to-delete-role
action: gcp-types/cloudresourcemanager-v1:cloudresourcemanager.projects.getIamPolicy
metadata:
dependsOn:
- {{ properties['baseName'] }}-waiter-software
runtimePolicy:
- UPDATE_ALWAYS
properties:
resource: {{ env['project'] }}
- name: delete-account-role
action: gcp-types/cloudresourcemanager-v1:cloudresourcemanager.projects.setIamPolicy
metadata:
runtimePolicy:
- CREATE
properties:
resource: {{ env['project'] }}
policy: $(ref.get-iam-policy-to-delete-role)
gcpIamPolicyPatch:
remove:
- role: "roles/owner"
members:
- serviceAccount:$(ref.{{ BASE_NAME }}.email)
outputs:
- name: email
value: $(ref.{{ BASE_NAME }}.email)