Storage-Publiclink Service Configuration

Introduction

The Infinite Scale Storage-Publiclink service

Default Values

  • Storage-Publiclink listens on port 9175 by default.

Brute Force Protection

Brute force protection prevents access to public links if incorrect passwords are entered. Its implementation is very similar to that of a rate limiter, but it takes into account only incorrect password attempts.

This feature:

  • Is enabled by default with the standard settings.
    To disable the feature, set the relevant configuration values to 0.

  • If enabled, brute force protection uses a configurable store, see section Storing. No additional configuration is required if the global configuration (OCIS_) is used alongside the other default store settings.

By default, you’re allowed a maximum of 5 failed attempts in 1 hour:

  • STORAGE_PUBLICLINK_BRUTEFORCE_TIMEGAP=1h

  • STORAGE_PUBLICLINK_BRUTEFORCE_MAXATTEMPTS=5

You can adjust these values as you wish to define the failure rate threshold.

  • If a public link is blocked by brute force protection, it will be blocked for all users, regardless of whether an attempt has been successful in the meantime.

  • If the failure rate threshold is exceeded, the public link will be blocked until such rate goes below the threshold.

    • This means that it will remain blocked for an undefined time: a couple of seconds in the best case, or up to the setting of STORAGE_PUBLICLINK_BRUTEFORCE_TIMEGAP in the worst case.

    • After blocking, each new unsuccessful attempt retriggers the timer.

Storing

The storage-publiclink service can use a configured store via the global OCIS_PERSISTENT_STORE environment variable.

Note that for each global environment variable, an independent service-based one might be available additionally. For precedences see Environment Variable Notes. Check the configuration section below. Supported stores are:

Store Type Description

memory

Basic in-memory store. Will not survive a restart.
Usually the default for caches. See the store environment variable for which one is used.

nats-js-kv

Stores data using key-value-store feature of NATS JetStream.
Usually the default for stores, see the store environment variable for which one is used.

redis-sentinel

Stores data in a configured Redis Sentinel cluster.

noop

Stores nothing. Useful for testing. Not recommended in production environments.

The storage-publiclink service can only be scaled if not using the memory store and the stores are configured identically over all instances!
If you have used one of the deprecated stores of a former version, you should reconfigure to use one of the supported ones as the deprecated stores will be removed in a later version.
Store specific notes
  • When using redis-sentinel:
    The Redis master to use is configured via e.g. OCIS_PERSISTENT_STORE_NODES in the form of <sentinel-host>:<sentinel-port>/<redis-master> like 10.10.0.200:26379/mymaster.

  • When using nats-js-kv:

    • It is recommended to set OCIS_PERSISTENT_STORE_NODES to the same value as OCIS_EVENTS_ENDPOINT. That way the cache uses the same nats instance as the event bus. See the Event Bus Configuration for more details.

    • Authentication can be added, if configured, via OCIS_CACHE_AUTH_USERNAME and OCIS_CACHE_AUTH_PASSWORD.

    • It is possible to set OCIS_CACHE_DISABLE_PERSISTENCE to instruct nats to not persist cache data on disc.

Note that the storage-publiclink service does not use the event bus, but other services like the userlog service do.

Configuration

Environment Variables

The storage-publiclink service is configured via the following environment variables. Read the Environment Variable Types documentation for important details. Column IV shows with which release the environment variable has been introduced.

  • master

Environment variables for the storage-publiclink service
Name IV Type Default Value Description

OCIS_TRACING_ENABLED
STORAGE_PUBLICLINK_TRACING_ENABLED

pre5.0

bool

false

Activates tracing.

OCIS_TRACING_TYPE
STORAGE_PUBLICLINK_TRACING_TYPE

pre5.0

string

The type of tracing. Defaults to '', which is the same as 'jaeger'. Allowed tracing types are 'jaeger', 'otlp' and '' as of now.

OCIS_TRACING_ENDPOINT
STORAGE_PUBLICLINK_TRACING_ENDPOINT

pre5.0

string

The endpoint of the tracing agent.

OCIS_TRACING_COLLECTOR
STORAGE_PUBLICLINK_TRACING_COLLECTOR

pre5.0

string

The HTTP endpoint for sending spans directly to a collector, i.e. http://jaeger-collector:14268/api/traces. Only used if the tracing endpoint is unset.

OCIS_LOG_LEVEL
STORAGE_PUBLICLINK_LOG_LEVEL

pre5.0

string

The log level. Valid values are: 'panic', 'fatal', 'error', 'warn', 'info', 'debug', 'trace'.

OCIS_LOG_PRETTY
STORAGE_PUBLICLINK_LOG_PRETTY

pre5.0

bool

false

Activates pretty log output.

OCIS_LOG_COLOR
STORAGE_PUBLICLINK_LOG_COLOR

pre5.0

bool

false

Activates colorized log output.

OCIS_LOG_FILE
STORAGE_PUBLICLINK_LOG_FILE

pre5.0

string

The path to the log file. Activates logging to this file if set.

STORAGE_PUBLICLINK_DEBUG_ADDR

