You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: Standards/scs-xxxx-v1-provider-network-standard.md
+38-20Lines changed: 38 additions & 20 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -100,12 +100,14 @@ This seems to be more of a niche use-case, however, and may warrant the creation
100
100
For public clouds, external access generally means access to (and from) the internet, with allocation of public IP addresses.
101
101
Providing a standardized approach for the allocation of public IP addresses is the main motivation for this standard.
102
102
103
-
However, the SCS Standards are intended to be applicable not just to public clouds, but also to private or even air-gaped cloud environments.
104
-
One way to reconcile these requirements would be to find a common basis between public and private clouds, and then build the standard around that, scoping individual rules where necessary.
103
+
However, the SCS Standards are intended to be applicable not just to public clouds, but also to private or even air-gapped cloud environments which have different requirements for IP address allocation.
104
+
One way to reconcile these requirements would be to limit the scope the requirements of this standard to only apply to cloud environment that support the allocation of public IP addresses.
105
105
106
-
However, private and public clouds may have quite different requirements.
107
-
Public IPv4 addresses, for example, are sparse and expensive, so having tight quotas and support for NAT makes a lot of sense in a public cloud, but may be completely unnecessary in a private environment without public IPs.
108
-
So, rather than trying to find common ground between the networking requirements of all SCS clouds, the requirements of this standard will be scoped to only apply to cloud environment that support the allocation of public IP addresses.
106
+
There are common networking use-cases between public and private clouds, however, like the very common requirement to connect to virtual servers via SSH.
107
+
For users (or any automated tooling that users might deploy) to have a standardized way of connecting to virtual servers in their projects is very valuable, regardless of whether this access happens across the Internet or within an isolated internal network or VPN.
108
+
109
+
So instead of standardizing allocation of public IP addresses for some clouds, it might be more useful to require the allocation of IP addresses that are reachable for API users in all clouds.
110
+
Public clouds can then have the additional requirement that those allocated addresses must also be public.
109
111
110
112
#### IPv6
111
113
@@ -169,7 +171,7 @@ It is possible to have both an IPv4 and an IPv6 subnet pool where `is_default` i
169
171
The behavior is undefined when more than one network in the project is marked as default, or more than one subnet pool per address family.
170
172
171
173
So, it is strongly advisable to only have one default defined for each.
172
-
It seems sensible to standardize on using SCS-mandated resources as auto-allocation defaults, as this is likely to be the expected behavior from users.
174
+
It seems sensible to standardize on using SCS-mandated resources as auto-allocation defaults, as this is likely to be the behavior expected by users.
173
175
It can also be useful for both users and automated compliance tests to determine the defaults in the presence of multiple provider networks.
174
176
175
177
#### Disable Networking RBAC for Users
@@ -199,23 +201,39 @@ So, just specifying mandatory features rather than a certain set of extensions m
199
201
200
202
## Standard
201
203
202
-
If CSPs offer public IP addresses to projects, they **MUST** provide a provider network to every project to allocate public addresses.
203
-
This provider network will in the following be referred to as the _standard provider network_.
204
+
### External Addresses
205
+
206
+
We define an _external_ address as an IPv4 or IPv6 address that is accessible to a user of the SCS-compliant OpenStack API.
207
+
For public clouds, external addresses **MUST** be either IPv4 public addresses or IPv6 global unicast addresses (GUA).
208
+
209
+
The CSP **MUST** offer allocation of external IPv6 addresses to user projects.
210
+
The CSP **SHOULD** offer allocation of external IPv4 addresses to user projects.
211
+
212
+
### Standard Provider Network
213
+
214
+
The CSP **MUST** provide every user project with a provider network that can route any external addresses that are allocated to the project.
215
+
For external addresses from pool-allocated subnets, this requires support for dynamic routing.
216
+
This provider network will in the following will be referred to as the _standard provider network_.
217
+
218
+
The standard provider network **MUST** have the `is_default` flag set to `True`, and it **MUST** be the only provider network in the project with `is_default` set to `True`.
204
219
To avoid ambiguity, the standard provider network **SHOULD** be the only provider network available to projects by default.
205
220
206
221
The standard provider network **MUST** be an external network, allowing it to be used as external gateway by virtual routers.
207
-
The standard provider network **MUST** have the `is_default` flag set to True, and it **MUST** be the only network to do so.
208
-
The standard provider network **MAY** be a shared network, allowing direct attachment of virtual servers.
209
-
If the standard provider network is a shared network, it **MUST** enable port security to prevent projects from interfering with each other.
210
-
211
-
If CSPs offer public IP addresses at all, they **MUST** provide a shared subnet pool for the allocation of at least one public /64 IPv6 prefix per project.
212
-
This subnet pool **MUST** have the `is_default` flag set to True, and it **MUST** be the only IPv6 subnet pool to do so.
213
-
If CSPs offer public IP addresses, they **SHOULD** also offer public IPv4 addresses.
214
-
If they do offer public IPv4 addresses, they **MUST** provide at least one public Floating IP per project, but **MAY** also provide a shared subnet pool for the allocation of public IPv4 prefixes to project networks.
215
-
If CSPs offer a subnet pool for the allocation of public IPv4 prefixes, it **MUST** have the `is_default` flag set to True, and it **MUST** be the only IPv4 subnet pool to do so.
216
-
217
-
CSPs **MUST** externally route any public IP addresses allocated from subnets of the standard provider network.
218
-
CSPs **MUST** provide dynamic routing for all project-allocated public IP-prefixes via the standard provider network.
222
+
It **MAY** also be a shared network, allowing direct attachment of virtual servers.
223
+
If the standard provider network is a shared network, then it **MUST** be configured allocate external addresses for directly attached servers and ports, and it **MUST** enable port security to prevent projects from interfering with each other.
224
+
225
+
### IPv6 Allocation
226
+
227
+
The CSP **MUST** provide a shared subnet pool for the allocation of at least one /64 prefix for external IPv6 addresses per project.
228
+
This subnet pool **MUST** have the `is_default` flag set to `True`, and it **MUST** be the only shared IPv6 subnet pool in the project with `is_default` set to `True`.
229
+
230
+
### IPv4 Allocation
231
+
232
+
If the CSP offers external IPv4 addresses, they **MUST** provide at least one external Floating IP per project that can be allocated from the standard provider network.
233
+
The CSP **MAY** also provide a shared subnet pool for the allocation of prefixes for external IPv4 addresses to project networks.
234
+
If such a subnet pool is provided, it **MUST** have the `is_default` flag set to `True`, and it **MUST** be the only shared IPv4 subnet pool in the project with `is_default` set to `True`.
235
+
236
+
### RBAC Restrictions
219
237
220
238
By default, users **SHOULD** be prohibited by policy from creating Networking RBAC rules, to prevent the creation of faux provider networks.
221
239
The necessary policy change to implement this restriction for the Neutron API can be found in the Networking RBAC documentation [^rbac].
0 commit comments