[
https://issues.apache.org/jira/browse/HDDS-4944?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17318220#comment-17318220
]
Prashant Pogde edited comment on HDDS-4944 at 4/10/21, 12:47 AM:
-----------------------------------------------------------------
Thank you [~pifta] for comments. There are lot of questions here and hence the
answer would be lengthy :) please find answers inline
> A few problems that I see:
- > according to requirement 2/h/v. tenant admins should be able to see modify
and delete their tenant's users' data. This implies > possibly unwanted cross
tenant access for tenant admins in tenants where there is a user who accesses
an other tenant's > >resources
I think this is misunderstood here. Tenant Admins are restricted to their
tenancies only. They can not access any other tenants bucket/keys/users etc by
default. For example, Tenant Admin "A" can not access any of the resources in
Tenant "B" by default.
A cross Tenancy access authorization is given *explicitly with full awareness
of consequences by the corresponding tenant admins.* E.g. a Tenant Admin "A"
can allow access to a specific bucket "A/b1" to Tenant user "B/u1" by setting
up a bucket policy for "A/b1". There are no unwanted accesses here. Also just
because Tenant user "B/u1" has access to bucket "A/b1", it does not give
automatic access by "B/Admin" to bucket "A/b1".
>> if a tenant admin can allow access for a user in an other tenant, that would
>> mean that a tenant admin can access an other tenant's >> user object(s)
No this is not possible like explained above. A tenant admin gets superuser
privileges only within his tenancy. Not in another tenancy.
>> if a user from tenant a can have write access to tenant b, then tenant b QoS
>> quotas will be affected by a user in tenant a, also tenant
>> a quotas should aggregate usage of the user in tenant b which makes
>> enforcement and calculation of these way too heavy, or very >> limited and
>> exploitable
A typical use case would be, allowing Tenant user "B/U1", temporary read access
to a bucket "A/b1" owned by tenant "A". And such a policy would be created by
Tenant Admin "A" because they are the owners for all resources consumed in
Tenancy "A". Now, Its a very possible use case, if Tenant A admin wants to give
write access to user Tenant B/U1 in A's bucketNamespace. But this will be
explicitly setup by "A" and "A"'s admin would be aware of quota consequences.
The proposal actually speaks of quota feature for both BucketNamsepace as well
as AccountNamespace. So for "A", its possible to see the
A) bucketNamespace Usage \{regardless of who(users) wrote to the buckets and
who the owner for the keys is}. Given the fact that we are leveraging "Volumes"
to represent bucketNamespace, this is as simple as checking Volume usage and
comparing it against quota set on the volumes.
B) AccountNamespace Usage \{regardless of where or which bucketNamespaces the
keys were created in}. This could be as simple as aggregating the resources
usage for each user that belongs to the AccountNamespace. "A", also comparing
such a usage against any AccountNamespace quota.
Any such usage aggregation/quota enforcement can be done online or lazily as
part of recon task.The proposal does not talk about specific implementation but
a mechanism to address the possible use cases.
>> it is a problem to figure out how to isolate comfortably the access policies
>> and tie it to a user, when the user exists in one tenant
>> only, but is has to be harmonized with general policies in the other tenant,
>> not to mention groups/roles associated to the user that
>> might exists just in one tenant, and does not have a real meaning in the
>> other
I am not sure I get the question here. Can you please rephrase ? Users are
globally visible just like active directory where you can see users across
different departments within an organization.
>> applying different password policies is really complex, especially if user
>> lifecycle events apply to tenant users differently tenant by
>> tenant and has different enforcement rules... (what happens if one tenant
>> uses kerberos auth, and does not care much about aws
>> keys, while the other uses aws style access exclusively... who can
>> administer this for the user, where the user will configure the
>> different access patterns? etc.)
I think this is misunderstood. This Multitenancy proposal does not talk about
different password policies for different tenants or any such thing here. User
Authentication is independent of Multi-Tenancy. A user is authenticated based
on the credentials they present to Ozone and it should not have anything to do
with Multi-tenenacy.
> I would like to clear one question related to super-admins, I believe we
> should explicitly declare that these type of admins should >
> not have access to any tenant data on their own, but are just have the
> ability to administer tenant's, tenant admins, and QoS limit
> enforcements on tenants, and can see the list of tenants the QoS usage
> statistics of tenants, and maybe the list of tenant users, but
> they should not have access to tenant's data/metadata.
The proposed system here achieves AccessControl with the means of
"bucket/Volume" policies which will be either default system created or
explicitly created by the Users and Tenant-Admins. It is always possible to add
"Allow/Deny" policies based on the use cases.
>> Also I think it would be beneficial to make it clear that we think about the
>> volumes as the abstraction provides bucket namespace
>> isolation, and we do not want to develop an other abstraction on top of it,
>> though for ease of use we might introduce aliases that
>> reflect multi-tenancy terminology better.
I think it is not a good idea to introduce abstractions that conflict with
generic industry understating. As an example, we have "Containers" and
explaining this abstraction to anyone who is not in Ozone developer community
has been a challenge. The problem is even after you explain/force and folks
understand it for a while, they go back their original notions of these
terminologies after a while.
"Tenant" is a well known industrywide abstraction to isolate resource in any
system and, very humbly, I think we should use the right abstractions that
resonate with our users rather than to force our developement centric notions
on the users.
>>There is one problem, 3/c in the features and limitations section, global
>>bucket namespace... If we have a well separated account
>> namespace isolation that does not get in our way we can use it on top of one
>> volume probably.
I am not sure I understand what is the disconnect here. Can you please
elaborate ?
>> I am full on with Marton that we should separate the problem to more parts
>> and discuss each of this separately to figure out the
>> gaps, and possible implementation approaches with benefits and drawbacks.
>> Marton talked about bucket and account namespace
>> isolation, I would like to add to that list. I would cut out the QoS, and
>> tenant in tenant (hierarchy of tenants) related things.
This proposal is already separating out BucketNamespace and AccountNamespace
requirements. The proposal is already talking about leveraging the volume
abstraction to meet the requirements. I don't see how things that you/Marton
are suggesting are different. Perhaps we are saying the same thing.
>> Account namespace isolation: I agree with Mrton, let's try to think about
>> this as an addon, that brings in complexity, I think maybe
>> the best is to have Hadoop style SIMPLE auth as the default, and even
>> kerberos auth I belive should go into a plugin >>
>> implementation, with that for this refactor we already have 2 authentication
>> styles, we can add SAML, we can add oAuth, we can
>> add any other authentication mode
Regarding the AccountNamespace isolation, It's just a way of grouping users at
a high level and ability to treat these groups as an isolation unit. I think it
should not be mixed/confused with authentication schemes. This proposal does
not limit or extend any existing authentication scheme that we have in Ozone.
>> QoS: I think about this similarly to authentication, authorization or even
>> auditing... This
.....
I think the user ask here is the ability to isolate users/resources so that
quotas/QOS/usage-consolidation and enforcements can be placed based on these
isolation groups. It's not an immediate ask and this can be built over time.
There could be lazy implementation modules (e.g. recon) or an
inline-implementation module. I think we are on the same page about this being
a pluggable module.
Overall I think we are pretty much saying the same things except for some
misunderstandings. About the abstractions, I believe, we should have the right
terminology that *resonates with our users* rather than forcing our
abstractions on them as explained above.
I have setup a call On Monday 4/12 10 am PST to discuss this and avoid any
mixup/confusion on the proposal.
[https://cloudera.zoom.us/j/95551894948]
was (Author: ppogde):
Thank you [~pifta] for comments. There are lot of questions here and hence the
answer would be lengthy :) please find answers inline
> A few problems that I see:
- > according to requirement 2/h/v. tenant admins should be able to see modify
and delete their tenant's users' data. This implies > possibly unwanted cross
tenant access for tenant admins in tenants where there is a user who accesses
an other tenant's > >resources
I think this is misunderstood here. Tenant Admins are restricted to their
tenancies only. They can not access any other tenants bucket/keys/users etc by
default. For example, Tenant Admin "A" can not access any of the resources in
Tenant "B" by default.
A cross Tenancy access authorization is given *explicitly with full awareness
of consequences by the corresponding tenant admins.* E.g. a Tenant Admin "A"
can allow access to a specific bucket "A/b1" to Tenant user "B/u1" by setting
up a bucket policy for "A/b1". There are no unwanted accesses here. Also just
because Tenant user "B/u1" has access to bucket "A/b1", it does not give
automatic access by "B/Admin" to bucket "A/b1".
>> if a tenant admin can allow access for a user in an other tenant, that would
>> mean that a tenant admin can access an other tenant's >> user object(s)
No this is not possible like explained above. A tenant admin gets superuser
privileges only within his tenancy. Not in another tenancy.
>> if a user from tenant a can have write access to tenant b, then tenant b QoS
>> quotas will be affected by a user in tenant a, also tenant
>> a quotas should aggregate usage of the user in tenant b which makes
>> enforcement and calculation of these way too heavy, or very >> limited and
>> exploitable
A typical use case would be, allowing Tenant user "B/U1", temporary read access
to a bucket "A/b1" owned by tenant "A". And such a policy would be created by
Tenant Admin "A" because they are the owners for all resources consumed in
Tenancy "A". Now, Its a very possible use case, if Tenant A admin wants to give
write access to user Tenant B/U1 in A's bucketNamespace. But this will be
explicitly setup by "A" and "A"'s admin would be aware of quota consequences.
The proposal actually speaks of quota feature for both BucketNamsepace as well
as AccountNamespace. So for "A", its possible to see the
A) bucketNamespace Usage \{regardless of who(users) wrote to the buckets and
who the owner for the keys is}. Given the fact that we are leveraging "Volumes"
to represent bucketNamespace, this is as simple as checking Volume usage and
comparing it against quota set on the volumes.
B) AccountNamespace Usage \{regardless of where or which bucketNamespaces the
keys were created in}. This could be as simple as aggregating the resources
usage for each user that belongs to the AccountNamespace. "A", also comparing
such a usage against any AccountNamespace quota.
Any such usage aggregation/quota enforcement can be done online or lazily as
part of recon task.The proposal does not talk about specific implementation but
a mechanism to address the possible use cases.
>> it is a problem to figure out how to isolate comfortably the access policies
>> and tie it to a user, when the user exists in one tenant
>> only, but is has to be harmonized with general policies in the other tenant,
>> not to mention groups/roles associated to the user that
>> might exists just in one tenant, and does not have a real meaning in the
>> other
I am not sure I get the question here. Can you please rephrase ? Users are
globally visible just like active directory where you can see users across
different departments within an organization.
>> applying different password policies is really complex, especially if user
>> lifecycle events apply to tenant users differently tenant by
>> tenant and has different enforcement rules... (what happens if one tenant
>> uses kerberos auth, and does not care much about aws
>> keys, while the other uses aws style access exclusively... who can
>> administer this for the user, where the user will configure the
>> different access patterns? etc.)
I think this is misunderstood. This Multitenancy proposal does not talk about
different password policies for different tenants or any such thing here. User
Authentication is independent of Multi-Tenancy. A user is authenticated based
on the credentials they present to Ozone and it should not have anything to do
with Multi-tenenacy.
> I would like to clear one question related to super-admins, I believe we
> should explicitly declare that these type of admins should >
> not have access to any tenant data on their own, but are just have the
> ability to administer tenant's, tenant admins, and QoS limit
> enforcements on tenants, and can see the list of tenants the QoS usage
> statistics of tenants, and maybe the list of tenant users, but
> they should not have access to tenant's data/metadata.
The proposed system here achieves AccessControl with the means of
"bucket/Volume" policies which will be either default system created or
explicitly created by the Users and Tenant-Admins. It is always possible to add
"Allow/Deny" policies based on the use cases.
>> Also I think it would be beneficial to make it clear that we think about the
>> volumes as the abstraction provides bucket namespace
>> isolation, and we do not want to develop an other abstraction on top of it,
>> though for ease of use we might introduce aliases that
>> reflect multi-tenancy terminology better.
I think it is not a good idea to introduce abstractions that conflict with
generic industry understating. As an example, we have "Containers" and
explaining this abstraction to anyone who is not in Ozone developer community
has been a challenge. The problem is even after you explain/force and folks
understand it for a while, they go back their original notions of these
terminologies after a while.
"Tenant" is a well known industrywide abstraction to isolate resource in any
system and, very humbly, I think we should use the right abstractions that
resonate with our customers rather than to force our developement centric
notions on the customers.
>>There is one problem, 3/c in the features and limitations section, global
>>bucket namespace... If we have a well separated account
>> namespace isolation that does not get in our way we can use it on top of one
>> volume probably.
I am not sure I understand what is the disconnect here. Can you please
elaborate ?
>> I am full on with Marton that we should separate the problem to more parts
>> and discuss each of this separately to figure out the
>> gaps, and possible implementation approaches with benefits and drawbacks.
>> Marton talked about bucket and account namespace
>> isolation, I would like to add to that list. I would cut out the QoS, and
>> tenant in tenant (hierarchy of tenants) related things.
This proposal is already separating out BucketNamespace and AccountNamespace
requirements. The proposal is already talking about leveraging the volume
abstraction to meet the requirements. I don't see how things that you/Marton
are suggesting are different. Perhaps we are saying the same thing.
>> Account namespace isolation: I agree with Mrton, let's try to think about
>> this as an addon, that brings in complexity, I think maybe
>> the best is to have Hadoop style SIMPLE auth as the default, and even
>> kerberos auth I belive should go into a plugin >>
>> implementation, with that for this refactor we already have 2 authentication
>> styles, we can add SAML, we can add oAuth, we can
>> add any other authentication mode
Regarding the AccountNamespace isolation, It's just a way of grouping users at
a high level and ability to treat these groups as an isolation unit. I think it
should not be mixed/confused with authentication schemes. This proposal does
not limit or extend any existing authentication scheme that we have in Ozone.
>> QoS: I think about this similarly to authentication, authorization or even
>> auditing... This
.....
I think the customer ask here is the ability to isolate users/resources so that
quotas/QOS/usage-consolidation and enforcements can be placed based on these
isolation groups. It's not an immediate ask and this can be built over time.
There could be lazy implementation modules (e.g. recon) or an
inline-implementation module. I think we are on the same page about this being
a pluggable module.
Overall I think we are pretty much saying the same things except for some
misunderstandings. About the abstractions, I believe, we should have the right
terminology that *resonates with our customers* rather than forcing our
abstractions on them as explained above.
I have setup a call On Monday 4/12 10 am PST to discuss this and avoid any
mixup/confusion on the proposal.
https://cloudera.zoom.us/j/95551894948
> Multi-Tenant Support in Ozone
> -----------------------------
>
> Key: HDDS-4944
> URL: https://issues.apache.org/jira/browse/HDDS-4944
> Project: Apache Ozone
> Issue Type: New Feature
> Components: Ozone CLI, Ozone Datanode, Ozone Manager, Ozone Recon,
> S3, SCM, Security
> Affects Versions: 1.2.0
> Reporter: Prashant Pogde
> Assignee: Prashant Pogde
> Priority: Major
> Labels: pull-request-available
> Attachments: Apache-S3-compatible-Multi-Tenant-Ozone-short.pdf.gz,
> Ozone MultiTenant Feature _ Requirements and Abstractions-3.pdf, Ozone,
> Multi-tenancy, S3, Kerberos....pdf, UseCaseAWSCompatibility.pdf,
> UseCaseCephCompatibility.pdf, UseCaseConfigureMultiTenancy.png,
> UseCaseCurrentOzoneS3BackwardCompatibility.pdf, VariousActorsInteractions.png
>
>
> This Jira will be used to track a new feature for Multi-Tenant support in
> Ozone. Initially Multi-Tenant feature would be limited to ozone-users
> accessing Ozone over S3 interface.
--
This message was sent by Atlassian Jira
(v8.3.4#803005)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]