fmorg-git commented on code in PR #9223:
URL: https://github.com/apache/ozone/pull/9223#discussion_r2511963255


##########
hadoop-hdds/docs/content/design/ozone-sts.md:
##########
@@ -0,0 +1,191 @@
+---
+title: AWS STS Design for Ozone S3
+summary: STS Support in Ozone
+date: 2025-10-30
+jira: HDDS-13323
+status: implementing
+author: Ren Koike, Fabian Morgan
+---
+<!--
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License. See accompanying LICENSE file.
+-->
+
+# AWS STS Design for Ozone S3
+
+# 1. Introduction
+
+S3 credentials used to communicate with Ozone S3 APIs are based on a Kerberos 
identity.
+
+Historically, the Ozone community has had interest in a REST API capable of 
programmatically generating 
+temporary S3 credentials.
+
+Amazon AWS has the [Security Token Service 
(STS)](https://docs.aws.amazon.com/STS/latest/APIReference/welcome.html) which 
+provides the ability to generate short-lived access to resources.
+
+The primary scope of this document is to detail the initial implementation of 
STS within the Ozone ecosystem.
+
+# 2. Why Use STS Tokens?
+
+Providing short-lived access to various resources in Ozone is useful in 
scenarios such as Data Lake
+solutions that want to aggregate data across multiple cloud providers.
+
+# 3. How Ozone STS Works
+
+The initial implementation of Ozone STS supports only the 
[AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html)
+API from the AWS specification.  A new STS endpoint `/sts` on port `9880` will 
be created to service STS requests in the S3 Gateway.
+
+Furthermore, the initial implementation of Ozone STS focuses only on Apache 
Ranger for authorization in the first phase, 
+as it aligns more with IAM policies.  Support for the Ozone Native Authorizer 
may be provided in a future phase.  
+Consideration for the Ozone Native Authorizer will be given when processing 
IAM policies as described below.
+
+## 3.1 Capabilities
+
+The Ozone STS implementation has the following capabilities:
+
+- Create temporary credentials that last from a minimum of 15 minutes to a 
maximum of 12 hours. The
+return value of the AssumeRole call will be temporary credentials consisting 
of 3 components: 
+  - accessKeyId - a generated String identifier (cryptographically strong 
using SecureRandom) beginning with the sequence "ASIA"
+  - secretAccessKey - a generated String password (cryptographically strong 
using SecureRandom)
+  - sessionToken - a Base64-encoded opaque String identifier
+- The temporary credentials will have the permissions associated with a role. 
Furthermore, an 
+[AWS IAM Session 
Policy](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session)
 can 
+**optionally** be sent in the AssumeRole API call to limit the scope of the 
permissions further.  If 
+an IAM policy is specified, the temporary credential will have the permissions 
comprising the intersection of the role permissions
+and the IAM policy permissions. **Note:** If the IAM policy is specified and 
does not grant any permissions, then
+the generated temporary credentials won't have any permissions and will 
essentially be useless.
+
+## 3.2 Limitations in IAM Session Policy Support
+
+The AWS IAM policy specification is vast and wide-ranging.  The initial Ozone 
STS supports a limited
+subset of its capabilities.  The restrictions are outlined below:
+
+- The only supported prefix in ResourceArn is `arn:aws:s3:::` - all others 
will be rejected.  **Note**: a ResourceArn 

Review Comment:
   This design behavior came after (much) discussion with external teams.  One 
external team will send S3 actions that Ozone doesn't support, and they don't 
have flexibility to change what they are sending, so that's one reason for the 
silent ignore.  This external team also mentioned that some research indicates 
AWS also does not fail the AssumeRole request just because the inline session 
policy references unknown or unsupported actions, but rather it will fail when 
the temporary credentials are used, so this design is accordance with it.  
Another external team agreed that behavior is fine for actions, but does not 
work for Conditions, because one can have a Condition to restrict calls by 
sourceIp, and if we silently ignore this, the client may incorrectly think the 
temporary credentials are restricted for use by that IP address, so consensus 
was to reject the request for that scenario.



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to