Generated banner for Google Cloud Scc Remediation
Generated logo for Google Cloud Scc Remediation

Google Cloud Scc Remediation

GoogleOfficialPublished by Google

  • Skill
  • Workflow
  • Security
  • Apache-2.0
  • No issues found

From the author

Remediates Google Cloud Security Command Center findings, including IAM permission fixes, cloud resource misconfigurations, vulnerabilities, and Toxic Combinations. Use when asked to fix, remediate, or mitigate a Security Command Center finding or address attack paths. Don't use for general IAM policy querying without a Security Command Center finding. For runtime threat detections, this skill provides containment and investigation guidance rather than automated configuration fixes.
— the description by Google

AutoGineer summary

Written by AutoGineer from the skill’s own files, not by the author

This skill provides a structured, safety-conscious workflow for remediating security findings identified by Google Cloud Security Command Center. It covers IAM misconfigurations, resource vulnerabilities, and complex attack paths. The skill enforces a strict 'human-in-the-loop' policy, requiring users to review and approve a detailed remediation plan—including verification and rollback steps—before any infrastructure changes are applied. It integrates with specific playbooks to ensure least-privilege principles are followed and provides guidance for runtime threats where automated fixes are not applicable.

What it does

  • Analyzes Security Command Center findings to identify necessary remediation steps.
  • Routes findings to specific playbooks for IAM, misconfiguration, or vulnerability fixes.
  • Generates structured remediation plans including verification and rollback commands.
  • Enforces a mandatory consent gate requiring explicit user approval before any mutation.
  • Provides containment and investigation guidance for runtime threat detections.
  • Ensures all executed commands are properly attributed for telemetry.

When to use it

  • When you need to fix, remediate, or mitigate a specific Security Command Center finding.
  • When addressing identified attack paths or toxic combinations in Google Cloud.
  • When you need to resolve IAM permission issues or resource misconfigurations.
  • When investigating runtime threat alerts that require manual containment steps.

Advantages

  • Prevents accidental outages by requiring explicit approval for all infrastructure changes.
  • Promotes least-privilege security by preferring granular roles over basic ones.
  • Ensures operational safety by requiring verification and rollback plans for every fix.
  • Provides a consistent, repeatable process for handling diverse security findings.
  • Respects existing infrastructure-as-code setups by checking for managed labels.

Usage examples

“Fix the Security Command Center finding regarding an overly permissive IAM role.”
The agent queries the finding details, identifies the appropriate IAM playbook, and presents a plan to replace the broad role with a least-privilege alternative, asking for approval.
“Remediate the public bucket access finding.”
The agent verifies if the public access is intentional, and if not, proposes a command to restrict the bucket's ACLs along with a verification step.

Install

  1. Download the skill as a ZIP:

    https://mp-staging.autogineer.com/agent-skills/google/google-cloud-scc-remediation/download
  2. Unzip it into the cross-client skills folder of your project:

    mkdir -p .agents/skills && unzip google-cloud-scc-remediation.zip -d .agents/skills

Documentation by Google

Google Cloud Security Command Center Remediation

Usage Attribution

MUST READ: Before executing any gcloud, REST API, or MCP command, you MUST read and follow the instructions in Usage Attribution.

Overview

A unified remediation skill for Google Cloud Security Command Center findings. It handles both single-domain findings and multi-domain Toxic Combinations.

