Skip to main content
Tensor9’s permissions model defines how your control plane interacts with customer appliances. Since appliances run in customer-owned infrastructure, permissions govern what operations the control plane can perform, when it can perform them, and how customers approve or audit those operations.

Permissions context

When deploying applications through Tensor9:
  • Customer appliances run entirely in the customer’s cloud account or private infrastructure
  • Your control plane orchestrates deployments and operations from your vendor account
  • Permissions control what your control plane can do within each customer’s appliance
The permissions model balances operational capability (your ability to deploy and operate) with customer control (their ability to approve, audit, and restrict access).

Four-phase permissions model

Tensor9 uses a four-phase permissions model where different lifecycle phases require different permission levels: Each phase corresponds to an IAM role (in cloud environments) or service account (in Kubernetes environments) with specific permissions scoped to that phase’s requirements.

Install permissions

Install permissions are the highest level of permissions, used for initial appliance setup or major infrastructure changes:

What install permissions allow

  • Full infrastructure provisioning: Create VPCs, networking, IAM roles, databases, and all application resources
  • Initial configuration: Set up observability forwarding, secrets management, DNS
  • Major upgrades: Perform infrastructure migrations or significant architectural changes

When install permissions are used

  • Initial appliance provisioning: When Tensor9 first creates a customer appliance
  • Major version upgrades: When a new release requires fundamental infrastructure changes
  • Infrastructure migrations: When moving to a different cloud region or architecture
Install permissions are rarely used after initial setup. Most deployments use deploy permissions, not install permissions.

Access control

Install permissions are typically:
  • Explicitly approved by the customer for each use
  • Time-bounded to a specific maintenance window
  • Audited with full CloudTrail or audit logging
  • Assumed directly by authorized operators, not via role chaining

Steady-state permissions

Steady-state permissions are the baseline permissions your control plane uses for automated observability collection:

What steady-state permissions allow

  • Observability: Collect logs, metrics, and traces from the appliance
  • Monitoring: Read resource state, health checks, and configuration for observability
  • Discovery: Enumerate deployed resources and their status for telemetry collection

What steady-state permissions prevent

  • Modifying infrastructure (creating, updating, or deleting resources)
  • Changing IAM policies or security configurations
  • Accessing customer data or application secrets
  • Performing destructive operations
Steady-state permissions are active by default - unless a customer disables them. Your control plane uses these permissions continuously to maintain observability and report appliance status.

Implementation

In AWS, steady-state permissions are implemented as an IAM role that your control plane assumes:
The role includes explicit denies for destructive or privilege-escalating actions.

Deploy permissions

Deploy permissions are elevated permissions required for deployments, updates, and configuration changes:

What deploy permissions allow

  • Infrastructure changes: Create, update, and delete vendor-owned resources
  • Deployments: Apply Terraform/CloudFormation changes to the appliance
  • Configuration updates: Modify application configuration, environment variables
  • Scaling operations: Adjust compute, storage, or other resource capacity

What deploy permissions prevent

  • Modifying customer IAM policies or roles
  • Changing network boundaries or security groups outside vendor resources
  • Accessing resources not owned by the vendor application

Conditional access

Deploy permissions are not continuously active. Your control plane can only assume the deploy role when specific conditions are met:
  1. Customer approval: The customer grants temporary deploy access
  2. Time-bounded: Deploy access expires after a defined window (e.g., 1 hour)
  3. Tagged requests: Assumption requests include specific tags that customers validate

Example: AWS conditional assume role

The steady-state role can only assume the deploy role when:
  • The DeployAccess tag is set to “enabled”
  • The current time is within the allowed window
Customers control when and for how long deploy access is granted.

Deployment workflow

1

Customer grants deploy access

Customer approves a deployment (manually or via automated approval workflow). This sets the DeployAccess tag and defines a time window.
2

Control plane assumes deploy role

Your control plane assumes the deploy role using the steady-state role. The assumption succeeds because the conditions are met.
3

Deployment executes

Your control plane performs the deployment (e.g., terraform apply) using deploy permissions. Infrastructure changes are applied to the appliance.
4

Deploy access expires

After the time window expires, the deploy role can no longer be assumed. Control plane reverts to steady-state permissions.

Operations permissions

Operations permissions control what operations commands your control plane can execute on appliances:

