Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

pgwire: migrate auth/conn logs to notable events #57839

Merged
merged 4 commits into from
Jan 8, 2021

Commits on Jan 8, 2021

  1. util/log: properly parse entry tags when they contain IPv6 addrs

    The "crdb-v1" format is brittle and certainly not designed to be
    unambiguous and reliably parseable. Nevertheless, we can do a little
    bit more to allow IPv6 addresses in logging tags, to enable parsing
    the subset of messages that's needed for an authentication log.
    
    Release note: None
    knz committed Jan 8, 2021
    Configuration menu
    Copy the full SHA
    e187644 View commit details
    Browse the repository at this point in the history
  2. util/log: Fix FetchEntriesFromFiles when multiple file groups match

    Prior to this patch, when `FetchEntriesFromFiles` was fetching entries
    from multiple file groups (previously known as "secondary loggers"),
    it mistakenly stopped after processing entries from just one logger.
    
    This patch fixes it.
    
    Note: this API is deprecated and should be replaced by something that
    knows about file groups.
    
    Release note: None
    knz committed Jan 8, 2021
    Configuration menu
    Copy the full SHA
    976ea86 View commit details
    Browse the repository at this point in the history
  3. pgwire: make it possible for a SQL proxy to override the client addr

    Release note (security update): When using a SQL proxy, in the default
    configuration CockroachDB only knows about the network address of the
    proxy. That *peer* address is then used for logging, authentication
    rules, etc. This is undesirable, as security logging and authentication
    rules need to operate on the actual (final) client address instead.
    
    CockroachDB can now be configured to solve this problem (conf
    mechanism detailed below).
    
    When so configured, a SQL proxy can inform the CockroachDB server of
    the real address of the client via a server status parameter called
    `crdb:remote_addr`. The value must be the IP address of the client,
    followed by a colon, followed by the port number, using the standard
    Go syntax (e.g. `11.22.33.44:5566` for IPv4, `[11:22::33]:4455` for
    IPv6). When provided, this value overrides the SQL proxy's address
    for logging and authentication purposes.
    
    In any case, the original peer address is also logged alongside
    the client address (overridden or not), via the new logging tag `peer`.
    
    Security considerations:
    
    - enabling this feature allows the peer to spoof its address wrt
      authentication and thus bypass authentication rules that would
      otherwise apply to its address, which can introduce a serious security
      vulnerability if the peer is not trusted. This is why this feature is
      not enabled by default, and must only be enabled when using a trusted
      SQL proxy.
    
    - this feature should only be used with SQL proxies which actively
      scrub a `crdb:remote_addr` parameter received by a remote client,
      and replaces it by its own. If the proxy mistakenly forwards
      the  parameter  as provided by the client, it opens the door
      to the aforementioned security vulnerability.
    
    - care must be taken in HBA rules: TLS client cert validation, if
      requested by a rule, is still performed using the certificate
      presented by the proxy, not that presented by the client.
      This means that this new feature is not sufficient to forward
      TLS client cert authn through a proxy. (If TLS client cert authn
      is required, it must be performed by the proxy directly.)
    
    - care must be taken in HBA rules: the 'protocol' field (first column)
      continues to apply to the connection type between CockroachDB and the
      proxy, not between the proxy and the client. Only the 4th column
      (the CIDR pattern) is matched against the proxy-provided remote
      address override.
    
      Therefore, it is not possible to apply different rules to different
      client address when proxying TCP connections via a unix socket,
      because HBA rules for unix connections don't use the address column.
    
      Also when proxying client SSL connections via a non-SSL proxy
      connection, or proxying client non-SSL connections via a SSL proxy
      connection, care must be taken to configure address-based rule
      matching using the proper connection type. A reliable way
      to bypass this complexity is to only use the `host` connection
      type which applies equally to SSL and non-SSL connections.
    
    As of this implementation, the feature is enabled using the
    non-documented environment variable
    `COCKROACH_TRUST_CLIENT_PROVIDED_SQL_REMOTE_ADDR`. The use of an env
    var is a stop-gap so that this feature can be used in CC SQL pods
    which do not have access to cluster settings. The env var will be
    eventually removed and replaced by another mechanism.
    knz committed Jan 8, 2021
    Configuration menu
    Copy the full SHA
    ca3ea6b View commit details
    Browse the repository at this point in the history
  4. pgwire: migrate the conn/auth log to notable events

    Release note (backward-incompatible change): The connection and
    authentication logging enabled by the cluster settings
    `server.auth_log.sql_connections.enabled` and
    `server.auth_log.sql_sessions.enabled` was previously using a text
    format which was hard to parse and integrate with external monitoring
    tools. This has been changed to use the standard notable event
    mechanism, with standardized payloads. The output format is now
    structured; see its reference documentation for details about
    the supported event types and payloads.
    knz committed Jan 8, 2021
    Configuration menu
    Copy the full SHA
    1b70424 View commit details
    Browse the repository at this point in the history