Security Command Center remediations modify infrastructure, access policies, or workload deployments.

  • Mandatory Consent Gate: NEVER execute mutating gcloud, terraform, or API commands without first presenting a structured remediation plan and the exact command/config diff to the user. STOP after presenting the plan and ALWAYS ask: "Do you approve executing this remediation plan?" before execution. Automatic mutation of security policies or resource configurations can cause unintended outages, lockouts, or compliance violations.

  • Confirm the Target Project: Before executing, confirm that the active gcloud account and project match the project of the finding's resource. Every mutating command MUST specify the target explicitly, with --project or a full resource path, rather than relying on the default gcloud project.

  • Verification & Rollback Required: Every proposed remediation plan MUST explicitly include, for each mutating step:

    • the mutating remediation command(s),

    • the verification check command(s) (gcloud ... describe or list), and

    • the rollback command(s) that undo the change, or an explicit statement that the step cannot be undone (for example, service account key deletion).

    Use the commands from the loaded playbook where they exist. If the playbook lacks a verification or rollback command for a step, derive the command and label it as not sourced from a playbook.

  • Dependency & Impact Checks: Every remediation plan MUST state what could break as a result of each change and ask the user to confirm nothing depends on it. For example:

    • IAM role changes or revocations: you MUST explicitly advise the user to verify cross-project dependencies and CI/CD pipeline workflows that rely on the existing permissions before revoking a project-level role binding.

    • Firewall rule changes: other traffic the same rule allows (such as web traffic on ports 80 or 443).

    • External IP removal: inbound access and outbound internet access for the VM.

    • Public Access Prevention on a bucket: sites or users that legitimately read it publicly.

  • CRITICAL WORKFLOW RULE: Do NOT execute any mutating commands in the same turn that you present the remediation plan. You MUST end your turn immediately after asking for approval and wait for the user's next message.

    • If there is no interactive user (for example, a scheduled or pipeline run), stop at the plan and never execute.

    • If the user approves only part of the plan, or the plan changes after approval, present the updated plan and ask for approval again before executing.

  • Narrowly Scoped Changes: Always propose the narrowest possible fix that resolves the finding. When more than one fix would work, prefer reversible changes over irreversible ones (for example, disable a key before deleting it), resource-level changes over project, folder, or organization-level changes, and changes that affect only the finding's resource over changes that affect other resources. Do not bundle fixes for unrelated issues noticed along the way; mention them to the user separately.

2. Intent Router & Progressive Disclosure

Do not load all reference playbooks into memory at once. Analyze the Security Command Center finding's category, findingClass, or attack path, then read ONLY the relevant reference document(s).

Match on the finding's category first, and fall back to findingClass only when no category matches. Routing on findingClass alone misroutes IAM findings: Security Health Analytics IAM findings are MISCONFIGURATION class, and IAM recommender findings are Vulnerability class, so neither would ever reach the IAM playbook.

Match OnValuesTarget Reference Playbook
categoryPRIMITIVE_ROLES_USED,references/remediation_iam.md
: (Security Health : OVER_PRIVILEGED_SERVICE_ACCOUNT_USER, : :
: Analytics) : ADMIN_SERVICE_ACCOUNT, : :
: : SERVICE_ACCOUNT_ROLE_SEPARATION, : :
: : KMS_ROLE_SEPARATION, : :
: : USER_MANAGED_SERVICE_ACCOUNT_KEY, : :
: : SERVICE_ACCOUNT_KEY_NOT_ROTATED : :
categoryIAM_ROLE_HAS_EXCESSIVE_PERMISSIONS,references/remediation_iam.md
: (IAM recommender) : UNUSED_IAM_ROLE, : :
: : SERVICE_AGENT_GRANTED_BASIC_ROLE, : :
: : SERVICE_AGENT_ROLE_REPLACED_WITH_BASIC_ROLE : :
categoryPUBLIC_BUCKET_ACL, PUBLIC_IP_ADDRESS,references/remediation_misconfig.md
: (Security Health : OPEN_FIREWALL, OPEN_SSH_PORT, : :
: Analytics) : OPEN_RDP_PORT, KMS_KEY_NOT_ROTATED : :
categoryOS_VULNERABILITY, SOFTWARE_VULNERABILITY,references/remediation_vuln.md
: : GKE_RUNTIME_OS_VULNERABILITY (CVEs, OS : :
: : patch, container base image upgrade, : :
: : vulnerable package, GKE node pool upgrade). : :
: : Note: Web Security Scanner (WSS) findings : :
: : fall through to no match below. : :
findingClassTOXIC_COMBINATION — attack pathSequential Load: Identify each exposed facet in the attack path and load
: : exposure, multi-domain attack vector : the matching reference playbooks sequentially. :
no matchAny other category or finding classSee Findings Without Dedicated Playbooks below. Do not force a finding
: : : into a playbook that does not cover it. :
Findings Without Dedicated Playbooks & Runtime Threat Detections

