Views:
You can update an Azure subscription from TrendAI Cloud One File Storage Security (C1FSS) to TrendAI Vision One™ File Security Storage (V1FSS) using the TrendAI Vision One console and the Azure portal. This topic covers the preparation, settings, and behavior changes that apply to both update paths.

Choose an update path

Two update paths are available. Both do the same work; they differ only in the order of two actions: turning on V1FSS scanning, and removing the C1FSS event subscription.

Update paths

Path
Order
Result
Zero downtime
Turn on V1FSS first, remove C1FSS after
An overlap where both products scan every new blob
Brief downtime
Remove C1FSS first, turn on V1FSS after
A gap where neither product scans
  • Zero downtime: Choose this path if scanning must not be interrupted. Be aware that during the interval before C1FSS scanning stops, a newly uploaded blob might be scanned by both C1FSS and V1FSS. If the promote-or-quarantine plugin is in use, this can cause race conditions, which lead to inconsistent tags, an inconsistent file state (one product moves a blob while the other is still reading it), or duplicate processing (both products attempt the same move, and whichever one wins deletes the source while the other logs a failure).
  • Brief downtime: Choose this path if you can tolerate a short interruption of scanning. Scanning pauses only between deleting the C1FSS event subscription and turning on scanning in the TrendAI Vision One console, which is typically a few minutes. This path has the least chance of problems during the update, and is the better choice if you use the promote-or-quarantine plugin.

Before you begin

Work through all five checks below before you change anything. They apply to both update paths.
  1. Confirm that you are not using a VNet deployment.
    Important
    Important
    V1FSS does not support VNet deployment. If C1FSS is deployed into a virtual network, do not update. There is no equivalent configuration in V1FSS, and updating moves your scanning from a network-isolated pipeline to a public-endpoint one.

    Supported deployment types

    Deployment type
    Update supported?
    All-in-One (Scanner and Storage stacks)
    Yes
    Storage stack only
    Yes
    Scanner stack only
    Yes
    Any stack deployed into a VNet
    No
  2. Check whether you use the promote-or-quarantine plugin.
    C1FSS can move clean or malicious blobs to other storage accounts, but only through a separate plugin deployed once per scanning storage account. V1FSS has this capability built in, but the settings do not carry across automatically, and one default differs in a way that changes where your files land.
    Go to Azure portalResource groups and look for resource groups that contain a pqfunction… storage account. Each one is a plugin instance. If you find any, see Update promote and quarantine settings.
  3. Record the C1FSS event subscription details.
    C1FSS creates an Event Grid event subscription on each scanned storage account, which triggers its Blob Listener function whenever a blob is uploaded. You delete this subscription during the update, so record it first. This information is required if you need to roll back to C1FSS.
    Do the following for each storage account that C1FSS protects:
    1. Go to Azure portalStorage accounts and open the storage account.
    2. In the left navigation, select Events, and then open the Event Subscriptions tab.
    3. Find the subscription named tmbl0…-trigger. This is the subscription C1FSS created.
    4. Open the subscription and note down the subscription name, event types, endpoint type, endpoint, and any filters.
    5. Save this information somewhere accessible, for example a text file or a ticket comment.

    C1FSS event subscription details

    Name
    Event types
    Filters
    Endpoint type
    Endpoint
    tmbl0<uid>-trigger
    Microsoft.Storage.BlobCreated, Microsoft.Storage.BlobRenamed
    None
    Azure Function
    tmbl0<uid> (Blob Listener)
    You return to this Events page several times during the update. It is where you confirm that the V1FSS subscription appears beside the C1FSS one, where you delete the C1FSS subscription at cutover, and where you recreate the C1FSS subscription if you roll back.
    Note
    Note
    If a storage account has no tmbl0…-trigger subscription, C1FSS is not scanning it. Leave that storage account out of the update.
  4. Identify the C1FSS resource groups.
    C1FSS resources carry no tags, so you identify them by name. The default resource group names are Scanner-TM-FileStorageSecurity and Storage-TM-FileStorageSecurity, but the names were chosen at deployment time and might have been changed. Every resource in a C1FSS resource group shares the same generated 13-character suffix and is named tm<role>0<suffix>, where <role> identifies the component.
    Go to Azure portalResource groups and look for groups containing resources whose names start with tm.

    C1FSS resource groups

    If it contains
    It is the
    Typical default name
    tmsf0… (function app), tmsbq0… (Service Bus)
    Scanner resource group, one per region
    Scanner-TM-FileStorageSecurity
    tmbl0… and tmat0… (function apps)
    Storage resource group, one per protected storage account
    Storage-TM-FileStorageSecurity
  5. Confirm that you have the required permissions.
    You need permissions on two planes, and subscription Owner alone is not enough.
    • Microsoft Entra ID (your directory): TrendAI Vision One creates an app registration and a service principal in your tenant, so you need the Application Administrator role or equivalent.
    • The Azure subscription: You need permission to create resource groups, storage accounts, key vaults, Service Bus namespaces, function apps, managed identities, and Event Grid topics and subscriptions, as well as role definitions and role assignments.
    You also need enough quota in each target region. The limit that matters most often is Elastic Premium App Service plans, because V1FSS uses EP1. For more information, see Deploy File Security Storage to Azure.
    Note
    Note
    You do not need to check permissions and quota by hand. Step 1 of either update path runs ./deploy.sh preflight, a read-only check that reports exactly what is missing before anything is created.

