Do not accept requests signed by untrusted keys #926
Labels
No labels
P0
P1
P2
P3
badger
frostfs-adm
frostfs-cli
frostfs-ir
frostfs-lens
frostfs-node
good first issue
triage
Infrastructure
blocked
bug
config
discussion
documentation
duplicate
enhancement
go
help wanted
internal
invalid
kludge
observability
perfomance
question
refactoring
wontfix
No project
No assignees
3 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: TrueCloudLab/frostfs-node#926
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Is your feature request related to a problem? Please describe.
With FrostFS ID contract rework, it is possible to keep there a list of storage users with associated keys and claims. In private networks, it can be used to organize access control for data-path users, managed by some soft of IAM. In public networks, contract can be controlled by Inner Ring by accepting users after GAS deposit.
In these cases, one can't access storage by creating random wallet with
neo-go wallet init
command. There is also a case when access is revoked by IAM or Inner Ring: delete or temporary deactivate user.Describe the solution you'd like
Storage may check FrostFS ID contract during request validation and deny all request signed by non-existing subject.
Describe alternatives you've considered
Keep revocation list in the contract: it works for access restriction but does not solve issue with access providing.
Additional context
This approach is implemented in S3 Gateway, request middleware checks whether access token object is created by valid key from FrostFS ID contract: link.
/cc @realloc
I understand why we might want to restrict e.g.
Container.Create
operations.But what about sharing an object with the world? Do all readers need to belong to the frostfsid?
That's an interesting question. In my opinion, all object operations should be managed by policies / ACLs. But I admit this may not be suitable for all environments, including strictly private storage networks. Let's investigate what cases are valid for FrostFS.
You can allow reading object to everyone with policies/ACL
However, this breaks if we introduce additional check for the request signer, in effect we restrict "the world" to the "people registered in the frostfsid".
Using a rules engine to control access seems like a beneficial approach to me. In a public network, this tool can effectively regulate access to non-public or restricted namespaces, for example.