When presented with Security Command Center findings that do not have automated configuration remediation playbooks—such as runtime threat detections (e.g., Cloud Run Threat Detection, Agent Platform Threat Detection, Event Threat Detection, Container Threat Detection):

  1. Do NOT execute automated mutation commands: Runtime threat detections represent active alerts or behavioral anomalies rather than static resource misconfigurations.

  2. Provide Documentation & Containment Guidance:

    • Refer the user to the relevant Security Command Center documentation (e.g., Cloud Run Threat Detection, Agent Platform Threat Detection).

    • Recommend manual investigation steps: analyzing audit logs in Cloud Logging, identifying compromised service accounts or API keys, and isolating affected workloads.

    • Advise the user on containment options (e.g., revoking active credentials, blocking malicious IPs at Cloud Armor/firewall).

3. Standard Remediation Workflow

  1. Inspect Finding Details & Intentionality:

    • If the finding's details are not already in the conversation, retrieve them using the google-cloud-scc-query skill. Verify the finding name, affected resource (resourceName), category, and attack exposure score.

    • Before planning a fix, ask the user whether the flagged configuration is intentional (for example, a bucket serving a public website, or a VM that must accept public traffic). If it is, do not propose a remediation. Suggest muting the finding with a documented justification instead; muting changes the finding's state, so it also requires the user's approval.

  2. Route & Load Reference: Read the matching reference playbook(s) from the routing table above.

  3. Formulate Least-Privilege Remediation: Before drafting, check whether the resource is managed by infrastructure as code (ask the user, and check for signals such as the goog-terraform-provisioned label). If it is, draft the change to the Terraform configuration rather than a gcloud command. Otherwise, draft the exact CLI (gcloud) or IAM binding change needed to close the exposure without disrupting business workloads.

  4. Present Plan & Seek Consent: Show the user the plan required by the Safety & Consent Gate: for each step, the remediation command, the verification command, the rollback command, and what could break. STOP execution here and ALWAYS ask the explicit question: "Do you approve executing this remediation plan?"

  5. Execute on Approval: ONLY after receiving explicit user confirmation, execute the remediation commands and run the verification commands to confirm the resource is fixed. If a command fails, stop and report the error; do not try a different command without presenting it and getting approval again. Tell the user that the finding's state in Security Command Center updates on the detector's next scan, which may take some time, and do not manually mark the finding as resolved.

Files

references/remediation_misconfig.md

Infrastructure Misconfiguration Remediation Playbook (remediation_misconfig.md)

Use this playbook when remediating Security Command Center findings for publicly accessible Cloud Storage buckets, compute instances exposed to the public internet, or KMS keys without a rotation schedule. This covers the Security Health Analytics categories PUBLIC_BUCKET_ACL, PUBLIC_IP_ADDRESS, OPEN_FIREWALL, OPEN_SSH_PORT, OPEN_RDP_PORT, and KMS_KEY_NOT_ROTATED.

MISCONFIGURATION is a broad finding class spanning many more detectors than these four. If a misconfiguration finding is not one of the categories above, this playbook does not cover it: fall back to the skill's Findings Without Dedicated Playbooks guidance rather than forcing the finding into one of the patterns below.

Usage and consent: This playbook is a reference for the google-cloud-scc-remediation skill and inherits that skill's consent gate, even if you reached this file directly. Every mutating command below MUST be presented to the user as part of a remediation plan, together with its verification command, and MUST NOT be executed until the user answers "Do you approve executing this remediation plan?". Never execute a mutating command in the same turn you propose it.

Table of Contents

  • 1. Public Cloud Storage Buckets (PUBLIC_BUCKET_ACL)

  • 2. Public Compute Instances & Firewall Exposures (PUBLIC_IP_ADDRESS, OPEN_FIREWALL, OPEN_SSH_PORT, OPEN_RDP_PORT)

  • 3. KMS Key Rotation Misconfigurations (KMS_KEY_NOT_ROTATED)

  • 4. Verification Check

1. Public Cloud Storage Buckets (PUBLIC_BUCKET_ACL)