Operations types

All operations require Operate permissions. Steady-state permissions only allow automated observability collection (logs, metrics, traces), not interactive operations or queries.

Customer approval for operations

Customers can require approval for operations commands:
Customers see the exact command before approving, providing full transparency.

Operate permissions

Operate permissions are elevated permissions required for remote operations, troubleshooting, and debugging:

What operate permissions allow

  • Remote command execution: Execute kubectl commands, database queries, and cloud CLI commands
  • Interactive access: Create ops endpoints for kubectl, SSH, and database access
  • Resource inspection: Read detailed resource state, logs, and configurations
  • Troubleshooting operations: Restart pods, run diagnostic commands, query databases
  • Debugging access: SSH into VMs, exec into containers, run queries against databases

What operate permissions prevent

  • Modifying infrastructure definitions or Terraform state
  • Deploying new application versions or configuration changes
  • Changing IAM policies or roles
  • Accessing resources not owned by the vendor application
  • Permanent infrastructure modifications (changes are operational, not persistent)

Conditional access

Operate permissions are not continuously active. Your control plane can only assume the operate role when specific conditions are met:
  1. Customer approval: The customer grants temporary operate access
  2. Time-bounded: Operate access expires after a defined window (e.g., 1 hour)
  3. Tagged requests: Assumption requests include specific tags that customers validate

Example: AWS conditional assume role

The steady-state role can only assume the operate role when:
  • The OperateAccess tag is set to “enabled”
  • The current time is within the allowed window
Customers control when and for how long operate access is granted.

Operations workflow

1

Customer grants operate access

Customer approves an operations request (manually or via automated approval workflow). This sets the OperateAccess tag and defines a time window.
2

Control plane assumes operate role

Your control plane assumes the operate role using the steady-state role. The assumption succeeds because the conditions are met.
3

Operation executes

Your control plane performs the operation (e.g., tensor9 ops kubectl, tensor9 ops endpoint create) using operate permissions. Commands are executed in the appliance.
4

Operate access expires

After the time window expires, the operate role can no longer be assumed. Control plane reverts to steady-state permissions.

Customer approval workflows

Customers can configure approval workflows that gate access to elevated permissions:

Manual approval

Customer administrators manually approve deployment requests:
  1. Vendor initiates a deployment through the control plane
  2. Customer receives a notification (email, Slack, PagerDuty)
  3. Customer reviews the deployment details
  4. Customer grants deploy access by setting the approval tag
  5. Deployment proceeds

Automated approval

Your customers can automate approvals using their cloud provider’s access control features. In AWS, this is done using IAM condition keys directly in the trust policy. For example, to allow deploy role assumptions only during business hours:
For more complex automation (e.g., different windows for weekdays vs. weekends), your customers can use AWS EventBridge to trigger Lambda functions that update the IAM trust policy or set the DeployAccess tag based on their schedule. Similar automation can be built in other environments using Google Cloud IAM conditions or Azure Conditional Access policies.

Release windows

Your customers control when deployments are allowed by combining their cloud provider’s access control features with their own automation:
  • Time-based conditions: Use condition keys (like aws:CurrentTime in AWS) in IAM policies to restrict deployments to specific time ranges
  • Tag-based gating: Control approval tags programmatically via scheduled automation or manual approval workflows
  • Always require manual approval: Omit time-based conditions entirely and rely on manual tag updates
This approach provides flexibility while keeping access control entirely within customer-managed policies.

Permissions across form factors

Permission models vary by form factor:

Audit logging

All permission assumptions and operations are logged:

What gets logged

Where logs are stored

Customers have complete visibility into what your control plane does within their infrastructure.

Best practices

Design your application to operate with steady-state permissions whenever possible. Minimize the frequency of deployments requiring deploy permissions.
When requesting deploy access, include clear descriptions of what the deployment does and why elevated permissions are needed. This helps customers make informed approval decisions.
Honor customer-defined release windows. Don’t request deploy access outside approved time windows unless it’s a genuine emergency.
After initial appliance setup, avoid operations requiring install permissions. Use deploy permissions for routine updates and only request install permissions for major architectural changes.
Maintain your own audit trail of what operations your team performs on customer appliances. This helps with customer support and incident investigation.
Clearly document what permissions your application requires for each phase. This helps customers understand and approve your permission model.