This is the multi-page printable view of this section. Click here to print.

Return to the regular view of this page.

Accounts & access

Invite users to a project and use roles to control what they can do.

Let’s learn how to manage users on SPEKTRA Edge.

SPEKTRA Edge offers the Identity and Access Management (IAM) framework for the user management, which is based on the Role-Based Access Control (RBAC) mechanism. In other words, you apply the certain role or roles to the users or groups, which is called the role binding, to give the certain permissions to the particular individual or group of individuals.

It also has a concept of scope of role binding, which is that the permissions for the particular role only applicable in the certain scope. This means that the role binding happened at the project is only effective under that project, or sub-projects if those available, but not others, like parent projects.

This means that you can create a really powerful and effective user management mechanism with the well-organized projects or organization structure.

Put together, every grant of access on SPEKTRA Edge answers three questions: who, what, and where.

flowchart LR
    WHO["<b>Who</b><br/>a user, a group,<br/>or a service account"] --> RB
    WHAT["<b>What</b><br/>a role, such as<br/>Owner or Viewer"] --> RB
    WHERE["<b>Where</b><br/>a scope: an organization,<br/>a project, or a service"] --> RB
    RB["<b>Role binding</b>"] --> OUT(["This principal has this role's<br/>permissions — but only<br/>inside this scope"])

Scopes inherit downwards only. A role granted on an organization applies to the projects beneath it; a role granted on a project does not grant anything on its parent or on a sibling project.

flowchart TD
    ORG["Organization"] --> P1["Project A"]
    ORG --> P2["Project B"]
    P1 --> SP["Sub-project A1"]

    GRANT(["Grant Viewer<br/>on Project A"]) -.->|"applies"| P1
    GRANT -.->|"applies"| SP
    GRANT -.->|"does <b>not</b> apply"| ORG
    GRANT -.->|"does <b>not</b> apply"| P2

What you need

To grant access to users and groups, you need the following.

Roles

Granting access means choosing a role, so it is worth knowing what the roles mean before you grant anything. These are the pre-existing user roles offered by SPEKTRA Edge.

Role name Resource name Permissions
Owner scope-admin All operations on core and third party services
Admin operator admin-operator All operations on core services
Device operator devices-operator All operations on device and applications services
Application operator apps-operator All operations on applications services
Viewer viewer Read-only operations on core services

The owner role has full access to the services offered by SPEKTRA Edge under particular scope.

The admin operator role is similar to the owner role but does not have access to the third-party services, for example the watchdog service offered by Service Experience Insight. This is a good role for someone who manages the entire service, e.g., user management.

The devices and application operator roles are both for the application management. The devices operator role is good for someone who manages both devices and applications but the application operator is for the application management only.

The viewer role has read access to core services but no write access. This is a good role for someone who only monitors or observes core services.

Grant access to users

With a role in mind, you can grant someone access.

Click the Grant access button in the Manage resources and access of this project blue bar on the Project overview page, which will ask you for:

  • the E-mail address of the person you want to give access to the project
  • the role to be assigned to the person.
Selecting the role for the user in the Grant access to project dialog on the Project overview page.

Selecting the role for the user in the Grant access to project dialog on the Project overview page.

Organize users by groups

You can create a group to manage multiple users in one-shot.

One good example of the group usage is to grant access to multiple users in a single operation, as explained in the following section.

To create a group, click the Create group button on the Project overview page and fill in the required information, such as the name and the region, as well as the E-mail addresses of the members managed in the group.

Creating Your team group under Your project.

Creating Your team group under Your project.

Grant access to groups

You can grant access to the group, which is a great way to grant access to multiple users in the efficient fashion.

To do that, use the group E-mail address to grant access instead of the individual person’s E-mail. The group E-mail address is constructed by SPEKTRA Edge with the following convention.

[Group name] @ [Project name] .groups.iam.edgelq.com

You can also get the group E-mail address on the groups overview page under your project.

The group E-mail address on the groups overview page.

The group E-mail address on the groups overview page.

Grant access by clicking the Grant access button on the Project overview page. Give the group E-mail address, your-team@your-project.groups.iam.edgelq.com for this example, and the role you want to grant access to the group.

Granting access to the group with the group’s E-mail address.

Granting access to the group with the group’s E-mail address.

You can check the roles for the group members by going to the Access page under the IAM section. You can see all the group members have the same role of the group’s role.