When a Security Command Center finding reports that a Cloud Storage bucket is publicly accessible via allUsers or allAuthenticatedUsers:

A. Check Public Access Prevention Status
gcloud storage buckets describe gs://{BUCKET_NAME} \
    --format="get(public_access_prevention)"

This returns enforced or inherited. Note that gcloud storage reports this as a top-level snake_case field; the JSON API spelling (iamConfiguration.publicAccessPrevention) does not exist in this surface and silently returns an empty string instead of failing.

B. Identify the Actual Public Role Bindings

Do not assume the role. A bucket can be made public through any role, and there may be more than one binding:

gcloud storage buckets get-iam-policy gs://{BUCKET_NAME} \
    --flatten="bindings[].members" \
    --format="table(bindings.role, bindings.members)"

This command does not support --filter, so scan the output for rows whose member is allUsers or allAuthenticatedUsers. Every such row is a binding you must remove in the next step.

C. Remediation: Enforce Public Access Prevention & Revoke Public Bindings
# 1. Enable Public Access Prevention. When enforced, this blocks public access
#    granted through either IAM bindings or legacy ACLs. Note this is a boolean
#    flag: use --public-access-prevention, not --public-access-prevention=enforced.
gcloud storage buckets update gs://{BUCKET_NAME} \
    --public-access-prevention

# 2. Remove every binding reported in step B. Repeat for each role returned,
#    substituting {PUBLIC_ROLE}.
gcloud storage buckets remove-iam-policy-binding gs://{BUCKET_NAME} \
    --member="allUsers" \
    --role="{PUBLIC_ROLE}"

gcloud storage buckets remove-iam-policy-binding gs://{BUCKET_NAME} \
    --member="allAuthenticatedUsers" \
    --role="{PUBLIC_ROLE}"

If the bucket has uniform bucket-level access disabled, individual objects may also be public through legacy per-object ACLs, which get-iam-policy does not report. Enforcing Public Access Prevention blocks those as well; if an organization policy exception prevents enforcing it, enable uniform bucket-level access instead so ACLs can no longer grant access:

gcloud storage buckets update gs://{BUCKET_NAME} \
    --uniform-bucket-level-access

2. Public Compute Instances & Firewall Exposures (PUBLIC_IP_ADDRESS, OPEN_FIREWALL, OPEN_SSH_PORT, OPEN_RDP_PORT)

When a VM instance is exposed to the internet via an external IP or overly permissive firewall rules (e.g., 0.0.0.0/0 on port 22 or 3389):

A. Remediation: Restrict Firewall Ingress to IAP / Trusted Ranges

35.235.240.0/20 is a fixed, Google-published range used by IAP TCP forwarding. It is the same for every project, so it is safe to use as a literal whenever administrative SSH/RDP access should be brokered through IAP.

It is not a universal answer. If the workload legitimately needs ingress from somewhere else — a corporate egress range, a peered VPC, a load balancer or health-check range — ask the user which ranges are required. Never invent a range, and never leave 0.0.0.0/0 in place because the correct value is unknown.

# 1. Inspect the permissive firewall rule. Record the existing --source-ranges
#    from this output: they are the rollback value for step 2.
gcloud compute firewall-rules describe {FIREWALL_RULE_NAME} \
    --project={PROJECT_ID}

# 2. Restrict source ranges to IAP TCP forwarding
gcloud compute firewall-rules update {FIREWALL_RULE_NAME} \
    --project={PROJECT_ID} \
    --source-ranges="35.235.240.0/20"

To roll back, re-apply the original ranges recorded in step 1:

gcloud compute firewall-rules update {FIREWALL_RULE_NAME} \
    --project={PROJECT_ID} \
    --source-ranges="{ORIGINAL_SOURCE_RANGES}"
B. Remediation: Remove External IP from VM Instance

If the VM does not require direct public internet ingress/egress:

# 1. Discover the access config name (Cloud Console defaults to "External NAT";
#    gcloud CLI and Terraform default to "external-nat")
gcloud compute instances describe {INSTANCE_NAME} \
    --project={PROJECT_ID} \
    --zone={ZONE} \
    --format="get(networkInterfaces[0].accessConfigs[0].name)"

