Get a demo — 30 minutes →
← Back to blog
Anomity robot illustrating Anomity Integrates with Google Cloud Vertex AI
Company

Anomity Integrates with Google Cloud Vertex AI

TL;DR
  • Anomity now connects to Google Cloud Vertex AI. It inventories Vertex AI endpoints and the models deployed on them, tuned models, Agent Engine agents, RAG Engine knowledge bases and the data sources they draw on, Vector Search indexes, and Gemini Enterprise apps and agents, each tagged with its project and location.
  • It asks the same governance questions Anomity already asks of Amazon Bedrock and Azure AI Foundry, through one policy: is prompt and response logging on, is there a Model Armor guardrail and is it enforced, can an API key reach Vertex without an IAM identity, and does a knowledge base draw on a store your policy does not permit.
  • Setup is keyless. You create a workload identity pool in your own project that trusts exactly one identity, Anomity's, and bind Google's predefined read-only roles to it. Anomity holds no Google credential of yours, and revoking access is deleting one pool.
  • Three findings were left out on purpose because they would be untrue: metadata-only audit logging is not reported as 'no prompt logging', Model Armor is not reported missing where Google does not offer it, and there is no per-agent guardrail check because Agent Engine exposes no such field.
  • A project Anomity could not read is reported as a discovery gap, never as an empty, finding-free project.
  • Vertex AI is the third cloud AI platform in Anomity's cloud discovery, next to Bedrock and Azure AI Foundry, alongside the Endpoint Sensor and Browser Sensor on every managed device.

Anomity now integrates with Google Cloud Vertex AI. Connect a Google Cloud project and Anomity inventories the AI your company runs there: Vertex AI endpoints and the models deployed on them, tuned models, Agent Engine agents, RAG Engine knowledge bases and the data sources they draw on, Vector Search indexes, and Gemini Enterprise apps and agents. Each one is evaluated against the same cloud AI posture policy that already covers Amazon Bedrock and Azure AI Foundry. The integration is available today from Settings, under Integrations, in the Anomity console, and it holds no Google credential of yours.

This post covers what the connector reads, what it flags, how the keyless setup works, and three findings we chose not to raise because they would have told you something untrue.

Why Vertex AI, and why now

None of the AI running in a Google Cloud project ever touches a managed laptop. Anomity's Endpoint Sensor sees the developer's CLI and the API key sitting in a dotfile, but it cannot see the endpoint that serves the model, the Agent Engine agent running server-side, or the knowledge base someone built over an HR folder. Until now that left the Google Cloud section of the inventory empty, and an empty section reads like a clean one.

Vertex AI is the third cloud AI platform in Anomity's cloud discovery, after Amazon Bedrock and Azure AI Foundry. A company that runs models in more than one of them should not have to write 'require prompt logging' three times. So Vertex AI does not get a policy of its own: it maps onto the same governance questions, answered by one policy, with Google's own word for each control.

It is also a different question from the one our Google Workspace connector answers. Workspace discovery asks which AI apps employees granted OAuth access to their mail and Drive. This connector asks what AI the company itself is running in its own cloud projects, and whether it is governed.

What the connector reads

Vertex AI is regional and has no 'list my locations' call, so the connector sweeps your projects across the locations you pick when you connect. You can also give it an explicit list of projects, which scopes Anomity to exactly the projects you want read.

From Google CloudWhat Anomity records
ProjectsOne row per project, carrying project-wide posture: whether the Vertex AI API is enabled, whether Cloud Audit Logs record Vertex AI data access, how many API keys can call Vertex AI, and which Model Armor templates and floor setting apply.
EndpointsOne row per endpoint, with the models it serves, whether request-response logging is on (and at what sample rate), whether it is attached to a VPC network or served on the public address, and whether it sits in the global location.
Tuned modelsOne row per model, with the base model it was tuned from and its version.
Agent Engine agentsOne row per agent. An Agent Engine agent runs server-side in your project and can call whatever tools it was built with, which is why it is inventoried separately from the endpoints.
RAG Engine corporaOne row per knowledge base, with the kinds of source its files come from: Cloud Storage, Google Drive, SharePoint, Slack, Jira or direct upload. What a corpus draws on is the governance question, not the corpus itself.
Vector Search indexesOne row per index, since an index holds the embedded contents of whatever was loaded into it.
Gemini EnterpriseApps and the agents inside them. Google serves this from a preview API, so the read is tolerant: if it changes shape, it costs one fact, never the sweep.