All the group members have the same role of the group’s one.

All the group members have the same role of the group’s one.

In this section

  • Organizations and projects — how projects and organizations are structured, what descendants inherit, and the choices that are hard to undo.
  • User authentication — sign up, sign in, and set up multi-factor authentication.
  • Service accounts — identities for automation and devices, and the keys they authenticate with.
  • Manage resource limits — the resource quotas that apply to a project, and how to request and approve changes to them.

Next steps

Congratulations on understanding how to manage users on SPEKTRA Edge.

With the power of the scope based role binding, you can conduct the user management with achieving the high security standard.

The role binding is one side of the user management coin. The other side of the user management is the user sign-up and sign-in.

Let’s dive into user authentication to understand the full picture of the user management on SPEKTRA Edge.

1 - Organizations and projects

How projects and organizations are structured, and the choices that are hard to undo.

Before you create anything on SPEKTRA Edge you make two structural decisions: how to divide your fleet into projects, and how those projects sit under organizations. Both are cheap to get right at the start and awkward to change later, because a resource’s name — and therefore its identity — includes the project it belongs to.

This page explains the model and flags the choices to make deliberately.

Projects

A project is the unit of ownership and isolation. It holds devices, applications, secrets, metrics, alerting policies, and the role bindings that say who may touch them. Almost every resource on the platform lives inside one.

Two projects share nothing by default. A device in one is invisible to the other, a secret cannot be read across the boundary, and access granted in one grants nothing in the other. That makes the project the natural boundary for anything you want kept genuinely separate — customers, environments, business units.

The trade-off is that separation is not free. Anything you want to see across projects — a fleet-wide view, one alerting policy, a single dashboard — has to be assembled per project, because queries do not span them. Split for isolation you actually need, not for tidiness.

Organizations

An organization groups projects, and organizations can nest inside other organizations to mirror how your business is actually structured.

An organization carries three things its descendants inherit:

  • Access. A role binding at organization level applies to every project beneath it. This is how you grant a platform team access once instead of project by project.
  • Region policy. Which regions descendants may use, and which is the default.
  • Which services descendants may enable, and the default business tier they get.

Inheritance flows downward only. A role granted on a project confers nothing on its parent organization or on a sibling project. When someone can see more than you expected, look upward from the resource, not sideways.

Every project records its full ancestry, so the effective access on a resource is the union of every binding from the root organization down to the project holding it.

Regions

A project’s region policy does two jobs:

  • Enabled regions — the complete set of regions in which resources may be created. Creating a resource outside them is refused, not silently redirected.
  • Default region — the one that handles resources not tied to a region of their own.

Region is part of a resource’s identity, not a routing hint, so the choice has consequences beyond latency:

  • Limits are per region. A project enabled for two regions has two separate allowances for each resource type, not one shared pool. See Resource limits.
  • Secrets do not cross regions. A secret in one region is not visible to a device in another; a multi-region fleet needs the secret created in each region it occupies. See Secrets.
  • Queries are per region unless you deliberately widen them. The - wildcard reads across every region a project uses.

Enable the regions you need and no more. Adding one later is straightforward; having resources scattered across regions nobody meant to use is not.

Choices that are hard to change

Most of what you set when creating a project can be edited afterwards. These cannot, or not without disruption.

Choice Why it is hard to undo
Project ID Permanent. It appears in the name of every resource in the project, so changing it would mean recreating all of them. The display name is separate and freely editable.
Parent organization Determines inherited access and policy. Moving a project is not a routine operation.
Enabled regions Adding is fine. Removing a region means migrating or deleting everything in it first.
Business tier Drives the default limits your project receives. Changing it later means renegotiating limits, not flipping a switch.
Service project A project created for developing your own platform service behaves differently from a normal one, and this is decided at creation.

Pick the project ID deliberately. Something short, stable, and meaningful to a human reading a resource name two years from now — acme-retail-prod, not project-2 or a name containing a team that may be reorganized.

Business tier

The business tierXSMALL, SMALL, MEDIUM, or LARGE — describes the expected size of the project and determines the default limits it is granted. Organizations set a default that child projects inherit unless they specify their own, and individual services can be given a different tier from the project’s overall one.

Start at the tier that matches your real intent. Under-sizing means requesting limit increases almost immediately; over-sizing reserves capacity you are not using.

Optional services

Some capabilities are not enabled by default and are switched on per project — Service Experience Insights, ZTNA, and the AI service among them.

