Firewall rules:
Access control can be role-based with a determination of the
identity of a caller based on what the caller has or what the caller knows to
authenticate and authorize the caller and then determining the permissions based
on the associated role. While this can be an elaborate mechanism, some simple
criteria can suffice to determine admission control. The difference between the
two is clear when the system does not want to provide any further information
on the failures of the calls including whether a second chance or a retry is
permitted. The behavior is at par with rate limits against calls to a resource,
so the behavior is expected for API calls. The two mechanisms can even be
complimentary to each other.
An allowlist allows access to those in the list but does not
specify any behavior for those that are not in the list. That is why another
list is required to articulate who must be denied. The addition of a single
entity on an allowlist implicitly adds all others to the deny list, so some
systems go the extra length of automatically adding a deny all whenever an
allowlist entry is added. These complimentary
lists must be made mutually exclusive and with a priority for allow and a catch
all as deny.
An allowlist is maintained across various types of clients
to the resource. Everyone must opt into the whitelist, or the system must
enforce it, otherwise the allowlist simply means nothing. It is also harder to
enforce when the system does not actively monitor or make use of the allowlist,
and they are understood and enforced outside the system by third party.
Inclusion of an allowlist or a denylist is sometimes
considered to be an antipattern, especially, when the system does not need to
provide admission control and can scale arbitrarily to any load without
affecting other callers. When there is possibility of denial of service to
others by the calls of a few specific clients or bots, then these lists can be
justified. If there are many criteria by which allow or deny must be decided,
then the lists don’t suffice and a fully developed classifier to fully
encapsulate the decision-making ability and to interpret the properties of the callers
might be justified. The convention for evaluating rules in a classifier is to
evaluate them one by one and in program order. The processing can stop at any
rule or falls through the rest of the rules. The rules are evaluated as if
there was an ‘or’ condition between the previous and the current. The logic, on
the other hand, inside a single rule can be complex involving both the ‘or’ and
‘and’ logical operators.
Often allowlists and denylists can become part of a rule and
the system stores and processes these rules. The expressions involved in a rule
can be evaluated as a tree if it were not restricted to a flat sequence of
first-level predicates. The evaluation of an expression tree is recursive and might
require the plan to be compiled and saved so that they are not repeatedly
prepared for matching against the criteria of a caller. The way the regular
expressions are compiled before matching speaks to how the classifier must
match the incoming criteria.
No comments:
Post a Comment