Google Cloud Platform · Arazzo Workflow

Google Cloud Platform Copy Project IAM Policy

Version 1.0.0

Read the IAM policy of a source project and apply its bindings to a target project.

1 workflow 1 source API 1 provider
View Spec View on GitHub API ManagementCloud ComputingInfrastructurePlatform-as-a-ServiceArazzoWorkflows

Provider

google-cloud-platform

Workflows

copy-project-iam-policy
Copy IAM bindings from a source project onto a target project.
Reads the source policy bindings, captures the target etag, writes the source bindings onto the target, then confirms.
4 steps inputs: sourceResource, targetResource outputs: sourceBindings, targetBindings
1
getSourcePolicy
Read the source project IAM policy to capture the bindings to copy.
2
getTargetPolicy
Read the target project IAM policy to capture its etag for safe replacement.
3
applyPolicy
Write the source bindings onto the target project, passing the target's etag for optimistic concurrency.
4
confirmTarget
Re-read the target project policy to confirm the copied bindings.

Source API Descriptions

Arazzo Workflow Specification

Raw ↑
arazzo: 1.0.1
info:
  title: Google Cloud Platform Copy Project IAM Policy
  summary: Read the IAM policy of a source project and apply its bindings to a target project.
  description: >-
    Replicates an IAM policy from one project to another. The workflow reads the
    source project's policy, reads the target project's policy to capture its
    etag for safe replacement, sets the source bindings on the target with that
    etag, and re-reads the target to confirm. Every step spells out its request
    inline so the flow can be read and executed without opening the underlying
    OpenAPI description.
  version: 1.0.0
sourceDescriptions:
- name: projectsApi
  url: ../openapi/google-cloud-platform-projects-api-openapi.yml
  type: openapi
workflows:
- workflowId: copy-project-iam-policy
  summary: Copy IAM bindings from a source project onto a target project.
  description: >-
    Reads the source policy bindings, captures the target etag, writes the
    source bindings onto the target, then confirms.
  inputs:
    type: object
    required:
    - sourceResource
    - targetResource
    properties:
      sourceResource:
        type: string
        description: The source project resource, e.g. projects/11111.
      targetResource:
        type: string
        description: The target project resource, e.g. projects/22222.
  steps:
  - stepId: getSourcePolicy
    description: >-
      Read the source project IAM policy to capture the bindings to copy.
    operationId: cloudresourcemanager.projects.getIamPolicy
    parameters:
    - name: resource
      in: path
      value: $inputs.sourceResource
    requestBody:
      contentType: application/json
      payload:
        options:
          requestedPolicyVersion: 3
    successCriteria:
    - condition: $statusCode == 200
    outputs:
      bindings: $response.body#/bindings
  - stepId: getTargetPolicy
    description: >-
      Read the target project IAM policy to capture its etag for safe
      replacement.
    operationId: cloudresourcemanager.projects.getIamPolicy
    parameters:
    - name: resource
      in: path
      value: $inputs.targetResource
    requestBody:
      contentType: application/json
      payload:
        options:
          requestedPolicyVersion: 3
    successCriteria:
    - condition: $statusCode == 200
    outputs:
      etag: $response.body#/etag
  - stepId: applyPolicy
    description: >-
      Write the source bindings onto the target project, passing the target's
      etag for optimistic concurrency.
    operationId: cloudresourcemanager.projects.setIamPolicy
    parameters:
    - name: resource
      in: path
      value: $inputs.targetResource
    requestBody:
      contentType: application/json
      payload:
        policy:
          version: 3
          etag: $steps.getTargetPolicy.outputs.etag
          bindings: $steps.getSourcePolicy.outputs.bindings
    successCriteria:
    - condition: $statusCode == 200
    outputs:
      newEtag: $response.body#/etag
  - stepId: confirmTarget
    description: >-
      Re-read the target project policy to confirm the copied bindings.
    operationId: cloudresourcemanager.projects.getIamPolicy
    parameters:
    - name: resource
      in: path
      value: $inputs.targetResource
    requestBody:
      contentType: application/json
      payload:
        options:
          requestedPolicyVersion: 3
    successCriteria:
    - condition: $statusCode == 200
    outputs:
      bindings: $response.body#/bindings
  outputs:
    sourceBindings: $steps.getSourcePolicy.outputs.bindings
    targetBindings: $steps.confirmTarget.outputs.bindings

Work with this as data

Every workflow here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for arazzo workflows

4 MCP tools reach this
  • find_arazzoBrowse and filter every workflow in the catalog.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This workflow
curl "https://apis.io/api/v1/arazzo/google-cloud-platform-copy-project-iam-policy-workflow"
All arazzo workflows
curl "https://apis.io/api/v1/arazzo?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.