What it flags

Findings come from Anomity's cloud AI posture policy type, with a template for Google Vertex AI. Each check can be switched on or off per policy, and each finding names the project and location it belongs to.

  • Prompt and response logging off. An endpoint with request-response logging disabled has no record of what was sent to the model or what came back.
  • No guardrail. No Model Armor template is defined for the project, so nothing filters prompts or responses.
  • Guardrail not enforced. Templates exist, but no floor setting enforces one project-wide, so applying it is left to whoever writes the calling code.
  • Requests can leave the region. An endpoint in the global location can be served from another region, so inference data may leave the one you chose.
  • API key access. An API key can call Vertex AI without an IAM identity, which puts the caller outside every IAM condition, VPC Service Controls perimeter and organization policy that governs identity-based access. On by default.
  • Public endpoint. An endpoint with no VPC network attached is served on the public address. Off by default, because many legitimate services are public by design. It is a network attachment check, not a VPC Service Controls perimeter reading.
  • Region not allowed and data source not allowed. Optional lists: flag resources outside your approved regions, or knowledge bases that draw on a store your policy does not permit as a model corpus, such as SharePoint or Jira.
  • Discovery gap. A project Anomity should have been able to read but could not.

The API key check is new with this connector. Azure has an equivalent finding, but its wording names Entra and Conditional Access, two products a Google Cloud customer may not run, so Vertex AI gets a sentence of its own. If you need a refresher on why a model API key is worth this attention, see our write-up on LLMjacking and stolen-key cost abuse.

Three things it deliberately does not claim

Each of these would have been an easy finding to ship, and each would have been a finding the customer could not act on.

  1. Audit logs are not prompt logs. Vertex AI request-response logging records the actual prompt and response. Cloud Audit Logs Data Access records only metadata: who called which model, and when. Only the first missing raises the logging finding, whose sentence says no prompt is recorded anywhere. The audit log state is a note on the project row, so it is still visible. We wrote about why those two records answer different questions in our guide to AI agent audit trails.
  2. Model Armor is regional. Inline Model Armor integration with Vertex AI is offered only in some locations; when the connector shipped, those were us-central1, us-east4, us-west1 and europe-west4. Outside them, guardrail posture is reported as not applicable instead of 'no guardrail', because reporting an unavailable control as a disabled one is a finding with no remedy. The supported locations are marked in the picker.
  3. No per-agent guardrail check. A Bedrock agent carries its own guardrail setting, so Anomity can say a specific Bedrock agent runs unguarded. Agent Engine exposes no equivalent field, and inferring one from the project setting would be a claim we cannot evidence, so the check is simply absent for Google Cloud.

The same rule applies to permissions. If the Model Armor floor setting cannot be read, usually because the floor settings viewer role was not granted, the project says 'not checked' and names the missing role. It never reads as 'no floor setting enforced' on a project that may well have one.

How it authenticates: no key, anywhere

We could have asked for a service account JSON key. We did not, for a simple reason: Anomity's own cloud AI posture policy flags long-lived static credentials, and asking a customer for exactly the artifact we flag would not survive their security review. The Bedrock and Azure connectors are secret-less too, and Vertex AI should not be the exception.

  1. In Anomity, add a Google Cloud connector. Enter your project number, pick the locations to scan, and optionally list the projects Anomity may read.
  2. Anomity generates the gcloud commands with every identifier already filled in, built from the same list of roles the connector card shows you. An Open Cloud Shell button sits next to them, so there is nothing to install on your own machine.
  3. Run them. They create a workload identity pool and provider in your project that trust exactly one identity, Anomity's, and bind Google's predefined read-only roles to it.
  4. Test, then sync. At sync time Anomity exchanges its own cloud identity for a short-lived Google token. Nothing of yours is stored.

Two details make this safe for a multi-tenant service. The pool and provider IDs are minted by Anomity, never chosen by the caller, because every customer's pool trusts the same Anomity identity and a caller-chosen ID would let one tenant point a connector at another's project. And the provider carries an attribute condition pinned to Anomity's own cloud account, so a pool ID on its own is useless to anyone else.

Revoking access is deleting the pool in your own project. Note that deleting the connector in Anomity does not reach into your project to remove the pool for you; the confirmation dialog says so, and names what is left behind.