Two gates apply, in order. The parent organization decides which services its descendants are allowed to use, and the project then decides which of those it enables. If a service appears unavailable when creating a project, the organization is usually the reason, not the project.

Enabling a service adds capability but also adds surface area — sidebar sections, resources, and permissions. Enable what you intend to use.

Structuring your projects

There is no universally right shape, but the trade is consistent: more projects buys isolation and costs you cross-cutting visibility.

Common patterns:

  • By environment — separate production from staging so that access, limits, and an accidental bulk delete cannot cross the boundary. The most commonly worthwhile split.
  • By customer or site group — where you genuinely need one project unable to see another. Note that limits are shared with child projects, so a hierarchy of customer projects needs the parent’s limits sized for all of them.
  • By business unit, under organizations that mirror the reporting structure — so that access follows existing lines rather than being maintained by hand.

What usually does not justify a separate project is a group of devices you merely want to manage together. Labels do that job within one project, while keeping one view of the fleet and one set of alerting policies.

Next steps

2 - User authentication

Sign up, sign in, and set up multi-factor authentication.

Let’s learn how to sign-up and sign-in on SPEKTRA Edge.

The previous topic, the user and group management, discussed how to manage users with groups and role bindings. In fact, that’s one side of the coin of the user management. The other side, the user sign-up and sign-in, is the topic in this page.

SPEKTRA Edge user authentication is the multi-factor authentication (MFA) with Google Sign-in support. Let’s learn how it works step-by-step both for the Google accounts and for the E-mail/password based authentication.

What you need

For the user authentication on SPEKTRA Edge, you need the following.

Sign-up

Let’s learn the sign-up process on SPEKTRA Edge first.

Select Google accounts or Email and password tab below to learn the process for each case.

Select the Sign Up tab and click Sign up with Google option.

Clicking Sign up with Google to sign-up with Google accounts.

Clicking Sign up with Google to sign-up with Google accounts.

You will be asked to select the MFA app. Select your preferred MFA app and move on to the MFA setup step next.

Selecting the Google Authenticator to move on to multi-factor authentication setup step.

Selecting the Google Authenticator to move on to multi-factor authentication setup step.

Scan the QR code by the MFA app on your phone and fill in the six-digit pass code generated by the app.

Scan the QR code with the MFA app and fill in the six-digit pass code generated by the app.

Scan the QR code with the MFA app and fill in the six-digit pass code generated by the app.

That’s it. You’ve successfully signed up for SPEKTRA Edge and will be redirected to the SPEKTRA Edge dashboard.

Select the Sign Up tab and click SIGN UP after filling in the E-mail, password, and the full name.

Clicking SIGN UP after filling in the E-mail, password, and the full name.

Clicking SIGN UP after filling in the E-mail, password, and the full name.

You will be asked to select the MFA app. Select your preferred app and move on to the MFA setup step next.

Selecting the Google Authenticator to move on to multi-factor authentication setup step.

Selecting the Google Authenticator to move on to multi-factor authentication setup step.

Scan the QR code by the MFA app on your phone and fill in the six-digit pass code generated by the app.

Scan the QR code with the MFA app and fill in the six-digit pass code generated by the app.

Scan the QR code with the MFA app and fill in the six-digit pass code generated by the app.

You’ve successfully set up MFA for your account. The last thing is to verify your E-mail address. Click continue and move on to the E-mail verification step.

Click Continue to move on to the E-mail verification step.

Click Continue to move on to the E-mail verification step.

Open your E-mail application and search for the verification E-mail sent by SPEKTRA Edge in your inbox. Click the Verify email address box in the verification E-mail to complete the sign-up process.

Clicking the Verify email address to complete the sign-up process.

Clicking the Verify email address to complete the sign-up process.

You will be directed to the SPEKTRA Edge dashboard and successfully complete the SPEKTRA Edge sign-up process.

Sign-in

Select the account type below to go through the sign-in process on SPEKTRA Edge.

Click the Sign In with Google button to sign-in to SPEKTRA Edge.

Clicking Sign in with Google to sign-in with Google.

Clicking Sign in with Google to sign-in with Google.

You will be asked to fill in the MFA pass code. Open your MFA app and paste the code generated by the app, then click the right arrow button to complete the sign-in process.

Fill in the MFA code to complete the sign-in process.

