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.
-
Confirm that you are not using a VNet deployment.

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 typeUpdate supported?All-in-One (Scanner and Storage stacks)YesStorage stack onlyYesScanner stack onlyYesAny stack deployed into a VNetNo -
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 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. -
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:
-
Go to and open the storage account.
-
In the left navigation, select Events, and then open the Event Subscriptions tab.
-
Find the subscription named
tmbl0…-trigger. This is the subscription C1FSS created. -
Open the subscription and note down the subscription name, event types, endpoint type, endpoint, and any filters.
-
Save this information somewhere accessible, for example a text file or a ticket comment.
C1FSS event subscription details
NameEvent typesFiltersEndpoint typeEndpointtmbl0<uid>-triggerMicrosoft.Storage.BlobCreated,Microsoft.Storage.BlobRenamedNoneAzure Functiontmbl0<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
If a storage account has notmbl0…-triggersubscription, C1FSS is not scanning it. Leave that storage account out of the update. -
-
Identify the C1FSS resource groups.C1FSS resources carry no tags, so you identify them by name. The default resource group names are
Scanner-TM-FileStorageSecurityandStorage-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 namedtm<role>0<suffix>, where<role>identifies the component.Go to and look for groups containing resources whose names start withtm.C1FSS resource groups
If it containsIt is theTypical default nametmsf0…(function app),tmsbq0…(Service Bus)Scanner resource group, one per regionScanner-TM-FileStorageSecuritytmbl0…andtmat0…(function apps)Storage resource group, one per protected storage accountStorage-TM-FileStorageSecurity -
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 usesEP1. For more information, see Deploy File Security Storage to Azure.
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 , 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 |
ImportantThese 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.-
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 asjsonencode({})if that action was turned off. Those blobs are tagged in place, exactly as before.
Important
Useglobalonly if every storage account you are protecting had a plugin for that action. Aglobalvalue 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 thecustomform, which affects only the accounts you list. -
Where blobs land inside the destination. You must change this value.
use_source_storage_account_as_container = false
The package ships withtrue, which is the correct default for a new deployment but not for an update.Destination paths
ConfigurationPath your blobs land atC1FSS plugin<destination>/<source-container>/<blob>V1FSS withfalse<destination>/<source-container>/<blob>, the same as C1FSSV1FSS withtrue<destination>/<source-account>/<source-container>/<blob>, which is differentIf anything reads your quarantined or promoted blobs by path,truebreaks it at cutover. -
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
PROMOTEMODEorQUARANTINEMODEwascopy, 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-identityidentity 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 getsfss-index tags as well asfssScanned,fssScanResult,fssScanDate,fssScanDetailCode, andfssScanDetailMessagemetadata. 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 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 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.