# 2. Remove external access config from network interface using the discovered name
gcloud compute instances delete-access-config {INSTANCE_NAME} \
    --project={PROJECT_ID} \
    --zone={ZONE} \
    --access-config-name="{ACCESS_CONFIG_NAME}"

Removing the access config releases an ephemeral external IP permanently; the VM cannot be given the same address back. A static (reserved) address can be re-attached. To roll back:

gcloud compute instances add-access-config {INSTANCE_NAME} \
    --project={PROJECT_ID} \
    --zone={ZONE} \
    --access-config-name="{ACCESS_CONFIG_NAME}"

3. KMS Key Rotation Misconfigurations (KMS_KEY_NOT_ROTATED)

When a Cloud KMS customer-managed encryption key (CMEK) lacks an automated rotation schedule:

# Configure automatic 90-day rotation schedule for the key
gcloud kms keys update {KEY_NAME} \
    --project={PROJECT_ID} \
    --keyring={KEY_RING} \
    --location={LOCATION} \
    --rotation-period="7776000s" \
    --next-rotation-time="{NEXT_ROTATION_ISO_TIMESTAMP}"

To roll back, remove the rotation schedule:

gcloud kms keys update {KEY_NAME} \
    --project={PROJECT_ID} \
    --keyring={KEY_RING} \
    --location={LOCATION} \
    --remove-rotation-schedule

4. Verification Check

After applying infrastructure remediation commands, verify that the target resources are properly secured:

A. Public Cloud Storage Buckets (PUBLIC_BUCKET_ACL)

Verify that public_access_prevention is enforced and that public principals (allUsers and allAuthenticatedUsers) are absent from the bucket IAM policy:

# Verify public access prevention is enforced
gcloud storage buckets describe gs://{BUCKET_NAME} \
    --format="get(public_access_prevention)"

# Verify allUsers and allAuthenticatedUsers are removed
gcloud storage buckets get-iam-policy gs://{BUCKET_NAME}
B. Public Compute Instances & Firewall Exposures (PUBLIC_IP_ADDRESS, OPEN_FIREWALL)

Verify that the firewall rule source ranges are restricted and that the VM instance external access configuration is removed:

# Verify restricted source ranges on the firewall rule
gcloud compute firewall-rules describe {FIREWALL_RULE_NAME} \
    --project={PROJECT_ID}

# Verify external access configuration is removed from the VM instance
gcloud compute instances describe {INSTANCE_NAME} \
    --project={PROJECT_ID} \
    --zone={ZONE}
C. KMS Key Rotation Misconfigurations (KMS_KEY_NOT_ROTATED)

Verify the rotation period and next scheduled rotation time for the KMS key:

gcloud kms keys describe {KEY_NAME} \
    --project={PROJECT_ID} \
    --keyring={KEY_RING} \
    --location={LOCATION}

If the returned resource descriptions confirm enforced access prevention, restricted firewall rules, removed external IP configurations, and automated key rotation schedules, the remediation is successful.

Requirements and compatibility

Works with: Claude Code, Claude apps, OpenAI Codex, GitHub Copilot, Cursor, Gemini CLI, Kiro, OpenCode, Goose, Amp, Roo Code, JetBrains Junie, Factory Droid, Devin (ex-Windsurf), Mistral Vibe, OpenHands, Letta

“Works with” means the tool reads the open Agent Skills format; a skill written for one tool may use features others lack.

Needs: Needs an API key, Needs Node.js

Security

No issues found by our static scan· No issues found

A static scan is not a guarantee. Skills are third-party content: review a skill before you let an agent use it.

Attribution and licence

Published by
Google
Publisher
Google (Official)
Source
google/skills · skills/cloud/google-cloud-scc-remediation · commit 2194d3b
Licence
Apache License 2.0 (redistribution allowed)
  • LICENSE (added by AutoGineer from LICENSE)
  • ATTRIBUTION.md (written by AutoGineer)
Synced

AutoGineer is not affiliated with or endorsed by Google.

Download ZIP

The ZIP holds the skill’s files, its licence files and an ATTRIBUTION.md. Download google-cloud-scc-remediation.zip