Fill in the MFA code to complete the sign-in process.

You will be re-directed to the SPEKTRA Edge dashboard.

Fill in your E-mail address and the password you gave during the sign-up process and click LOG IN button to proceed.

Sign-in with your E-mail address and password.

Sign-in with your E-mail address and password.

You will be asked to fill in the MFA pass code. Open your MFA app and paste the code generated by the app, then click the right arrow button to complete the sign-in process.

Fill in the MFA code to complete the sign-in process.

Fill in the MFA code to complete the sign-in process.

You will be re-directed to the SPEKTRA Edge dashboard.

Next steps

Congratulations on completing the user authentication process on SPEKTRA Edge.

Let’s go to the resource limits page to learn how to manage resources on SPEKTRA Edge, next.

Onwards.

3 - Service accounts

Identities for automation and devices, and the keys they authenticate with.

Not every caller is a person. Scripts, CI pipelines, monitoring integrations, and the devices themselves all need to authenticate, and none of them should do so as a human being. A service account is the identity they use instead.

Using one is not merely tidier. A human account carries whatever access that person has accumulated, disappears when they leave the company, and gives you no way to tell which automation did what. A service account has exactly the access you granted it, outlives any individual, and shows up in the audit trail under its own name.

What a service account is

A service account belongs to a project and lives in a region:

projects/{project}/regions/{region}/serviceAccounts/{serviceAccount}

It also has an email-style identifier, which is what you use when granting it access:

automation@acme-retail.us-west2.serviceaccounts.iam.edgelq.com

It is a principal like any other. It appears in role bindings, in audit logs, and in the dashboard’s access lists alongside users and groups.

Create one per job

Create a separate service account for each distinct job rather than one shared account for “automation”. They cost nothing, and the benefits compound:

  • Each gets only the access its job needs, so a compromised credential has a bounded blast radius.
  • You can revoke one without breaking the others.
  • The audit trail tells you which job did something, not just that something did.

Name them after the job — ci-deploy, metrics-export, fleet-inventory — not after the person or team that created them.

cuttle iam create service-account fleet-inventory \
  --project $PROJECT --region $REGION

Keys

A service account is an identity; a key is how a caller proves it holds that identity. You choose the type when you create the key.

Type What you get Suits
API key A single bearer token. Shell scripts, CI jobs, REST calls.
RSA keypair A private key returned to you once. gRPC clients and long-running services.
cuttle iam create service-account-key ci \
  --parent projects/$PROJECT/regions/$REGION/serviceAccounts/fleet-inventory \
  --algorithm API_KEY \
  -o json

Because of that, prefer writing the credentials straight to a file over copying them out of terminal output, where they linger in your scrollback and shell history:

cuttle iam create service-account-key ci \
  --parent projects/$PROJECT/regions/$REGION/serviceAccounts/fleet-inventory \
  --algorithm RSA_2048 \
  -c ./ci-credentials.json

A key can also be given a validity window. Setting an expiry is the simplest way to ensure a credential issued for a short-lived job cannot quietly remain valid for years.

Rotating a key

An account can hold more than one key at a time, so rotation needs no downtime:

  1. Create a second key.
  2. Deploy the new value wherever the old one is used.
  3. Confirm traffic is succeeding on the new key.
  4. Delete the old key.

Deleting takes effect immediately and cannot be undone, so do not skip step 3.

Where to keep keys

The failure to design against is a credential sitting somewhere you did not intend, still valid months later.

  • Never commit key material to a repository — application or infrastructure.
  • Inject it at runtime from your CI system’s secret store or your platform’s secret manager.
  • Prefer a mounted file over an environment variable, which leaks into logs, crash dumps, and child processes.
  • Give keys an expiry so that forgotten ones lapse on their own.

Granting access

A new service account can authenticate and do nothing at all. It needs a role binding, exactly like a user, and the member string must carry the serviceAccount: prefix:

cuttle iam create role-binding inventory-viewer \
  --parent projects/$PROJECT \
  --member "serviceAccount:fleet-inventory@$PROJECT.$REGION.serviceaccounts.iam.edgelq.com" \
  --role "services/iam.edgelq.com/roles/viewer"

Grant the narrowest role that works. A job that reads a device inventory needs read access and nothing more; if it later needs to write, widen it then.

As with users, role bindings take a minute or two to become effective, so a PERMISSION_DENIED immediately after granting access usually means “not yet” — see Accounts & access.