How Anomity and Vertex AI fit together

Google owns the controls: IAM decides who may call a model, Model Armor filters what goes in and out, request-response logging keeps the record, and VPC networking decides where traffic flows. Anomity does not replace any of them. It reads whether they are switched on, across every project and location you connect, and puts the answer next to Bedrock, Azure AI Foundry, Cloudflare and the AI vendor organizations you connect, such as the OpenAI Platform and the Anthropic Console. A knowledge base that draws on SharePoint is the same question in every cloud, and our guide to auditing the data sources AI agents access explains why it is the one to ask first.

Cloud discovery is one of three collectors. The Endpoint Sensor inventories agents, MCPs, extensions, plugins, skills, secrets, hooks, CLIs and local LLM runtimes on each managed device, the Browser Sensor covers AI web services and the accounts used in them, and on agents that expose a hook Anomity decides allow, deny or log before a tool call runs. Findings from Vertex AI route like every other Anomity finding, to the SIEM, Slack or a Jira ticket. Anomity collects metadata only, redacts secret values on the endpoint, and is SOC 2 Type II attested. To see it against your own Google Cloud projects, book a 30-minute demo.

Frequently asked questions

What does the Anomity Vertex AI integration do?

It connects Anomity's cloud discovery to one or more Google Cloud projects and inventories the AI running there: Vertex AI endpoints and their deployed models, tuned models, Agent Engine agents, RAG Engine corpora and the data sources behind them, Vector Search indexes, and Gemini Enterprise apps and agents. It then evaluates each resource against Anomity's cloud AI posture policy, the same policy that covers Amazon Bedrock and Azure AI Foundry, and raises findings in the Anomity console.

What credentials does Anomity need from Google Cloud?

None that you hand over. You create a workload identity pool and provider in your own project that trust Anomity's cloud identity, and bind Google's predefined read-only roles to it. At sync time Anomity exchanges its own identity for a short-lived Google token. There is no service account key to paste and nothing of yours is stored. Anomity generates the gcloud commands for you with every identifier filled in, and the pool and provider IDs are minted by Anomity rather than chosen by the caller, so one tenant cannot point a connector at another tenant's project.

Which IAM roles does the connector ask for?

Only Google predefined read-only roles: Vertex AI Viewer, Model Armor Viewer, Model Armor Floor Settings Viewer, Service Usage Viewer, API Keys Viewer, Discovery Engine Viewer, Browser (to list and read projects) and Security Reviewer (to read the project IAM policy, which is where Cloud Audit Log configuration lives). None of them can change a resource. The full list is shown on the connector card before you run anything.

Why does Anomity not flag missing Cloud Audit Logs as 'no prompt logging'?

Because on Google Cloud they are two different things. Vertex AI request-response logging records the actual prompts and responses, per endpoint. Cloud Audit Logs Data Access records only metadata about who called which model and when. Only the first missing means there is no record of what was sent, so only the first raises the logging finding. The audit log state is shown as a note on the project, so you still see it.

Why do some locations show no guardrail finding?

Model Armor can only be attached to Vertex AI inline in a few locations. When the connector shipped those were us-central1, us-east4, us-west1 and europe-west4. Outside them the control does not exist to enable, so Anomity reports guardrail posture as not applicable rather than raising a finding you have no way to fix. Those locations are marked in the location picker.

Does the integration change anything in Google Cloud?

No. Every role is read-only and the connector only reads. Findings are raised in Anomity's own console and routed wherever your other findings go: the SIEM, Slack or Jira.

What happens if Anomity cannot read a project?

It says so. Each read is individually non-fatal, so one unreadable fact never costs the whole sweep, but a project where every read failed is reported as a discovery gap naming the project. 'No AI in this project' and 'we could not read this project' are different statements, and a clean-looking row would blur them.

Does Anomity replace Google Cloud's own security controls?

No. IAM, Model Armor, request-response logging and VPC networking are Google's controls, and they stay where they are. Anomity reads whether they are switched on, puts that next to Bedrock, Azure AI Foundry and the AI vendor organizations you connect, and adds what no cloud console can see: the agents, MCP servers, extensions, skills and secrets on each managed device, with allow, deny or log enforced at the agent hook before a tool call runs.

Ask AI about Anomity
ChatGPT Claude Perplexity Google AI Grok