Update promote and quarantine settings

Skip this section if you found no pqfunction… storage accounts. Without the plugin, C1FSS only tagged your blobs, and V1FSS does the same.
In C1FSS, promote and quarantine were a separate plugin deployed once per scanning storage account, with a connection string for each destination. In V1FSS they are built into the post-scan action function app and configured on the module "file-storage-security" block in the deployment package's main.tf file.
Record the plugin settings first
For each pqfunction… storage account, open the function app in the same resource group, go to SettingsEnvironment variables, and record the following.

Plugin settings to record

Setting
What to record
PROMOTEMODE
move or copy
QUARANTINEMODE
move or copy
PROMOTE_STORAGE_CONNECTION_STRING
Only the AccountName= part, which is the destination account name
QUARANTINE_STORAGE_CONNECTION_STRING
Only the AccountName= part
Important
Important
These connection strings contain storage account keys. Copy out only the account name, and do not paste the whole value anywhere.
A blank connection string means that action was turned off. Also note which storage account each plugin acts on. It is the scanning storage account of the storage resource group the plugin was deployed alongside.
Set the values in main.tf
Open main.tf in the unzipped package. Cloud Shell includes an editor, which you open with code main.tf. Find the module "file-storage-security" block and set the following three values.
  1. Where blobs go.
    # If every protected storage account used the same destination:
    clean_storage_account      = jsonencode({ global = "mycleanaccount" })
    quarantine_storage_account = jsonencode({ global = "myquarantineaccount" })
    
    # If destinations differed per storage account:
    quarantine_storage_account = jsonencode({
      custom = {
        "sourceaccount1" = { destAccount = "quarantineaccount1" }
        "sourceaccount2" = { destAccount = "quarantineaccount2" }
      }
    })
    Leave a variable as jsonencode({}) if that action was turned off. Those blobs are tagged in place, exactly as before.
    Important
    Important
    Use global only if every storage account you are protecting had a plugin for that action. A global value applies to all of them, including any that never had a plugin, and those storage accounts were only tagged under C1FSS. If you give them a destination, V1FSS starts moving their blobs. If only some storage accounts had a plugin, use the custom form, which affects only the accounts you list.
  2. Where blobs land inside the destination. You must change this value.
    use_source_storage_account_as_container = false
    The package ships with true, which is the correct default for a new deployment but not for an update.

    Destination paths

    Configuration
    Path your blobs land at
    C1FSS plugin
    <destination>/<source-container>/<blob>
    V1FSS with false
    <destination>/<source-container>/<blob>, the same as C1FSS
    V1FSS with true
    <destination>/<source-account>/<source-container>/<blob>, which is different
    If anything reads your quarantined or promoted blobs by path, true breaks it at cutover.
  3. Leave the failure destination empty, to match C1FSS.
    failure_storage_account = jsonencode({})
    C1FSS left blobs whose scan failed in place. V1FSS can move them somewhere instead, which is a new capability but not your current behavior.
Two behaviors that cannot be carried over
  • Copy mode. If PROMOTEMODE or QUARANTINEMODE was copy, C1FSS left the original blob in place. V1FSS always moves the blob: it copies the blob to the destination and then deletes the original. Make sure nothing depends on the original staying in the source storage account.
  • Destinations in another subscription. C1FSS used a storage account key, so the destination could be anywhere. V1FSS uses its own managed identity, which is scoped to this subscription. If a destination is in a different subscription, move it into this one, or ask your Azure administrator to grant the v1fss-…-function-identity identity access to it after deployment.

What changes after the update