Restricting where a key works

A role binding can carry a condition that constrains it further. The most useful for automation is an IP condition — a list of CIDR ranges the caller must come from. Applied to a key held by a CI runner with stable egress addresses, it means a leaked credential is not usable from anywhere else.

Device service accounts

Devices authenticate the same way. When a device is provisioned it receives its own service account, and the credentials on its disk are a service account key — which is why a provisioning policy specifies the role each new device’s account should be granted.

You do not normally manage these by hand, but knowing they exist explains two things you will see: devices appearing as principals in your audit logs, and a device’s access being governed by exactly the same role bindings as everything else.

When a device is decommissioned, its service account should go with it. Removing the device through the dashboard or the API handles this; manually deleting a device record without cleaning up its identity leaves a credential that can still authenticate.

Next steps

4 - Manage resource limits

View the resource quotas that apply to a project, and request changes.

Let’s learn how to manage resource limits on the SPEKTRA Edge platform.

What you need

To go through this page, you need the following.

How limits work

Three numbers describe every limit, and telling them apart saves a lot of confusion later.

Value Meaning
Usage How many of that resource exist right now.
Configured limit The ceiling your plan currently allows.
Active limit The ceiling actually being enforced.

Normally the configured and active limits are equal, and the dashboard shows one number. They diverge in two situations: briefly, while a change you just made propagates; and, more importantly, when a limit is lowered at the moment usage is rising. In that case the active limit holds the older, higher value rather than retroactively putting you over quota. A lasting difference between the two is a signal worth investigating, not a display quirk.

A limit is not something you set. It is derived from the plan assigned to your project, which is why the dashboard offers you a request rather than an edit field: the request adjusts the underlying plan assignment, and the limit follows. The same is true through the API — the limit resource is read-only, and writing to it is not possible.

Limits are per region

This is the part that surprises people. A limit applies to a resource type in a region, so a project spanning two regions has two separate allowances for the same resource type, not one shared pool.

A limit of 25 pods in a project enabled for us-west2 and eu1 means 25 pods in each — 50 in total. Conversely, having room in one region does not help a device trying to start a pod in the other.

Resources that are not themselves regional draw against every region the project occupies, so enabling an additional region affects them too.

Limits are shared with child projects

The limit applies not only to the current project but to any child projects beneath it. If the current project’s pod limit is 25, the total across the current project and all its children is 25 — children draw from the same allowance, not their own.

Plan for this before building a deep project hierarchy: a parent limit sized for one team’s use will not accommodate ten child projects.

When you hit a limit

An API call that would exceed a limit fails with RESOURCE_EXHAUSTED (HTTP 429). Retrying will not help — the request was refused because the resource does not fit, not because you called too often. Raise the limit or free something up.

For automation, check headroom before a bulk create instead of discovering the ceiling part-way through; a half-finished bulk operation is more work to reconcile than one that never began.

Retention policies

Limits cap how many things exist. Retention policies are the related control over how long time-series and log data is kept, and are worth reviewing alongside limits — they determine both how far back you can investigate an incident and how much stored data your project accumulates.

Request resource limit changes

First step to manage the resource limits is to request the limit change.

Let’s go to the Limits overview page by clicking the Limits option from the side bar menu.

Clicking the Limits icon on the dashboard side bar menu.

Clicking the Limits icon on the dashboard side bar menu.

Click the Change limits button to open the Request resource limit change dialog.

Clicking the Change limits button on the Limits overview page.

Clicking the Change limits button on the Limits overview page.

Let’s request the Pod resource increase from 25 pods to 50.

Request the Pod resource increase.

Request the Pod resource increase.

That’s it for the resource limit request.

Approve resource limit changes

After the resource limit requests, the remaining task is to approve the request to make it effective.

Click the Change limits requests tab to show the list of change limit requests.

Click the Change limits requests tab to show the list of change limit requests.

Click the Change limits requests tab to show the list of change limit requests.

Approve the request by selecting the Approve option of the Actions column.

Approving the pod resource limit request by selecting the Approve option of the Actions menu.

Approving the pod resource limit request by selecting the Approve option of the Actions menu.

That’s it!

Next steps

That is the end of the Learn path: you can set up devices, run applications on them, watch them, and control who else can.

If you operate Service Experience Insights, continue with Insights. If you want to drive all of this from your own code rather than the dashboard, Integrate is the place to go.