pre5.0

string

127.0.0.1:9179

Bind address of the debug server, where metrics, health, config and debug endpoints will be exposed.

STORAGE_PUBLICLINK_DEBUG_TOKEN

pre5.0

string

Token to secure the metrics endpoint.

STORAGE_PUBLICLINK_DEBUG_PPROF

pre5.0

bool

false

Enables pprof, which can be used for profiling.

STORAGE_PUBLICLINK_DEBUG_ZPAGES

pre5.0

bool

false

Enables zpages, which can be used for collecting and viewing in-memory traces.

STORAGE_PUBLICLINK_GRPC_ADDR

pre5.0

string

127.0.0.1:9178

The bind address of the GRPC service.

OCIS_GRPC_PROTOCOL
STORAGE_PUBLICLINK_GRPC_PROTOCOL

pre5.0

string

tcp

The transport protocol of the GRPC service.

OCIS_JWT_SECRET
STORAGE_PUBLICLINK_JWT_SECRET

pre5.0

string

The secret to mint and validate jwt tokens.

OCIS_REVA_GATEWAY

pre5.0

string

com.owncloud.api.gateway

The CS3 gateway endpoint.

OCIS_GRPC_CLIENT_TLS_MODE

pre5.0

string

TLS mode for grpc connection to the go-micro based grpc services. Possible values are 'off', 'insecure' and 'on'. 'off': disables transport security for the clients. 'insecure' allows using transport security, but disables certificate verification (to be used with the autogenerated self-signed certificates). 'on' enables transport security, including server certificate verification.

OCIS_GRPC_CLIENT_TLS_CACERT

pre5.0

string

Path/File name for the root CA certificate (in PEM format) used to validate TLS server certificates of the go-micro based grpc services.

STORAGE_PUBLICLINK_BRUTEFORCE_TIMEGAP

8.0.0

Duration

1h0m0s

The duration of the time gap computed for the brute force protection.

STORAGE_PUBLICLINK_BRUTEFORCE_MAXATTEMPTS

8.0.0

int

5

The maximum number of failed attempts allowed in the time gap defined in STORAGE_PUBLICLINK_BRUTEFORCE_TIMEGAP.

OCIS_PERSISTENT_STORE
STORAGE_PUBLICLINK_STORE_STORE

8.0.0

string

nats-js-kv

The type of the store. Supported values are: 'memory', 'nats-js-kv', 'redis-sentinel', 'noop'. See the text description for details.

OCIS_PERSISTENT_STORE_NODES
STORAGE_PUBLICLINK_STORE_NODES

8.0.0

[]string

[127.0.0.1:9233]

A list of nodes to access the configured store. This has no effect when 'memory' store is configured. Note that the behaviour how nodes are used is dependent on the library of the configured store. See the Environment Variable Types description for more details.

STORAGE_PUBLICLINK_STORE_DATABASE

8.0.0

string

storage-publiclink

The database name the configured store should use.

STORAGE_PUBLICLINK_STORE_TABLE

8.0.0

string

brute-force-protection

The database table the store should use.

OCIS_PERSISTENT_STORE_AUTH_USERNAME
STORAGE_PUBLICLINK_STORE_AUTH_USERNAME

8.0.0

string

The username to authenticate with the store. Only applies when store type 'nats-js-kv' is configured.

OCIS_PERSISTENT_STORE_AUTH_PASSWORD
STORAGE_PUBLICLINK_STORE_AUTH_PASSWORD

8.0.0

string

The password to authenticate with the store. Only applies when store type 'nats-js-kv' is configured.

STORAGE_PUBLICLINK_SKIP_USER_GROUPS_IN_TOKEN

pre5.0

bool

false

Disables the loading of user’s group memberships from the reva access token.

STORAGE_PUBLICLINK_STORAGE_PROVIDER_MOUNT_ID

pre5.0

string

7993447f-687f-490d-875c-ac95e89a62a4

Mount ID of this storage. Admins can set the ID for the storage in this config option manually which is then used to reference the storage. Any reasonable long string is possible, preferably this would be an UUIDv4 format.

YAML Example

  • master

# Autogenerated
# Filename: storage-publiclink-config-example.yaml

tracing:
  enabled: false
  type: ""
  endpoint: ""
  collector: ""
log:
  level: ""
  pretty: false
  color: false
  file: ""
debug:
  addr: 127.0.0.1:9179
  token: ""
  pprof: false
  zpages: false
grpc:
  addr: 127.0.0.1:9178
  tls: null
  protocol: tcp
token_manager:
  jwt_secret: ""
reva:
  address: com.owncloud.api.gateway
  tls:
    mode: ""
    cacert: ""
brute_force:
  time_gap: 1h0m0s
  max_attempts: 5
store:
  store: nats-js-kv
  nodes:
  - 127.0.0.1:9233
  database: storage-publiclink
  table: brute-force-protection
  username: ""
  password: ""
skip_user_groups_in_token: false
storage_provider:
  mount_id: 7993447f-687f-490d-875c-ac95e89a62a4