V1FSS is not an exact feature-for-feature match for C1FSS. Review the following before you delete anything.
What is different
  • Scan results are always written to both metadata and index tags. C1FSS let you turn metadata off with UpdateScanResultToBlobMetadata = No. V1FSS does not: every scanned blob gets fss- index tags as well as fssScanned, fssScanResult, fssScanDate, fssScanDetailCode, and fssScanDetailMessage metadata. If you ran C1FSS with metadata off, check anything that reads or compares blob metadata before you update.
  • Your Azure bill profile changes if C1FSS ran on the consumption plan. V1FSS uses an always-allocated Elastic Premium (EP1) plan instead of pay-per-execution, which is a fixed per-region cost in exchange for no cold starts. This is by design.
  • Logs go to a new workspace. V1FSS creates its own Log Analytics workspace and Application Insights instance (v1fss-<region>-…) rather than using one you supply. Point any saved queries or alerts at the new workspace.
  • Promote and quarantine always move blobs, never copy them.
  • Scan history stays in Cloud One. TrendAI Vision One starts fresh at cutover. Export anything you need to keep before your Cloud One tenant is removed.
What does not carry over
  • VNet deployment: Not supported in V1FSS, so do not update a VNet deployment.
  • Reporting object keys to the backend (ReportObjectKey): No equivalent in V1FSS.
  • A custom Event Grid topic name: Harmless. V1FSS finds the topic by the storage account it watches.
What you gain, and might want to set up afterward
  • Blob moving without a separate plugin, built into V1FSS and configured once instead of once per storage account, with no storage account keys to manage.
  • A destination for failed scans (failure_storage_account). C1FSS left those blobs in place.
  • Detections in TrendAI Vision One XDR, alongside the rest of your security data.

Common questions

Which update path should I use?
Use zero downtime if you cannot pause scanning. Use brief downtime if you can, and especially if you use the promote-or-quarantine plugin. The plugin is the one case where the overlap causes real problems rather than just duplicate work.
How long is the brief downtime?
Only the gap between deleting the C1FSS event subscription and turning on scanning in the TrendAI Vision One console. Both are single actions in a console, so it is typically a few minutes. The duration depends on you, not on any deployment step.
In the zero-downtime path, why not delete the C1FSS event subscription before validating?
Validating during the overlap makes results hard to attribute, so you validate on a storage account C1FSS never protected instead. There is no overlap on that storage account, nothing can race with your test uploads, and every result is attributable to V1FSS. Deleting the C1FSS subscription first would not shorten the update, because V1FSS is already turned on in both orders. It would only move the risk earlier: if V1FSS turned out to be misconfigured, you would find out with your real storage accounts already unprotected. You still get end-to-end confirmation on a storage account C1FSS protected, at the end of step 3, after C1FSS is unsubscribed but before its resources are deleted. At that point attribution is unambiguous and rollback is still available.
Which storage accounts does C1FSS actually protect?
Open each storage account you think is protected and check EventsEvent Subscriptions for a tmbl0…-trigger entry. That is the authoritative answer: if the subscription is not there, C1FSS is not scanning that storage account. The Cloud One console's File Storage SecurityStacks page also names the storage account behind each stack.
Why are my blobs being scanned twice?
In the zero-downtime path, both products are turned on during the overlap. That is how the path avoids downtime, and it stops when you delete the C1FSS event subscription.
The deploy.sh script failed. Can I run it again?
Yes. The script records what it has already done in your own subscription, not in the package, so running it again continues rather than starting over. Fix whatever it reported and run the same command again.
It failed on something about an app registration.
That is Microsoft Entra ID, not the subscription. You need directory permissions: the Application Administrator role or equivalent. Ask your Entra ID administrator if you do not have them.
How do I remove the V1FSS deployment?
Run ./deploy.sh uninstall from a package directory. Be careful if this subscription has other TrendAI Vision One features connected, because the command removes everything that package deployed, not only File Security Storage. To remove only File Security Storage, clear it in the TrendAI Vision One console, download the regenerated package, and run ./deploy.sh install again.
Teardown left a system topic behind. Is that a problem?
No, V1FSS needs it. Leftover FSS-… custom roles, however, should be deleted. Nothing removes them automatically.
Is my region supported?
If a region is not supported yet, ./deploy.sh install fails immediately and names the region. Raise it with TrendAI support before you remove C1FSS from that region.
Can I do this without Cloud Shell?
Yes, from any machine that has Bash 5 or later, the Azure CLI, jq, and Terraform installed, and that is signed in to the correct subscription. Cloud Shell is recommended only because it already has all of them. Note that macOS ships Bash 3.2, which is too old.