AnyX Guide Type: guide

  • Billing

    Billing

    b2448eca undraw pay online b 1 hk

    Billing

    Billing is managed directly in the Agilicus Platform and you can setup automatic payments from the Billing Tab. Payments are managed and processed through Stripe, no financial information is stored within the Agilicus platform.

    Billing

    Billing is managed directly in the Agilicus Platform and you can setup automatic payments from the Billing Tab. Payments are managed and processed through Stripe, no financial information is stored within the Agilicus platform.

    Your billing cycle will be 30 days in duration, and will be a function of when you first started using the platform. You may control automatic payment versus invoicing, and the email-address the invoice would go to. Here you may also see previous invoices.

    Within the ‘View/Update Payment Information’ screen (hosted by Stripe) you can see current payment method, add a payment method, and view existing invoices.

    Overall usage metrics (which drive the billing) are shown in the table at the bottom. These are instantaneous values, the invoice is based on the peak within the 30-day time interval.


    Stripe is a 3rd-party payment processor. You can learn more about Stripe by visiting their website.

  • Auto-Create Users From Specific Domain With Google Workplace

    Auto-Create Users From Specific Domain With Google Workplace

    federated-users

    Auto-Create Users From Specific Domain With Google Workplace

    The Agilicus Managed Upstream Providers option of ‘Google’ allows users to sign in with GMail and Google Workplace (G Suite) with zero-configuration. In some circumstances (for example, to enable the use of auto-create locked to a specific domain) you may wish to create your own Google Identity Provider setup.

    Auto-Create Users From Specific Domain With Google Workplace

    b767fe45 image

    The Agilicus Managed Upstream Providers option of ‘Google’ allows users to sign in with GMail and Google Workplace (G Suite) with zero-configuration. In some circumstances (for example, to enable the use of auto-create locked to a specific domain) you may wish to create your own Google Identity Provider setup.

    To do so, we will use the Google Console, create a Credential, OAUth2, Web application, and from there obtain a client-id and client-secret.

    We will then configure the list of acceptable domains which may use it, and cross-configure this information into the Agilicus admin portal.

    There is no general requirement to create your own Credentials in Google: do so if you wish finer-grained control by e.g. restricting source domain, or if you have specific audit requirements.

    For more information see Google’s “Getting Started With Authentication“.

    Navigate to https://console.cloud.google.com/apis/credentials . You may be prompted to enable the API for your organisation.

    268b2668 image
    d408910f image

    Create a new OAUTH2 client of type Web Application.

    Give this “credential” a name. Add a redirect URI of https://auth.ca-1.agilicus.ca/callback

    f1616548 image
    f671b582 image

    At this stage you will be given two facts (client ID, client secret). You will now enter these into the Agilicus Admin portal.

    In the Agilicus Admin portal, add a new Identity Provider of type ‘Other’ (this is a generic OpenID Connect Identity Provider).

    73bf0dd3 image

    Enter a name (your users’ will see this, so e.g. “Agilicus Google Workplace”), the Issuer url (https://accounts.google.com), the Client ID (from above) and the Secret (from above).

    You may wish to enable auto-create on this Identity Provider, in which case authenticated users will be automatically provisioned.

    e5155ea4 image

    At this stage, you may wish to enable “Authorized Domains” in your Google Workplace settings.

    Users may now sign in to the system via this Identity Provider.


  • Resources – Overview, Concepts

    Resources – Overview, Concepts

    90cf7af9 clickonce

    Resources

  • Firewall rules

    Firewall rules

    role-based-access-controls

    Firewall Rules

    Web (HTTP) Firewall Setup

    Firewall Rules

    Identity is “who” a user is.

    Authentication is how a user “proves” their Identity

    Authorisation is “what” a user is allowed to do. In the AnyX platform this is implemented via a set of firewall rules. For web applications, these have many options (method, path, body, who, etc).

    The firewall rules are access via “Resources/Applications/Overview”, and then selecting the individual application, and navigating to the “Security” tab.

    HTTP Rules

    For web applications, HTTP rules allow matching on a set of conditions, and then performing a set of actions.

    The conditions include:

    1. Priority. Rules are evaluated in order until a match occurs
    2. HTTP Path (the part after the host name in e.g. https://hostname/path).
    3. Method (e.g. GET, PUT, POST, DELETE, HEAD, …)
    4. Scope. One of “Assigned to User”, “Anyone”, “Any Known User”, “Any App User” (see Scopes below)

    Methods are as defined in the HTTP standard (GET, PUT, POST, …). For most applications GET/HEAD will mean ‘read’, PUT will mean ‘create’, POST will mean ‘update’, and DELETE will mean remove a record.

    Actions are Allow, Deny (and None, which can be used to disable a rule temporarily, or for debugging with logging).

    Application Roles are defined per application, but often include ‘Self’ (my own records), ‘Owner’ (all, admin), ‘Editor’ (can change but not create/delete), ‘Viewer’ (can read).

    Negated (the rule is inverted in sense, so whatever does *NOT* match).

    Scopes

    The scopes control what ‘type’ of user is matched by this rule. The scopes are:

    1. Assigned to User. The user must have a valid role within this application, and, that role is assigned (see Access/Application Permissions in admin)
    2. Anyone. Literally anyone on the Internet, regardless of who they are (e.g. Anonymous)
    3. Any Known User. Any user who exists in your org as a valid user.
    4. Any App User. Any user who was authenticated by this application (see Authentication/Application Identity. Note this is a rare case).

    GeoIP Firewall

    In some cases you may want to include only, or exclude only, specific countries from using a resource. You may do this by selecting the ISO 3166 country code for each locale, and then selecting IN/NOT_IN and action. The most common action (ALLOW, DENY) would fall-through to the other authorisation rules (ALLOW), or block entirely (DENY) regardless of user.

  • Web Application Security

    Web Application Security

    identity-aware-web-application-firewall

    Web Application Security

    Improve intrinsic web content security of proxied applications.

    Web Application Security

    The Agilicus AnyX Web Application Firewall can be used to apply a set of Content-Security, XSS, CSRF rules to a proxied web application.

    Web Application Security Overview

    There are 3 main areas:

    1. Security Headers. Used to instruct browsers of desired behaviour for miscellaneous items
    2. Content Security Policy. Used to instruct browsers as to what content to allow, and from where.
    3. Cross-Origin Resource Sharing (CORS), used to instruct browsers how to allow this content.

    Security Headers

    Content Security Policy

    Cross-Origin Resource Sharing (CORS)

  • Define Application: Proxy

    Define Application: Proxy

    c5082e11

    Proxy

    The Identity-Aware Web Application Firewall acts as an HTTP-proxy. In doing to, it can inject an identity-flow (authentication on behalf of) as well as rewrite/rework various HTTP constructs to make them accurate relative to an external environment.

    Define Application: Proxy

    The Identity-Aware Web Application Firewall acts as an HTTP-proxy. In doing to, it can inject an identity-flow (authentication on behalf of) as well as rewrite/rework various HTTP constructs to make them accurate relative to an external environment.

    Typically there is no configuration required in this section, however, you may use it to tweak for individual applications as needed.

    Include User Context Headers

    If the ‘Include User Context Headers’ is set, several headers are added to the request, allowing the upstream web server to infer user and role. these include:

    {
      "headers": {
        "Remote-Org-Id": "5kX8JJdQ3CzXXXXXXXX",
        "Remote-User": "user@agilicus.com",
        "Remote-User-Id": "XGMKWs5SXXXXXX",
        "X-Agilicus-External-Id": "-",
        "X-Agilicus-Member-Of": "[\"wiki-editors\"]",
        "X-Gateway-Org": "5kX8JJdQ3CzXXXXXXXX",
        "X-Gateway-Primary-Role": "self",
        "X-Gateway-Roles": "{\"httpbin\":[\"self\"],\"urn:api:agilicus:users\":[\"self\"]}",
        "X-Gateway-Tokenid": "Hwx6vUZPXXXXXXXX",
        "X-Gateway-User": "XGMKWs5SXXXXXX",
        "X-Gateway-User-Email": "user@agilicus.com",
        "X-Roles-Matched": "true",
        "X-Token-Valid": "true"
      }
    }

    HTTP Media Type Rewrite

    It is common for certain body documents to have embedded components linking to the internal name of the host. This could include a JSON search result, showing http://internal instead of https://external.example.com, it could include XML, HTML, CSV, etc.

    In this section, we can add specific Media (MIME) types. If they are set, the contents will be rewritten to match the external coordinates.

    4505be5e image

    HTTP (Host) Names Rewrite

    The internal host may have multiple names. This can occur with e.g. virtual machines (‘intranet’ is also ‘vweb01’) and these names internally might be used interchangeably. In this section we add a set of hosts that, if present, will be rewritten to the external name.

    16c592d0 image

    HTTP Response Header Overrides

    Set Header

    This allows setting an arbitrary header to an arbitrary value.

    Append Header

    This allows appending a value to an existing response header.

    Remove Header

    This will remove a header from the response. It may be used to e.g. remove private internal information or version leakage.

    Remove Match

    This feature allows removing entire header lines matching some criteria. If your response included:

    Host: foobar
    Host: foo

    Then, if we put in ‘Name’: ‘Host’ and value ‘foo’, both lines are removed. If we put in value ‘bar’ only the first line is removed. A regex is allowed here, so we could put in e.g. ‘fo.*’.

    Parameter Rewrite Filter

    This feature allows overwriting specific GET parameters. E.g. if the URL is https://www?foo=bar, you can rewrite this to foo=baz. It also allows deflate (e.g. decompress) and base64-encoded.

    HTTP Request Header Overrides

    The Request Overrides operate in the same fashion as the Response Overrides.

    Proxied Service Configuration

    This field should not be used in normal circumstances. It allows proxying to an external host (e.g. for demonstration purposes).


  • Audit Destinations

    Audit Destinations

    d3c2ef1f undraw delivery address re cjca

    Audit Destinations

    Configure your own private log destinations.

    Audit Destinations

    Four types of auditing information are available:

    1. Authentication: users presenting credentials to obtain an access token
    2. Authorisation: individual transactions with an access token that are checked for allow/deny
    3. Access logs: individual transaction detail information
    4. API access: changes to the state of the system via API

    By default, all records except for those generated by an Agilicus Connector are stored inside the Agilicus cloud. In addition, you may send logs to a webhook (or, in the case of the Connector, a file).

    You may enable records from the Connector to come back to the Agilicus Cloud by enabling ‘Access’ and ‘Authorisation’ check marks in the Audit Destinations screen.

    9ab426ad image

    For each webhook destination, optional authentication information may be passed.

    The intent of the audit destinations to a webhook is to allow the use of an external SIEM or log collector. Messages are sent in JSON format, an example is shown below:

    To test your integration, copy the above text to a file (e.g. logs.json) and use:

    curl -X POST -d@logs.json https://my-webhook:port

  • Administrative Users

    Administrative Users

    Manage

    Administrative Users

    Each Organisation has set of permissions, grouped into categories of:

    • sys-admin — users who can do any global administrative action
    • sys-apps-admin — users who can create and modify the state of applications
    • sys-provisioner-admin —
    • sys-users-admin — users who can add/modify other users

    These groups in turn allow adding other groups (you can create a group called ‘my-admins’, add it to sys-admin, and then add users to it).

    A user may be a member of multiple of the administrative system groups.

  • Signup: Firewall Configuration

    Signup: Firewall Configuration

    cyber-insurance-compliance

    Firewall Configuration

    During the new organisation Signup flow you may find an error as below. This is caused by a corporate network filter (e.g. Palo Alto) which blocks certain encrypted flows.

    Overview

    During the new organisation Signup flow you may find an error as below. This is caused by a corporate network filter (e.g. Palo Alto) which blocks certain encrypted flows.

    You may have firewalls in two locations: between your browser and the Internet (e.g. if you run endpoint protection software, or are using a device not currently on your corporate network), and, between the Agilicus Connector and the Internet.

    Firewall Configuration: End-User Browser to Internet

    bfdb9ad0 image

    In order to use your browser with the Agilicus AnyX platform, whether for signup purposes, or for ongoing usage, you need to be able to navigate to these host names:

    (where YOURDOMAIN is the domain name you will choose during the signup process).. You will know you need these rules if you see errors like below image.

    In addition, your name server (DNS) must be able to resolve:

    • ca-1.agilicus.ca
    • api.agilicus.com
    • www.agilicus.com

    The most common problem observed is that if you navigate to https://auth.agilicus.cloud you get an error implying the connection was RESET. This is typically done by a content-filtering firewall such as Palo Alto blocking “auth.*” as a domain name.

    To resolve, work with your outbound firewall filtering vendor to allow:

    • *.agilicus.com
    • *.agilicus.ca
    • *.agilicus.cloud

    Firewall configuraton: Agilicus Connector to Internet

    The Agilicus Connector makes outbound connections only, on port 443 HTTPS only. It will have 2 outbound TCP connections (for resilience) as well as periodic ones to its API and update server.

    Configure your outbound firewall to allow:

    • www.agilicus.com (upgrades)
    • api.agilicus.com (configuration)
    • agent-server.ca-1.agilicus.ca
    • *.YOURDOMAIN (authentication via auth.YOURDOMAIN)

    If you prefer to use IP (and port) – based rules, you may use as below. Note: it is possible this list will change in the future.

    • 34.95.12.47 (www.agilicus.com)
    • 35.203.36.11 (api.agilicus.com)


  • VNC Desktop

    VNC Desktop

    VNC Desktop

    VNC Desktop

    Access any machine’s display, whether embedded or server, from a browser, from a local client.

    Allow multiple concurrent users, see what each are doing.

    Read-only and read-write access.

    VNC Desktop Overview

    The VNC Desktop feature allows browser-based use of remote graphical-oriented resources. This can include traditional operating systems like Windows, Linux, MacOS, but, also, includes embedded devices such as HMI.

    VNC has very weak intrinsic security (a read-only password, a read-write password, but no username). These passwords are in turn very weakly encrypted (3DES), and, must be 8 characters. As a consequence, it is not safe to use by itself with e.g. port-forwarding.

    Agilicus AnyX adds a Zero Trust layer, with strong identity and modern encryption, making these safe to use remotely.

    Setup

    Assuming you have the VNC Server already running and available, you can create and access a VNC Desktop by:

    0a2da709 image
    1. In the Agilicus Admin interace, ‘Resources/Desktops/New’, select ‘a new VNC remote desktop
    2. Select the connector which is adjacent to the VNC Server
    3. Give this VNC Desktop a name. You will use this in the Profile to select the machine
    4. Select the address (as the connector would see) it of the VNC server. E.g. on the machine running the connector, you should be able to ‘ping’ this hostname. NOTE: if the connector is on the same machine as the VNC server, you may need to ‘enable loopback connections’ in the VNC Server configuration.
    5. Optional. If you wish to have the Profile VNC Web interface auto-sign-in (after you have presented your single-sign-on-credentials) you may enter the read-write (and/or read-only) password of the VNC server. If these are set, users may be forced into a read-only role by permissions later.
    6. Assign permissions to who may use this desktop. If ‘viewer’ is selected, and the read-only password was given above, the user will be auto-signed-in as a read-only user.

    At this stage, you can open https://profile.MYDOMAIN and you should see this VNC resource on Desktops.

    7ad695e6 image
    462a4b9f image
    d6e4fb6b image
    a08bf349 image
    fe55711e image
  • Authentication Issuer – Onsite Identity

    Authentication Issuer – Onsite Identity

    Shadow IT Identity Sprawl

    Authentication Issuer

    Authenticate users in the cloud, using the on-premise identity providers. Make legacy Active Directory serve as modern OpenID Connect.

    Authentication Issuer – Onsite Identity

    In some circumstances, a local, on-premise identity provider is the best source available. The Agilicus Connector facilities, providing a bridge between a local machine acting as an authentication proxy, and a proper OpenID Connect web public interface. The user credentials are encrypted end-to-end, from the user’s browser to the backend.

    Care must be taken when using Onsite Identity. If the connector facilitating is removed, any user with this as a sole identity source will be unable to sign in.

    40bf0ab7 image
  • Moxa UC-8200 Zero-Trust Connector Install

    Moxa UC-8200 Zero-Trust Connector Install

    Moxa UC-8200

    Moxa UC-8200 Zero-Trust Connector Install

    Moxa UC-8200. Agilicus Connector.

    Overview

    The Moxa UC-8200 runs Debian 11 Linux. It is supported out-of-the-box by the Agilicus Connector, using the standard Linux install instructions.

    Once installed, you can remotely connect to the Moxa UC-8200, or, resources on adjacent networks through the Agilicus AnyX platform, regardless of network configuration or firewall settings.

    From the Agilicus Admin web interface, select Resources/Connectors/New. Give the connector a name, and then select the “Linux” tab, paste the resulting command line into a root shell and it will automatically setup and configure.

  • Applications

    Applications

    Web Applications Use

    Applications

    An Application is a HTTP-based (browser or REST/SOAP API) resource. This could be e.g. a wiki, a Human Machine Interface (HMI).

    Agilicus AnyX can handle all the authentication (user sees single-sign-on, no change to your existing web application).

    The Agilicus AnyX firewall can handle fine-grained authorisation (per path, per user, body, URL).

    Background

    Each application will be provisioned with a URL of https://<appname>.<domainname>, and, be available to any user from any browser. A valid certificate will be automatically created (and rotated approximately every 50 days).

    Application can have various methods of authentication (sign-in):

    37d7ce1e image

    To create a new application, select Resources/Applications/New. This will start a guided setup (a ‘stepper’).

    In this first step, you will provide two items:

    1. application name. This must be a valid hostname (a-z, 0-9 and -). Please use all lower-case. Underscores and spaces are not allowed. This will become the URL (https://appname.domain).
    2. A general description. This is free form, it will show to the end users.

    Throughout the steps you will normally see a ‘Next’ or an item in light-grey to open for the next configuration.

    1. None. Open to anyone on the public Internet. This can be suitable for cases where the application has its own internal user management which is sufficiently strong.
    2. Participating. The web application has built in support for OpenID Connect (or SAML), and, initiates the sign-in flow. This is suitable for cases where the application needs valid users that are distinct.
    3. By proxy. The Agilicus AnyX platform becomes an Identity-Aware-Proxy, forcing users to sign-in prior to any access. In this model, no traffic arrives at the web application unless the user is authenticated and has permission. This is a very strong security model.

    New Application (Create/Setup)

    Step 1: Name

    Step 2: Hostname (or Alias)

    9680cddf image

    In this step we decide how to reach this application. In some cases there is a specific, well-defined, already setup name (which DNS points to this cluster).

    Most users will select the first option, in which case there is no additional config.

    If you wish to have a manual hostname, set your DNS server up and point it to the same location as the CNAME you did during the initial system setup.

    Step 3: Data Plane Network Access

    16d92d26 image

    “My application is accessed…”. This governs the data path of how the users reach the application. Most users will select ‘from my site via an onsite connector’, meaning there application is in some private network.

    In some cases, when the application participates with the authentication, you may wish to entirely manage the data network and certificates manually, select ‘over the public Internet’.

    There is now an ‘advanced configuration’ option, “My application uses custom web application firewall settings”. In most cases this is not needed. These options are described below.

    Step 4: Upstream (internal host) Data Plane Network Access

    b769e684 image

    In this step, we configure the internal (in your network) coordinates of the web application. We refer to these as ‘upstream services’.

    “Local hostname/ip”. From the machine running the connector, what would you enter in a browser to reach the internal web site? This could be ‘localhost’ if the connector were running on the web server.

    “Local port”. What port is your web server running on? (typically 80 or 443, could be 8080, 8088).

    “TLS Type”. Is your internal web server setup with SSL/TLS? If so, you might select ‘accessed via TLS”. If it is, and, the certificate is publicly trusted (e.g. issued via Let’s Encrypt or another public certificate provider), select ‘via TLS and verify”.

    In rare cases, an application has multiple components on multiple ports, select ‘add more services’

    Step 5: Authentication

    7bb54d42 image

    Applications fall into three classes:

    1. No authentication (rare), no user checking is done
    2. Participates. Application supports OpenID Connect or SAML and is configured to work with Agilicus AnyX specifically.
    3. Authenticated by Proxy. This is the typical case.

    For “Authenticated by Proxy”, we can optionally set a ‘redirect after signin’, this is used to give the user an initial subpath (e.g. /Profile).

    For the proxy authentication, we now have a initial preset (we can configure later in Define or Access), of how users will use this.

    1. No named users. (any valid random user)
    2. All users in my org. The ‘All-users’ group is given permission.
    3. Named users, single role (this is the most common). A group is created which has access.
    4. Named users, distinct roles. In this mode, there are distinct classes of user (e.g. Editor, Viewer, Manager).
    2e94fc71 image

    At this stage, you can ‘Apply’. The application will start to configure, this takes 30-45 seconds. You may now need to assign permissions (see Access/Application Permissions). Otherwise, open Profile (see left menu, bottom), hit refresh, and you will see a link to the URL.

    (Optional) Custom Web Application Firewall Settings

    1e428847 image

    In some cases manual overrides are needed to parts of the web application firewall. These may be performed during the setup, or, later, tuned with the Define step. The options listed are:

    “common path prefix”. If your application is internally served on a shared web server with other web apps, (e.g. intranet/HR, intranet/Wiki), then you may wish to use the prefix option, rehoming it to root. (e.g. /HR here will mean the user will see http://HR/, and automatically sign in).

    “Is an API”. If the HTTP endpoint is normally used via external web applications, this will setup CORS automatically. You may also fine tune this in the Define.

    “Does not support http/2”. Some applications break when presented with HTTP/2, which is otherwise supported by the Agilicus AnyX proxy. Setting this option will prevent advertising HTTP/2 support.

    “Requires full web application firewall”. This is rarely used, we recommend discussing with Agilicus first. This causes a 2-hop encryption path to be used, with an intervening filter.

    Application hosted on subpath of domain (e.g. https://host/path)

    You may have an application hosted under a subfolder/path on your web server, possibly because it is better than having another server for it. For example: localhost:port/subpath, localhost:port/support etc.

    To enable the subpath hosting for your application,

    1. Go to Resources > Applications > Define and select the application from the drop down at the top of the page
    2. Then in Security (tab) >  Firewall Rules > HTTP Rules, change the / entry under path to your custom subpath (For example,  /subpath)
    3. Under Proxy (tab) > HTTP Rewrites, inside the Common Path Prefix field, enter your custom subpath again (For example,  /subpath)

  • Labels

    Labels

    label-maker

    Group, Hierarchy, Policy

    Users, Resources may have an arbitrary set of text-based labels.

    These labels can be used for a variety of purposes, including showing alternate hierarchy in Profile, viewing filters in alarms, setting downtime, etc.

    Overview

    Labels to Create Profile Folders

    Labels may be used to create arbitrary grouping of resources in Profile. For example, you can create ‘admin’, ‘site-1’, ‘printers’, etc. And then assign ‘site-1’ and ‘printers’ to a printer in site-1. Thus this printer would be in both label-folders ‘site-1’ and ‘printers’, allowing arbitrary tagged grouping.

    To assign a label, add it in the Resources/Overview screen. Labels may be arbitrary in name.

    An additional column ‘Published’ may be used to hide the resource from the label folder in Profile. This may be used if the label is solely for a policy usage.

    In the example image above (‘folders’ is applied to 3 Shares), we can see in profile a new icon, ‘folders’. Inside this folder are 2 items (since we did not select ‘Publish’ for cube-tmp).

    Labels to Match Policies

    Labels, in addition to driving navigation structures, can be used to attach policies such as Multi-Factor Authorisation (distinct of Multi-Factor Authentication). This can allow grouping a set of like resources and attaching policies to them.

  • Agilicus Connector – Export Certificate

    Agilicus Connector – Export Certificate

    Windows Install

    Export Certificate

    Overview

    Applications generate a valid certificate. You can export this certificate for integration with other systems whenever it is issued or rotated. For example, VTScada requires a valid certificate for the server to be enabled with SSL.

    Requirements

    The connector associated with the application invokes a script when it learns about a new certificate.
      – The script must be accessible by the connector (e.g. on the same machine)
      – The script must be executable by the connector
      – You are responsible for ensuring the execution environment for the script

     For example, for the connector to execute a Python script, Python must be installed on the machine, and the machine must be configured to associate .py files with the Python interpreter. You are also responsible for installing any supporting packages used by your script.

    Windows Python Installation

    The Agilicus connector runs as a service. In order for the connector to invoke the Python script, Python must be installed on the local machine for all users. See https://docs.python.org/3/using/windows.html

    Once Python is installed, the connector will look for a script in the directory: C:\Program Files\agilicus\agent\plugins\certificate-exporter.py

    If there is no script found, no export will occur.

    Windows Example Script

    An example script is shown below, which will import the script as a .p12 file and store it into the Local Machine certificates storage.

    import sys
    import json
    import base64
    import tempfile
    import subprocess
    import os
    
    # load the certificate export json from stdin
    # see https://agilicus.com/www/api/certificate-export.schema.json
    cert_obj = json.loads(sys.stdin.readline())
    
    def import_certificate(obj):
        # create a temporary file. It must be closed
        # after write before calling certutil.
        tmp = tempfile.NamedTemporaryFile(delete=False)
        try:
            # retrieve the pkcs12 and base64 decode it
            pkcs12 = base64.b64decode(obj.get("pkcs12_b64"))
    
            # write the pkcs12 to the temporary file
            tmp.write(pkcs12)
            
            # close the file
            tmp.close()
    
            # now import the pkcs12 file into the local machine account
            subprocess.run(
                ["certutil",
                 "-f",
                 "-p",
                 obj.get("pkcs12_password"),
                 "-importpfx",
                 tmp.name,
                 ]
            )
        except Exception as exc:
            print(exc)
            raise exc
        finally:
            # after completion, delete the pkcs12 file
            os.unlink(tmp.name)
    
    import_certificate(cert_obj)

    Programming Interface Details

    The json document includes the PKCS #12-encoded certificate bundle and private key, as well as the pem-encoded certificate and private key, and various pieces of supporting data. To view the full details, consult the json definition for the json schema.

  • Cisco IOx Zero Trust Connector Install

    Cisco IOx Zero Trust Connector Install

    Cisco IR1101 IOx

    Cisco IOx Zero Trust Connector Install

    Cisco IOx. Agilicus Connector.

    Overview

    The Cisco IOx family provides an excellent platform to run the Agilicus Connector. In this example we are working with the Cisco IR1101, suitable for rugged, embedded environments.

    The instructions below were tested on

    Cisco IR1101-K9
    17.11.1a

    Cisco IOx Zero Trust: Cisco Router Setup

    Follow the Cisco instructions on enabling IOx, enabling applications and routing. Some sample config is shown here, but this varies by platform. Key items required:

    1. Clock sync (ntp, GPS)
    2. Ability to reach https://www.agilicus.com/
    3. Ability to reach https://api.agilicus.com/

    Below we have achieved this with NAT but you can also use a bridge.

    interface VirtualPortGroup0
     ip address 192.168.100.1 255.255.255.0
     ip nat inside
    
    interface Vlan1
     ip address 192.168.2.2 255.255.255.0
     ip nat outside
    
    ntp server 0.pool.ntp.org
    
    ip dhcp pool vg0
     network 192.168.100.0 255.255.255.0
     default-router 192.168.100.1
     dns-server 1.1.1.1
    interface VirtualPortGroup0
     ip address 192.168.100.1 255.255.255.0
     ip nat inside
    
    interface Vlan1
     ip address 192.168.2.2 255.255.255.0
     ip nat outside
    
    ntp server 0.pool.ntp.org
    
    ip dhcp pool vg0
     network 192.168.100.0 255.255.255.0
     default-router 192.168.100.1
     dns-server 1.1.1.1
    
    ip name-server 1.1.1.1
    
    iox
    ip default-gateway 192.168.2.1
    
    ip access-list standard IOX_NAT
     10 permit 192.168.100.0 0.0.0.255
    
    ip nat inside source list IOX_NAT interface Vlan1 overload
    ip route 0.0.0.0 0.0.0.0 192.168.2.1

    Cisco IOx Zero Trust: Install

    On this platorm we will use a container-based install. This platform does not support standard container registries, so we will install the layers manually.

    First, download to your local computer the appropriate file for your platform (amd64 or arm64). The IR1101 in our example is arm64.

    5603e8e1 image

    Second, navigate to the IOx web admin, Configuration/Services/IOx.

    From here we will:

    1. Create Application
    2. Upload image (from above)
    3. Set Profile (ram/disk/cpu)
    4. Set networking
    5. Set environment variables (from Agilicus Admin)
    6. Set configuration volume
    7. Activate application
    8. Start application

    at which point the Agilicus connector will be running

    Cisco IOx Zero Trust: Detailed Steps

    Start Application

    Select the Agilicus Connnector and start it.

    (Optional) Diagnose Application

    You can examine the output logs, if needed, via ‘Manage’ and then ‘Log’ and ‘Download’

    (Optional) Diagnose Application Log

    You can examine the output logs, if needed, via ‘Manage’ and then ‘Log’ and ‘Download’

    Check Connector Status

    Within approximately 90 seconds you should see the Connector come online in the Agilicus admin UI.

    c08a1fb8 cisco ir1101 1

    Add New Application

    In the Cisco IOx web admin, select ‘Add New’ application.

    271adbcd cisco ir1101 2

    Upload Image

    Download to your local computer the appropriate file for your platform (amd64 or arm64). The IR1101 in our example is arm64.

    Upload this image to the IOx device.

    Name the Application ‘agilicus’.

    Activate

    Select ‘Activate’

    Copy Setup Configuration

    In the Agilicus Admin UI, create a connector. Install. use the ‘Docker’ instructions.

    Copy the 3 items shown in the image:

    -v agilicus:/etc/agilicus/agent
    -e AGILICUS_CHALLENGE_ID=…
    -e AGILICUS_CHALLENGE_CODE=…

    NOTE: the code times out after 10 minutes. If you copy this, and do not start the container within this time, you can generate a new one by closing and re-open the install dialog.

    Configure Application

    You may optionally configure the resource limits. The Agilicus Connector will typically consume < 256MiB memory, ~150MiB storage, and < 25% of 1 CPU.

    Configure the network to match your overall setup (bridge vs NAT).

    Uncheck ‘auto delete’, paste the command line from the previous step., Select Activate.

    At this stage you have successfully configured the Agilicus Connector on your Cisco IOx device. You may now configure individual services via the Agilicus admin interface.

    Sample things to consider would be SSH to the IOx device, the Web Admin of the IOx device, as well as other onwards resources.

    In our example router, the SSH management interface is 192.168.2.2. I added a SSH resource, named irr1101-ssh, with that as the IP. I was then able to sign in via Agilicus Profile and see the Router CLI.

  • Agilicus Connector – Snap

    Agilicus Connector – Snap

    snapcraft

    Agilicus Connector Snap

    The Agilicus Connector is packaged for Ubuntu Core20 on X86_64 and AARCH64.

    Overview: Agilicus Connector – Snap

    The Agilicus Connector is available as a multi-arch snap (X86_64 and AARCH64/ARM64). It is not currently published to Snapcraft, so it must be side-loaded.

    The installation steps are

    1. Download the snap .
    2. Create a Connector in the Agilicus Admin
    3. Set 2 snap parameters (code, id) as given from the Agilicus Admin

    At this stage the Agilicus Connector should be running and should stay up to date.

    Details

    Download the snap from the Agilicus website (https://www.agilicus.com/www/releases/secure-agent/stable/agilicus-connector_multi.snap). Install it with sudo snap install agilicus-connector_multi.snap --devmode --dangerous. This will make it unconstrained. NOTE: work is underway to restrict and publish.

    In the Agilicus Admin, use Resources/New to create your connector (or Resources/Overview to re-install if you are debugging and iterating). NOTE: if you do uninstall and re-install, remember to delete the stale instance.

    On the Install screen, use the ‘Manual’ instructions. You will copy the challenge-id parameter, and then run sudo snap set agilicus-connector setup.id=XXXXX of it. You will then copy the challenge-code, and run sudo snap set agilicus-connector setup.code=XXXX of it. See the below image.

    At this stage, the Agilicus connector should start automatically. You may see its logs as sudo snap logs -f agilicus-connector

    You should see your Connector transition to ‘Good’. You may also check the statistics on the action menu. A good first service to try is a ‘share’ since it will run entirely within the Snap. You might then try reaching a service on the host running the Agilicus Connector – Snap.

    Notes:

    1. Ensure that the time is synced via NTP on the device running the snap. The cryptography has a ‘not-before’ time that requires proper time sync.
    2. Ensure the device is able to reach www.agilicus.com (34.95.12.47), api.agilicus.com (35.203.36.11) on HTTPS port 443. You may test this with: curl https://www.agilicus.com/ and https://api.agilicus.com/v1/resolve/?name=www.agilicus.com.
    3. If you use your own domain, and run split-horizon DNS, ensure it properly resolves the CNAME.
  • Sub Organisation Issuer

    Sub Organisation Issuer

    sub-org-issuer

    Partitioned Identity Management

    You can now create an issuer for a suborganisation from a parent organisation. Doing so will bring up a new admin/profile endpoint for the suborganisation, at the suborganisation’s subdomain. E.g. admin.suborg.myorg.cloud.

    You can see the motivation for this in “Merging Local Identity With Online Identity

    You can now create an issuer for a suborganisation from a parent organisation. Doing so will bring up a new admin/profile endpoint for the suborganisation, at the suborganisation’s subdomain. E.g. admin.suborg.myorg.cloud.

    You do this from the suborganisations screen:

    9f003e59 image

    By default, the new suborganisation will inherit the authentication policy of its parent, as well as any Managed or Custom identity sources you have configured in the issuer being used for the parent. You will likely want to verify the customer identity sources to ensure that they have added your new issuer to their list of redirects.

    As long as you had permission to configure the suborganisation prior to enabling the new issuer on it, you can switch to it via the org choose as always. However, now that there is an issuer on that suborganisation, you will be able to customize it like you would its parent: you can create new sources of identity, customize the theme, set a new policy and so on.

    To create a policy distinct from the parent organisation’s, simply choose one of the preset policy options from the Authentication Policy menu.

    589f8724 image
  • Agilicus Connector – GL-MT3000 (Beryl AX)

    Agilicus Connector – GL-MT3000 (Beryl AX)

    GL-MT3000 (Beryl AX)

    Agilicus Connector – GL-MT3000 (Beryl AX)

    GL-MT3000 (Beryl AX) Background

    The GL-MT3000 (Beryl AX) has 1 x Gigabit Ethernet, 1 x 2.5 Gigabit Ethernet, 512MiB of RAM, and 256MiB of eMMC storage as well as WiFi 802.11AX. It is an excellent portable platform for demonstrations and field service to run the Agilicus Connector, supporting Cellular (via LTE), WiFI, Ethernet at a low cost point and small form factor.

    Installing Stock OpenWRT

    You may choose to run the Agilicus Connector on the GL-MT3000 (by using the advanced interface, and running the same commands as below to install ‘curl’, ‘ttyd’, and then the Agilicus Connector. Agilicus recommends replacing GL-iNet custom OpenWRT with the stock one, both for security, as well as compatibility and support.

    Connect your laptop to the ‘LAN’ port (or WiFi if you prefer). Sign in to the web interface at http://192.168.8.1/. Navigate to the ‘Advanced settings’, which will log you in to Luci. Download the stock firmware (https://openwrt.org/toh/gl.inet/gl-mt3000), specifically the ‘Firmware OpenWRT Upgrade’ target , and then install via the ‘Backup/Flash Firmware’.

    05f73aed image
    86cbe61a image
    0db73dda image

    At this stage you are running Stock OpenWRT with its enormous ecosystem of tools, and its very simple to use web interface. You may open http://192.168.1.1/ and do any initial setup.

    Agilicus Connector Install

    To install the Agilicus connector, first we install the pre-requisite curl. we will also install a web terminal (ttyd).

    67e1f708 image
    692e674c image
    552ecd8e image

    At this stage, we can install the Agilicus connector. From the Agilicus admin web interface, select ‘Resources/New/Connector’. Copy the Linux command line, paste it into the Services/Terminal on the GL-MT3000. It will complete automatically, no further configuration is needed.

    f1a95c65 image
    9a38186c image
    89c6d94d image

    (Optional) Sample Configuration: Connect to Local HTTP (OpenWRT LuCI)

    This walk through shows an example of how, once the connector is installed (as per above), configuration of an HTTP interface. Once these are configured you could use the firewall to disable all external access. The high level steps are:

    1. Create Web Resource (Agilicus Admin)
    2. Assign Web Resource Permission (Agilicus Admin)
    3. Open Web Interface to NanoPi (Agilicus Profile or direct)
    80554db0 image

    OK, let’s get started. This will take approximately 2 minutes.

    Create a new application. Give it a name (which must be valid as a hostname in format). You will later be accessing this as https://NAME.DOMAIN/. You might consider ‘gl-mt3000’ as a name.

    dc047beb image

    You may, if you wish, have a well-known alias to this new web interface. This is more commonly done with very public ones (e.g. a Wiki or Timesheet system). Leave it as default and the Agilicus AnyX will create the hostname for you.

    afafc5e5 image

    Select the connector from the previous step.

    f9075bc3 image

    The connector has to know where to send the request (it is a proxy). The ‘upstream’ in this case is the GL-MT3000 itself, e.g. localhost port 80.

    b1a2f5be image

    For a bit of additional security we can tie the ‘logout’ URL of the GL-MT3000 web interface to the Agilicus AnyX logout by copying in the URL of the logout. This is optional.

    We also suggest that named users with a single role, configured later, for this sample. Normally you would create a group, e.g. ‘Web Admins’ and assign users to it.

    At this stage we are done, select ‘Apply’.

    4bd7f6d0 image

    Now we will assign ourselves permission to use this new web resource.

    7de48b4f image

    To make the profile a bit more ‘fun’ we can now assign a logo (an icon) to the launch of this web interface. In this ‘define’ section we could also refine the Web Application Firewall rules etc.

    43727b23 image

    Any image file (we suggest about 512×512) is suitable for a logo.

    At this stage we are done. We have:

    1. created and installed a connector on this GL-MT3000
    2. created a Web resource (to the NanoPi itself)

    We can now test our work. Open https://profile.YOURDOMAIN/

    ccd9d640 image

    Once you have signed in, you will see an icon for the new web resource, if you click it, a new browser tab will open. Observe the URL (https://NAME.DOMAIN). You can use this directly without profile if you wish. If you sign in, you will see the GL-MT3000 web interface directly. Now try it from a different network (e.g. your mobile phone, disable WiFi). Observe you can still connect. Now try with an unprivileged user (e.g. a different Gmail account), observe you cannot sign in.

    The ‘profile’ interface acts as a launch pad for the end-user. It will act as a Progressive Web Application (e.g. ‘add to homescreen’ on your mobile), giving you a single launch icon.

    You may also use the resources it points to directly: it is your choice.

    50b7155e image
    d7026aad image

    We can test the SSH access. From profile, select the resource we created earlier.

    We will see a ‘login’ dialog appear, enter the username (root) and password to the GL-MT3000.

    At this stage, we should see an SSH terminal.

    From here, consider using the ‘Launcher’ install feature of profile, add the Browser Extension. You will now see an entry on your start menu for this SSH, opening the native client (e.g. if you have Putty or OpenSSH installed).

    Similarly to the Web Resource, only users with permission are able to sign in. You may also choose to enable multi-factor authentication on your user and observe how this functions with the Web..

  • Agilicus VAR and Supporting Companies

    Agilicus VAR and Supporting Companies

    Agilicus VAR and Supporting Companies

    Agilicus VAR and Supporting Companies

    Agilicus AnyX is designed to be nested multi-tenant, meaning Organisations can have Organisations that can have Organisations.

    This in turn allows one company to support other companies.

    New Setup

    You can setup your customer using Organisation/New. You will need a DNS wildcard CNAME setup (*.theirdomain). See CNAME + DOMAIN: Theory of Operation for more information.

    9f6ac5f0 image

    Pick any name you wish for your customer. You will see this in the invoice information.

    2134656d image

    Now enter the DNS name you have chosen. This should be setup as a wildcard CNAME pointing to Agilicus (e.g. *.THISDOMAIN -> ca-1.agilicus.ca).

    8eb8cb27 image

    At this stage hit ‘Apply’ and the new organisation should be setup in about 60-90 seconds.

    Billing, Trial Management

    By default, each new setup has a 25-day trial. You can see the trial dates and usage volumes on the Organisation/Billing page. There will be one row per customer.

    37705c45 image
  • Agilicus Connector High Availability

    Agilicus Connector High Availability

    Moxa UC-8200

    Agilicus Connector High Availability

    Multiple active-active connectors on multiple devices

    Overview

    The Agilicus Connector can be installed in a high-availability mode. In this mode, multiple copies of the connector will concurrently run. Each connector which is up and healthy will share in some of the network traffic. Encryption keys are shared across the connectors in such a way that they are still in the customer’s sole custody.

    NOTE

    The Agilicus Connector does not support High Availability if a Share is present. As a work-around, either create a Connector managing all resources other than Shares, or, use the Windows Cluster approach which does support a Share.

    The installation instructions for the first connector in a High Availability set are the same, and, for each subsequent one, similar.

    Installation

    Installation is simple.

    1. Create and install the first instance on a machine
    2. Install subsequent instances (up to 4) on other machines

    Pre-requisites:

    1. One connector must be up for a new one to be added
    2. All connectors must be able to reach the same network resources.

    Initial (First) Connector in High Availability Set

    The installation instructions for the first connector in a high availability set are the same as for non high-availability.

    d5613534 image
    0044ebe9 image
    dd20cb32 image

    At this stage, the first connector is installed. Ensure it transitions to “GOOD” since it must be up and running to join the other connectors to the cluster.

    Adding High Availability Peers (Subsequent Connectors)

    To add additional high-availability peers, simply use the ‘Actions/Install Connector’ option on the first instance we created above.

    7614dcb8 image
    04ec249b image

    At this stage we are done, and there are two connectors running in High Availability mode. Note the slight difference in the output of the installation at the end (“Joining existing cluster. This will fail if another connector in this cluster is not online“)

    INFO[2024-04-01T11:55:38-04:00] Starting connector - version v0.246.9
    INFO[2024-04-01T11:55:39-04:00] Check if the agilicus connector is already running as a service. If so stop it
    INFO[2024-04-01T11:55:39-04:00] Create file /usr/bin/agilicus-agent-wrapper.sh
    INFO[2024-04-01T11:55:39-04:00] Create file /etc/systemd/system/agilicus-agent.service
    INFO[2024-04-01T11:55:39-04:00] Will install to /agilicus-agent.service -> {/etc/systemd/system/agilicus-agent.service -r--r--r-- 0x14cf980}
    INFO[2024-04-01T11:55:39-04:00] Will install to /agilicus-agent-wrapper.sh -> {/usr/bin/agilicus-agent-wrapper.sh -rwxr-xr-x <nil>}
    INFO[2024-04-01T11:55:39-04:00] Create a directory at /opt/agilicus/agent/tufmetadata/latest
    INFO[2024-04-01T11:55:39-04:00] Create a directory at /opt/agilicus/agent/tufmetadata/stable
    INFO[2024-04-01T11:55:40-04:00] Create a user and group named Agilicus to run the agilicus-agent service
    INFO[2024-04-01T11:55:40-04:00] Copy executable to /opt/agilicus/agent
    INFO[2024-04-01T11:55:40-04:00] Set permissions to Agilicus on /opt/agilicus/agent
    INFO[2024-04-01T11:55:40-04:00] Create symlink from /usr/bin/agilicus-agent to /opt/agilicus/agent/agilicus-agent
    INFO[2024-04-01T11:55:41-04:00] creating connector instance
    INFO[2024-04-01T11:55:41-04:00] Join a connector cluster
    INFO[2024-04-01T11:55:41-04:00] Joining existing cluster. This will fail if another connector in this cluster is not online
    INFO[2024-04-01T11:56:01-04:00] Start agilicus-agent service