Internet DRAFT - draft-chaudhari-source-access-control-metadata
draft-chaudhari-source-access-control-metadata
Content Delivery Networks Interconnection P. Chaudhari
Internet-Draft Disney
Intended status: Standards Track G. Goldstein
Expires: 5 September 2024 W. Power
Lumen Technologies
A. Warshavsky
Qwilt
4 March 2024
CDNI Source Access Control Metadata
draft-chaudhari-source-access-control-metadata-00
Abstract
This specification provides an alternative to the MI.SourceMetadata
objects defined in RFC8006, providing greatly extended capabilities
with regards to defining multiple sources, load balancing, and
failover rules across those sources, as well as a mechanism for a
content delivery network (CDN) to monitor source health and pull
unhealthy sources out of rotation. Additionally, new methods are
defined for authentication access to an upstream source/origin.
Status of This Memo
This Internet-Draft is submitted in full conformance with the
provisions of BCP 78 and BCP 79.
Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF). Note that other groups may also distribute
working documents as Internet-Drafts. The list of current Internet-
Drafts is at https://datatracker.ietf.org/drafts/current/.
Internet-Drafts are draft documents valid for a maximum of six months
and may be updated, replaced, or obsoleted by other documents at any
time. It is inappropriate to use Internet-Drafts as reference
material or to cite them other than as "work in progress."
This Internet-Draft will expire on 5 September 2024.
Copyright Notice
Copyright (c) 2024 IETF Trust and the persons identified as the
document authors. All rights reserved.
This document is subject to BCP 78 and the IETF Trust's Legal
Provisions Relating to IETF Documents (https://trustee.ietf.org/
license-info) in effect on the date of publication of this document.
Chaudhari, et al. Expires 5 September 2024 [Page 1]
Internet-Draft CDNI Source Access Control Metadata March 2024
Please review these documents carefully, as they describe your rights
and restrictions with respect to this document. Code Components
extracted from this document must include Revised BSD License text as
described in Section 4.e of the Trust Legal Provisions and are
provided without warranty as described in the Revised BSD License.
Table of Contents
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2
2. Requirements . . . . . . . . . . . . . . . . . . . . . . . . 3
3. MI.SourceMetadataExtended . . . . . . . . . . . . . . . . . . 3
3.1. MI.SourceExtended . . . . . . . . . . . . . . . . . . . . 6
3.1.1. MI.SourceConnectionControl . . . . . . . . . . . . . 10
3.1.1.1. MI.SourceByteReadTimeoutActions . . . . . . . . . 14
3.1.1.2. MI.SourceTimeoutActions . . . . . . . . . . . . . 15
3.1.1.3. MI.SourceConnectionRetries . . . . . . . . . . . 15
3.1.2. MI.HTTPCodeFailover . . . . . . . . . . . . . . . . . 18
3.1.2.1. MI.HTTPCodeFailoverActions . . . . . . . . . . . 21
3.1.2.2. MI.HTTPCodeReforwards . . . . . . . . . . . . . . 22
3.1.3. MI.EndpointDetention . . . . . . . . . . . . . . . . 23
3.1.3.1. MI.HTTPErrorCodeTrigger . . . . . . . . . . . . . 24
3.1.3.2. MI.EndpointDetentionTrigger . . . . . . . . . . . 24
3.1.3.3. MI.EndpointRepeatingFailures . . . . . . . . . . 25
3.2. MI.SourceDetention . . . . . . . . . . . . . . . . . . . 27
3.2.1. MI.DetentionFullBehavior . . . . . . . . . . . . . . 28
3.2.2. MI.DetentionResetBehavior . . . . . . . . . . . . . . 28
3.3. MI.LoadBalanceMetadata . . . . . . . . . . . . . . . . . 31
4. New Authentication Types . . . . . . . . . . . . . . . . . . 33
4.1. MI.HeaderAuth . . . . . . . . . . . . . . . . . . . . . . 33
4.2. MI.AWSv4Auth . . . . . . . . . . . . . . . . . . . . . . 34
5. Security Considerations . . . . . . . . . . . . . . . . . . . 37
6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 37
6.1. CDNI Payload Types . . . . . . . . . . . . . . . . . . . 37
7. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 39
8. Normative References . . . . . . . . . . . . . . . . . . . . 39
9. Informative References . . . . . . . . . . . . . . . . . . . 40
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 40
1. Introduction
The [RFC8006] MI.SourceMetadata and Source objects provide the dCDN
with information about content acquisition, i.e., how to contact an
upstream content delivery network (uCDN) or an origin server to
obtain the content to be served. This specification details
alternatives to these objects (using MI.SourceMetadataExtended and
MI.SourceExtended), that provide a rich set of additional
capabilities for managing the connection and access to upstream
sources, such as:
Chaudhari, et al. Expires 5 September 2024 [Page 2]
Internet-Draft CDNI Source Access Control Metadata March 2024
* Designation as to whether a source requires Hypertext Transfer
Protocol Secure (HTTPS) access.
* Specification of the source's Transmission Control Protocol (TCP)
port number.
* Web root path specification for the source.
* Indication as to whether redirects should be followed.
* Support for additional forms of origin authentication.
* Multi-origin failover - The ability to specify a list of origins
that can act as fallbacks to the primary origin. Failure rules
can specify types of errors and timeout values that trigger
failover.
* Multi-origin load balancing - The ability to specify a list of
origins that can be selected by one of several balancing rules
(random, content hash, or IP hash).
* Specification of connection control parameters for origin access,
with detailed options for specifying error handling, timeouts, and
retries.
* Mechanisms to track the health of upstream sources and place
unhealthy sources in detention (an unusable state) until they
return to good health.
2. Requirements
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
document are to be interpreted as described in [RFC2119].
3. MI.SourceMetadataExtended
MI.SourceMetadataExtended is an alternative to the CDN
Interconnection (CDNI) standard MI.SourceMetadata object, which adds
a property to specify load balancing across multiple sources, a
MI.SourceExtended subobject with additional attributes to the CDNI
standard Source object and a MI.SourceDetention subobject to manage
unavailable sources.
Chaudhari, et al. Expires 5 September 2024 [Page 3]
Internet-Draft CDNI Source Access Control Metadata March 2024
While both MI.SourceMetadataExtended and MI.SourceMetadata can be
provided for backward compatibility, a dCDN that advertises
capability for MI.SourceMetadataExtended will ignore
MI.SourceMetadata if both are provided for a given host or path
match.
The following diagram shows MI.SourceMetadataExtended and its group
of subobjects:
CDNi Metadata Object Model
+-----------------+
|SourceMetadata |
--------|----------
|sources|MI.Source|----|
+-------|---------+ |
v
+-------------------------------+
|Source |
---------------------------------
|acquisition-auth|MI.Auth |
---------------------------------
|endpoints |MI.Endpoint []|
---------------------------------
|protocol |MI.Protocol |
+----------------|--------------+
Service Configuration Object Model
+-----------------------------------+
|SourceMetadataExtended |
-----------------|-------------------
|sources |MI.SourceExtended |----|
-----------------|------------------- |
|source-detention|MI.SourceDetention| |
-----------------|------------------- |
|load-balance |MI.LoadBalance | |
+----------------|------------------+ |
v
+---------------------------------------------+
|SourceExtended |
-------------------|---------------------------
|acquisition-auth |MI.Auth |
-------------------|---------------------------
|endpoints |MI.Endpoint [] |
-------------------|---------------------------
|protocol |MI.Protocol |
-------------------|---------------------------
|origin-host |String |
Chaudhari, et al. Expires 5 September 2024 [Page 4]
Internet-Draft CDNI Source Access Control Metadata March 2024
-------------------|---------------------------
|webroot |String |
-------------------|---------------------------
|follow-redirects |Boolean |
-------------------|---------------------------
|failover-errors |String [] |
-------------------|---------------------------
|timeout-ms |Integer |
-------------------|---------------------------
|connection-control|MI.SourceConnectionControl|
-------------------|---------------------------
|http-code-failover|MI.HTTPCodeFailover |
-------------------|---------------------------
|endpoint-detention|MI.EndpointDetention |
+------------------|--------------------------+
Figure 1: MI.SourceMetadataExtended Object Model
Property: sources
* Description: The sources from which the dCDN can acquire content,
listed in order of preference.
* Type: Array of MI.SourceExtended objects
* Mandatory-to-Specify: No. The default is to use a static
configuration, out-of-band from the CDNI metadata interface.
Property: source-detention
* Description: Specifies rules for handling detention at the set of
sources.
* Type: SourceDetention object
* Mandatory-to-Specify: No. If not specified, the dCDN-specific
behavior gets used.
Property: load-balance
* Description: Specifies load balancing rules for the set of
sources.
* Type: LoadBalanceMetadata object
* Mandatory-to-Specify: No
Chaudhari, et al. Expires 5 September 2024 [Page 5]
Internet-Draft CDNI Source Access Control Metadata March 2024
The following is an example of an MI.SourceMetadataExtended object
with the associated MI.LoadBalanceMetadata configuration object:
{
"generic-metadata-type": "MI.SourceMetadataExtended",
"generic-metadata-value": {
"sources": [
{
"endpoints": [
"a.service123.ucdn.example",
"b.service123.ucdn.example"
],
"protocol": "http/1.1"
},
{
"endpoints": [
"origin.service123.example"
],
"protocol": "http/1.1"
}
],
"load-balance": {
"balance-algorithm": "content-hash",
"balance-path-pattern": "^/prod/(.*)/.*\\.ts$"
}
}
}
Figure 2
3.1. MI.SourceExtended
MI.SourceExtended is an alternative to the CDNI standard Source
object with additional metadata. It contains all the attributes of
the [RFC8006] Source object (acquisition-auth, endpoints, and
protocol), with additions specified below.
Property: acquisition-auth
* Description: The authentication method to use when requesting
content from this source. Same as [RFC8006]
* Type: Auth (see [RFC8006] Section 4.2.7 and the new MI.Auth types
in this specification)
* Mandatory-to-Specify: No. The default is no authentication
required.
Chaudhari, et al. Expires 5 September 2024 [Page 6]
Internet-Draft CDNI Source Access Control Metadata March 2024
Property: endpoints
* Description: The origins from which the dCDN can acquire content.
If multiple endpoints are specified, they are all equal, i.e., the
list is not ordered by preference. Same as [RFC8006]
* Type: Array of endpoint objects (see [RFC8006] Section 4.3.3)
* Mandatory-to-Specify: Yes
Property: protocol
* Description: The network retrieval protocol to use when requesting
content from this source. Same as [RFC8006]
* Type: Protocol (see [RFC8006] Section 4.3.2)
* Mandatory-to-Specify: Yes
Property: origin-host
* Description: The Hypertext Transfer Protocol (HTTP) host header to
pass to the endpoints when retrieving content from a uCDN. The
host MUST conform to the Domain Name System (DNS) syntax defined
in [RFC1034] and [RFC1123]
* Type: String
* Mandatory-to-Specify: No. The default is to use the host name
passed by the dCDN.
Property: webroot
* Description: The path element that is prepended to a resource's
Uniform Resource Identifier (URI) before retrieving content from a
uCDN.
* Type: String, typically starting with a "/"
* Mandatory-to-Specify: No. The default is to use the original URI.
Property: follow-redirects
* Description: If the follow-redirects property is set to "True",
HTTP redirect responses returned from a uCDN will be followed when
retrieving content. Otherwise, the HTTP redirect response is
returned to the client.
Chaudhari, et al. Expires 5 September 2024 [Page 7]
Internet-Draft CDNI Source Access Control Metadata March 2024
* Type: Boolean
* Mandatory-to-Specify: No. The default is "True" (i.e., follow
redirect responses from the uCDN).
Property: failover-errors
* Description: An array of HTTP response error status codes (see
Sections 15.5 and 15.6 of [RFC9110]), that if returned from the
uCDN, will trigger a failover to the next source in the
MI.SourceMetadataExtended source array. If the uCDN returns an
HTTP error code that is not in the failover-errors array, that
error code is returned to the client of the dCDN. Note that use
of the http-code-failover property overrides this setting.
* Type: Array of HTTP response status codes encoded as strings. Any
HTTP status code from 100 to 599, or any of the special values,
"2xx", "3xx", "4xx" or "5xx", where "xx" implies everything from
00 to 99. While repeated and redundant values in the array are
allowed, they SHOULD be avoided for efficiency (no reason to
specify both 5xx and 503, for example).
* Mandatory-to-Specify: No. The default is to revert to [RFC8006]
behavior.
Property: timeout-ms
* Description: A timeout, in milliseconds, to apply when connecting
to a uCDN. If the connection is not established within timeout-
ms, this source is abandoned and the next source in the
MI.SourceMetadataExtended source array is tried. Once a
connection is established, timeout-ms is used on subsequent reads
of data from the uCDN. Note that use of the connection-control
property overrides this setting.
* Type: Integer
* Mandatory-to-Specify: No. The default is to revert to [RFC8006]
behavior if neither this property or connection-control are
specified.
Property: connection-control
* Description: Specifies how connection-related errors and timeouts
are handled. When specified, it overrides the timeout-ms
property.
* Type: SourceConnectionControl object
Chaudhari, et al. Expires 5 September 2024 [Page 8]
Internet-Draft CDNI Source Access Control Metadata March 2024
* Mandatory-to-Specify: No. If not specified, the timeout-ms
property is used to configure simple connection control timeouts.
Property: http-code-failover
* Description: Specifies how HTTP response error codes are handled.
When specified, it overrides the failover-errors property.
* Type: HTTPCodeFailover object
* Mandatory-to-Specify: No. If not specified, the failover-errors
property is used to configure error handling behavior for HTTP
response error codes.
Property: endpoint-detention
* Description: Defines error-based triggers for which an endpoint is
put in detention (excluded from future use) for a given duration
of time.
* Type: EndpointDetention object
* Mandatory-to-Specify: No. If not specified, no health check and
detention is done on an unhealthy endpoint.
The following is an example of an MI.SourceExtended object that
describes a pair of endpoints (servers) that the dCDN can use to
acquire content for the applicable host and/or URI path:
Chaudhari, et al. Expires 5 September 2024 [Page 9]
Internet-Draft CDNI Source Access Control Metadata March 2024
{
"generic-metadata-type": "MI.SourceMetadataExtended",
"generic-metadata-value": {
"sources": [
{
"endpoints": [
"a.service123.ucdn.example",
"b.service123.ucdn.example:8443"
],
"protocol": "https/1.1",
"origin-host": "internal.example.com",
"webroot": "/prod",
"follow-redirects": false,
"timeout-ms": 4000,
"failover-errors": [ "502", "503", "504" ]
},
{
"endpoints": [ "origin.service123.example" ],
"protocol": "http/1.1",
"webroot": "/prod",
"follow-redirects": true,
"timeout-ms": 8000
}
]
}
}
Figure 3
3.1.1. MI.SourceConnectionControl
MI.SourceConnectionControl is a subobject of MI.SourceExtended and
allows for the dCDN to specify how it will handle connection timeouts
and errors against an origin/uCDN. The use of this object overrides
the timeout-ms property of MI.SourceExtended, even if any timeout
properties of this object are not configured.
The following diagram illustrates the model for a CDN source load
balancer failing over between multiple sources based on different
types of timeout errors.
Chaudhari, et al. Expires 5 September 2024 [Page 10]
Internet-Draft CDNI Source Access Control Metadata March 2024
+----------+
1*|---->|EndPoint-1|
Source-1 | +----------+
1* +-----------------------+ |
------------>|SourceConnectionControl| |
| +-----------------------+ |
| | +----------+
| | 2*|---->|EndPoint-n|
+--------------------+ | +----------+
|Source Load Balancer| |
+--------------------+ | +----------+
| | 1*|---->|EndPoint-1|
| Source-n | +----------+
| +-----------------------+ |
|----------->|SourceConnectionControl| |
3* +-----------------------+ |
| +----------+
2*|---->|EndPoint-n|
Legend +----------+
1* - primary flow
2* - failover across Endpoints due to timeouts
3* - failover across Sources after exhausting Endpoints
Figure 4: Failover Model for timeouts
Property: connection-setup-timeout-ms
* Description: The time, in milliseconds, within which a connection
MUST be established against an endpoint of an MI.SourceExtended
object.
* Type: Integer. A value greater than 0 to define a timeout, in
milliseconds, for establishing a new network connection.
* Mandatory-to-Specify: No. If not specified, internal dCDN values
are used.
Property: connection-setup-timeout-ms-actions
* Description: Specifies error handling actions to take when the
connection could not be established within a given timeout, as
specified by the connection-setup-timeout-ms property. It is an
error to specify this property without the corresponding
connection-setup-timeout-ms property.
* Type: SourceTimeoutActions object
Chaudhari, et al. Expires 5 September 2024 [Page 11]
Internet-Draft CDNI Source Access Control Metadata March 2024
* Mandatory-to-Specify: No. If not specified, and a timeout occurs
when establishing a new network connection, the next
MI.SourceExtended will be used as a failover action.
Property: first-byte-read-timeout-ms
* Description: The time, in milliseconds, within which the first
byte MUST be received/read on a new network connection.
* Type: Integer. A value greater than 0 to define a timeout, in
milliseconds, for reading the first byte on a new network
connection.
* Mandatory-to-Specify: No. If not specified, internal dCDN values
are used.
Property: first-byte-read-timeout-ms-actions
* Description: Specifies the error handling actions to take when the
first byte on a new connection could not be read within a given
timeout, as specified by the first-byte-read-timeout-ms property.
It is an error to specify this property without the corresponding
first-byte-read-timeout-ms property.
* Type: SourceTimeoutActions object
* Mandatory-to-Specify: No. If not specified, and a timeout occurs
when reading the first byte on a new network connection, the next
MI.SourceExtended will be used as a failover action.
Property: byte-read-timeout-ms
* Description: The time, in milliseconds, within which the next byte
MUST be received/read on a connection.
* Type: Integer. A value greater than 0 to define a timeout, in
milliseconds, for reading the next byte on an established network
connection.
* Mandatory-to-Specify: No. If not specified, internal dCDN values
are used.
Property: byte-read-timeout-ms-actions
Chaudhari, et al. Expires 5 September 2024 [Page 12]
Internet-Draft CDNI Source Access Control Metadata March 2024
* Description: Specifies error handling actions to take when the
next byte on a connection could not be read within a given
timeout, as specified by the byte-read-timeout-ms property. It is
an error to specify this property without the corresponding byte-
read-timeout-ms property.
* Type: SourceByteReadTimeoutActions object
* Mandatory-to-Specify: No. If not specified, and a timeout occurs
when reading bytes from an existing network connection, the next
MI.SourceExtended will be used as a failover action.
Property: connection-keep-alive-time-ms
* Description: Specifies the time, in milliseconds, to keep an idle
connection open.
* Type: Integer. A value greater than 0 defines the amount of time
for which a connection SHOULD be kept alive.
* Mandatory-to-Specify: No. If not specified, any dCDN defined
internal values are used.
Property: max-connection-retries-per-source
* Description: Specifies the upper bound of retries allowed across
all endpoints of an MI.SourceExtended object for all timeout
errors.
* Type: Integer. A value greater than or equal to 0 indicates the
maximum number of retries against all endpoints of the current
MI.SourceExtended object for connection establishment, first-byte-
read, and byte-read timeout errors. A value of 0 indicates that
no retries are to be performed against this source.
* Mandatory-to-Specify: No. If not specified, any retry values
defined in the properties of connection-setup-timeout-ms-actions,
first-byte-read-timeout-ms-actions, and byte-read-timeout-ms-
actions for their respective error types are used.
Property: resume-from-last-byte-of-previous-source
* Description: Upon establishing a new connection to an origin/uCDN,
this specifies whether the next byte to read will start from the
last byte read from a previous MI.SourceExtended object. This is
only applicable when the content length of the object being
downloaded is known.
Chaudhari, et al. Expires 5 September 2024 [Page 13]
Internet-Draft CDNI Source Access Control Metadata March 2024
* Type: Boolean. If "True", the next byte read will resume from the
last successful byte downloaded from a previous MI.SourceExtended
object. The default is "False".
* Mandatory-to-Specify: No.
Property: resume-from-last-byte-of-previous-endpoint
* Description: Upon establishing a new connection to an origin/uCDN,
this specifies whether the next byte read will start from the last
byte read from a previous endpoint of the current
MI.SourceExtended. This is only applicable when the content
length of the object being downloaded is known.
* Type: Boolean. If "True", the next byte read will resume from the
last successful byte downloaded from a previous endpoint of the
current MI.SourceExtended object. The default is "False".
* Mandatory-to-Specify: No.
3.1.1.1. MI.SourceByteReadTimeoutActions
MI.SourceByteReadTimeoutActions is a subobject of
MI.SourceConnectionControl and allows for the specification of
actions to be taken when a timeout occurs when reading the next byte
on an existing network connection against an endpoint of an origin/
uCDN.
Property: retries
* Description: Specifies the number of retries that MUST occur
against a given endpoint when an error occurs.
* Type: SourceConnectionRetries object
* Mandatory-to-Specify: No. If not specified, no retries are done.
Property: error-state
* Description: Specifies whether to capture any error message for
the current error condition.
* Type: SetVariable object specifying a user-defined variable. See
the Metadata Expression Language Specification [SVTA2031]
* Mandatory-to-Specify: No. If not specified, a dCDN will not
capture the error condition for which this object is used.
Chaudhari, et al. Expires 5 September 2024 [Page 14]
Internet-Draft CDNI Source Access Control Metadata March 2024
Property: resume-from-last-byte
* Description: Specifies whether to resume reading from the last
byte of the current endpoint only if the content length of the
object being downloaded is known.
* Type: Boolean. If set to "True", when a byte read timeout occurs
against an endpoint and if a retry action is performed against the
same endpoint, the byte read will resume from the last byte
downloaded. The default value is "False".
* Mandatory-to-Specify: No. If not specified, a retry against the
current endpoint will download the requested object from the first
byte.
3.1.1.2. MI.SourceTimeoutActions
MI.SourceTimeoutActions is a subobject of MI.SourceConnectionControl
and allows for the specification of actions to be taken when a
timeout occurs against an endpoint of an origin/uCDN.
Property: retries
* Description: Specifies the number of retries that MUST occur
against a given endpoint when an error occurs.
* Type: SourceConnectionRetries object
* Mandatory-to-Specify: No. If not specified, no retries are made.
Property: error-state
* Description: Specifies whether to capture any error message for
the current error condition.
- Type: SetVariable object specifying a user-defined variable.
See the Metadata Expression Language Specification [SVTA2031]
* Mandatory-to-Specify: No. If not specified, a dCDN will not
capture the error condition for which this object is used.
3.1.1.3. MI.SourceConnectionRetries
MI.SourceConnectionRetries is a subobject that allows for the
specification of retries to be performed against endpoints of an
MI.SourceExtended object.
Property: max-retries-per-source
Chaudhari, et al. Expires 5 September 2024 [Page 15]
Internet-Draft CDNI Source Access Control Metadata March 2024
* Description: Specifies the maximum number of retries against all
endpoints of the MI.SourceExtended object for a given class of
error.
* Type: Integer. A value of greater than or equal to 0 indicates
the number of retries. Example: If the value of max-retries-per-
source of the retries property of connection-setup-timeout-ms-
actions is set to 5, a maximum of 5 retries are allowed for
connection setup timeout errors across all endpoints of the
current MI.SourceExtended object. If this value is set to 0, no
retries will be done.
* Mandatory-to-Specify: No. If not specified, the individual
endpoint-specific retries are honored.
Property: retries-per-endpoint
* Description: Specifies the number of retries against the current
endpoint of the MI.SourceExtended object for a given class of
error.
* Type: Integer. A value of greater than or equal to 0 indicates
the number of retries. Example: If the value of retries-per-
endpoint of the retries property of connection-setup-timeout-ms-
actions is set to 5, 5 retries will be done for connection-setup
timeout errors on the current endpoint of the current
MI.SourceExtended object. If this value is set to 0, no retries
will be done.
* Mandatory-to-Specify: No. If not specified, the value of 0 is
assumed and no retries will be done for the given class of error.
The following is an example showing how different connection errors
against an origin/uCDN can be handled and a custom response sent to
the player/client. This example illustrates use of the Processing
Stages Model [SVTA2032] to apply metadata at the clientResponse
Stage:
[
{
"generic-metadata-type": "MI.SourceConnectionControl",
"generic-metadata-value": {
"connection-setup-timeout-ms": 10,
"connection-setup-timeout-ms-actions": {
"retries": {
"max-retries-per-source": 3,
"retries-per-endpoint": 1
},
Chaudhari, et al. Expires 5 September 2024 [Page 16]
Internet-Draft CDNI Source Access Control Metadata March 2024
"error-state": {
"variable-name": "connection-setup-timeout",
"variable-value": "true"
}
},
"first-byte-read-timeout-ms": 1,
"first-byte-read-timeout-ms-actions": {
"retries": {
"max-retries-per-source": 3,
"retries-per-endpoint": 1
},
"error-state": {
"variable-name": "first-byte-read-timeout",
"variable-value": "true"
}
},
"byte-read-timeout-ms": 1,
"byte-read-timeout-ms-actions": {
"resume-from-last-byte": true,
"retries": {
"max-retries-per-source": 3,
"retries-per-endpoint": 1
},
"error-state": {}
},
"connection-keep-alive-time-ms": 3,
"max-connection-retries-per-source": 3,
"resume-from-last-byte-of-previous-source": true,
"resume-from-last-byte-of-previous-endpoint": true
}
},
{
"generic-metadata-type": "MI.ProcessingStages",
"generic-metadata-value": {
"client-response": [
{
"match": "var.connection-setup-timeout-ms == 'true'",
"stage-metadata": {
"response-transform": {
"header-transform": {
"add": [
{
"name": "x-failure-handling",
"value": "connection setup timeout",
"value-is-expression": false
}
]
},
Chaudhari, et al. Expires 5 September 2024 [Page 17]
Internet-Draft CDNI Source Access Control Metadata March 2024
"response-status": "404",
"status-is-expression": false
}
}
}
]
}
}
]
Figure 5
3.1.2. MI.HTTPCodeFailover
MI.HTTPCodeFailover is a new GenericMetadata subobject of
MI.SourceExtended that allows the dCDN to specify how it will handle
HTTP error codes against an origin/uCDN.
The following diagram illustrates the model for a CDN source load
balancer failing over between multiple sources based on HTTP error
code status:
+----------+
1*|---->|EndPoint-1|
Source-1 | +----------+
1* +-----------------------+ |
------------>|HTTPCodeFailover | |
| +-----------------------+ |
| | +----------+
| | 2*|---->|EndPoint-n|
+--------------------+ | +----------+
|Source Load Balancer| |
+--------------------+ | +----------+
| | 1*|---->|EndPoint-1|
| Source-n | +----------+
| +-----------------------+ |
|----------->|HTTPCodeFailover | |
3* +-----------------------+ |
| +----------+
2*|---->|EndPoint-n|
Legend +----------+
1* - primary flow
2* - failover across Endpoints due to HTTP Error codes
3* - failover across Sources after exhausting Endpoints
Figure 6: Failover Model for HTTP status codes
Property: max-reforwards-per-source
Chaudhari, et al. Expires 5 September 2024 [Page 18]
Internet-Draft CDNI Source Access Control Metadata March 2024
* Description: Specifies the upper bound of reforwards allowed
across all endpoints of an MI.SourceExtended object for all
configured HTTP error codes.
* Type: Integer. A value greater than or equal to 0 indicates the
maximum number of retries against all endpoints of the current
MI.SourceExtended object for all configured HTTP error codes.
* Mandatory-to-Specify: No. If not specified, any reforward values
defined within the http-code-failover-actions property are used.
Property: http-code-failover-actions
* Description: Specifies the different HTTP codes for which failover
actions against an origin/uCDN MUST be done.
* Type: Array of MI.HTTPCodeFailoverActions object
* Mandatory-to-Specify: Yes.
Following is an example of MI.HTTPCodeFailover illustrating how
different HTTP error codes from an origin/uCDN can be handled and a
custom response sent to the player/client. In this example, a CDNI
metadata expression user-defined variable named "forward-http-code-
failover" is set with the string value "404-failure".
Chaudhari, et al. Expires 5 September 2024 [Page 19]
Internet-Draft CDNI Source Access Control Metadata March 2024
{
"generic-metadata-type": "MI.HTTPCodeFailover",
"generic-metadata-value": {
"max-reforwards-per-source": 2,
"http-code-failover-actions": [
{
"http-codes": [
"404"
],
"reforwards": {
"max-reforwards-per-source": 1,
"reforwards-per-endpoint": 2
},
"error-state": {
"variable-name": "forward-http-code-failover",
"variable-value": "404-failure"
}
},
{
"http-codes": [
"512"
],
"reforwards": {
"max-reforwards-per-source": 1,
"reforwards-per-endpoint": 2
},
"error-state": {
"variable-name": "forward-http-code-failover",
"variable-value": "404-failure"
}
}
]
}
}
Figure 7
Continuing with the example, the "forward-http-code-failover" user-
defined variable is tested in a subsequent match expression in the
context of the Processing Stages Model [SVTA2032] to trigger an HTTP
response transformation (in this case, the addition of a custom
header).
Chaudhari, et al. Expires 5 September 2024 [Page 20]
Internet-Draft CDNI Source Access Control Metadata March 2024
{
"generic-metadata-type": "MI.ProcessingStages",
"generic-metadata-value": {
"client-response": [
{
"match": "var.forward-http-code-failover == '404-failure'",
"stage-metadata": {
"response-transform": {
"header-transform": {
"add": [
{
"name": "x-failure-handling",
"value": "forward side 404",
"value-is-expression": false
}
]
},
"response-status": "404",
"status-is-expression": false
}
}
}
]
}
}
Figure 8
3.1.2.1. MI.HTTPCodeFailoverActions
MI.HTTPCodeFailoverActions is a subobject of MI.HTTPCodeFailover. It
defines one or more HTTP error codes against which some failover
action MUST be performed.
Property: http-codes
* Description: An array of HTTP response error status codes (see
Sections 15.5 and 15.6 of [RFC9110]) received from an origin/uCDN
for which a failover MUST be performed.
* Type: Array of HTTP response status codes encoded as strings. Any
HTTP status code from 100 to 599, or any of the special values,
"2xx", "3xx", "4xx" or "5xx", where "xx" implies everything from
00 to 99. While repeated and redundant values in the array are
allowed, they SHOULD be avoided for efficiency (no reason to
specify both 5xx and 503, for example).
* Mandatory-to-Specify: Yes
Chaudhari, et al. Expires 5 September 2024 [Page 21]
Internet-Draft CDNI Source Access Control Metadata March 2024
Property: reforwards
* Description: Specifies how the reforwards MUST be done.
* Type: MI.HTTPCodeReforwards object
* Mandatory-to-Specify: Yes
Property: error-state
* Description: Specifies whether to capture any error message for
the current error condition.
* Type: SetVariable object specifying a user-defined variable. See
the Metadata Expression Language (MEL) specification [SVTA2031]
* Mandatory-to-Specify: No. If not specified, a dCDN will not
capture any information about the specific HTTP error code.
3.1.2.2. MI.HTTPCodeReforwards
MI.HTTPCodeReforwards is a subobject of MI.HTTPtpCodeFailoverActions
and allows for the specification of reforwards that MUST occur
against endpoints of an MI.SourceExtended object.
Property: max-reforwards-per-source
* Description: Specifies the maximum number of reforwards that can
be performed across all endpoints of the MI.SourceExtended object
for a given set of HTTP error codes.
* Type: Integer. A value greater than or equal to 0 indicates the
maximum number of reforwards against an MI.SourceExtended object.
A value of 0 indicates that no reforwards will be done against
this source for the given set of HTTP error codes.
* Mandatory-to-Specify: No. If not specified, any reforward values
defined in the reforwards-per-endpoint property are honored
without any caps.
Property: reforwards-per-endpoint
* Description: Specifies the number of reforwards to be performed
across the current endpoint of the MI.SourceExtended object for a
given set of HTTP error codes.
Chaudhari, et al. Expires 5 September 2024 [Page 22]
Internet-Draft CDNI Source Access Control Metadata March 2024
* Type: Integer. A value of greater than or equal to 0 indicates
the number of reforwards against the current endpoint. A value of
0 indicates that no reforwards will be performed against the
current endpoint for the given set of HTTP error codes.
* Mandatory-to-Specify: No. If not specified, the default value is
0.
3.1.3. MI.EndpointDetention
MI.EndpointDetention is a subobject of MI.SourceExtended and is used
to track the health of an endpoint (see [RFC8006] section 4.3.3) and
place it in detention, if deemed unhealthy. Unhealthy endpoints are
not used for future HTTP requests until a set cool-off time is met.
Error-based triggers are defined for which an endpoint can be put in
detention for a given duration of time.
Property: connection-setup-fail-trigger
* Description: A trigger for the connection setup error, including
timeouts for connection establishment, that is fired for a given
threshold of such errors.
* Type: EndpointDetentionTrigger object
* Mandatory-to-Specify: No. If not specified, no health check and
detention is done for connection errors or connection timeouts.
Property: read-timeout-trigger
* Description: A trigger for the byte read timeout error that is
fired for a given threshold of such errors.
* Type: EndpointDetentionTrigger object
* Mandatory-to-Specify: No. If not specified, no health check and
detention is done for both first byte and byte read timeout
errors.
Property: http-error-code-trigger
* Description: A list of HTTP error codes for which a trigger is
fired for a given threshold of such error codes received from an
endpoint.
* Type: HTTPErrorCodeTrigger object
Chaudhari, et al. Expires 5 September 2024 [Page 23]
Internet-Draft CDNI Source Access Control Metadata March 2024
* Mandatory-to-Specify: No. If not specified, no health check and
detention is done upon receiving HTTP error codes.
Property: detention-seconds
* Description: The time, in seconds, for which an endpoint is put in
detention (not used) after any error-based trigger fires.
* Type: Integer. A value greater than 0 defines a time, in seconds,
for which an endpoint is put in detention (not used).
* Mandatory-to-Specify: Yes
3.1.3.1. MI.HTTPErrorCodeTrigger
MI.HTTPErrorCodeTrigger is a subobject of MI.EndpointDetention and
defines a trigger for detention based on HTTP error codes. Any HTTP
code received from an endpoint that matches against the list of
defined HTTP error codes counts against a single EndPointTrigger for
detention.
Property: trigger
* Description: A trigger for HTTP error codes that is fired for a
given threshold of such error codes received in HTTP responses.
* Type: EndpointDetentionTrigger object
* Mandatory-to-Specify: Yes
Property: error-codes
* Description: An array of HTTP error response codes that, when
returned from an endpoint, can cause the endpoint to be triggered
into an unhealthy state.
* Type: Array of HTTP response codes. The error codes are from 400
to 599, or one of the special values "4xx" or "5xx", where "xx"
implies everything from 00 to 99.
* Mandatory-to-Specify: Yes
3.1.3.2. MI.EndpointDetentionTrigger
MI.EndpointDetentionTrigger is a subobject of MI.EndpointDetention
and defines a trigger for a specific kind of error against an
endpoint.
Chaudhari, et al. Expires 5 September 2024 [Page 24]
Internet-Draft CDNI Source Access Control Metadata March 2024
Property: trigger-value
* Description: The threshold at which an endpoint is triggered to
unhealthy state and put in detention.
* Type: EndpointRepeatingFailures object
* Mandatory-to-Specify: Yes
3.1.3.3. MI.EndpointRepeatingFailures
MI.EndpointRepeatingFailures is a subobject of
MI.EndpointDetentionTrigger and triggers an endpoint to a failure
state if "event-count" of errors takes place during "time-window-
millisec", while accounting for at least "fail-event-percent-
threshold"% of the transactions to this endpoint during this period.
Property: event-count
* Description: The number of errors against an endpoint within a
duration of time-window-millsec.
* Type: Integer. A value greater than 0.
* Mandatory-to-Specify: Yes
Property: time-window-millsec
* Description: The duration, in milliseconds, for which error
statistics of event-count and fail-event-percent-threshold are
tracked against an endpoint.
* Type: Integer. A value greater than 0.
* Mandatory-to-Specify: Yes
Property: fail-event-percent-threshold
* Description: The minimum percentage of errors against an endpoint
within a duration of time-window-millsec.
* Type: Integer. A value greater than or equal to 0.
* Mandatory-to-Specify: No. If not specified, an endpoint is
triggered to an unhealthy state after encountering event-count
errors without regards to the overall percentage of such errors.
Chaudhari, et al. Expires 5 September 2024 [Page 25]
Internet-Draft CDNI Source Access Control Metadata March 2024
The following example shows the first MI.SourceExtended object
(sources property) with an EndpointDetention object (endpoint-
detention property) for the three error conditions of connection
setup, read timeout, and HTTP error codes.
The trigger for connection setup errors will put the endpoint in an
unhealthy state when there are three such errors within 1000
milliseconds, as long as 10% of attempts to establish a connection
(and not HTTP requests) against the endpoint have failed within that
time duration.
The trigger for read timeout errors is configured to fire for three
such errors within 1000 milliseconds without any condition for error
percentage.
The trigger for HTTP error codes is configured to fire for 404 and
5xx response codes with at least one such HTTP code received from the
endpoint within 1000 milliseconds.
{
"generic-metadata-type": "MI.SourceMetadataExtended",
"generic-metadata-value": {
"sources": [
{
"endpoints": [
"a.origin-tier1.com",
"b.origin-tier1.com",
"c.origin-tier1.com"
],
"protocol": "http/1.1",
"timeout-ms": "4000",
"failover-errors": [
"502",
"503",
"504",
"500"
],
"endpoint-detention": {
"connection-setup-fail-trigger": {
"trigger-type": "MI.EndpointRepeatingFailures",
"trigger-value": {
"event-count": 3,
"time-window-millisec": 1000,
"fail-event-percent-threshold": 10
}
},
"read-timeout-trigger": {
"trigger-type": "MI.EndpointRepeatingFailures",
Chaudhari, et al. Expires 5 September 2024 [Page 26]
Internet-Draft CDNI Source Access Control Metadata March 2024
"trigger-value": {
"event-count": 3,
"time-window-millisec": 1000
}
},
"http-error-code-trigger": {
"error-codes": [
"404, 5xx"
],
"trigger": {
"trigger-type": "MI.EndpointRepeatingFailures",
"trigger-value": {
"event-count": 1,
"time-window-millisec": 1000
}
}
},
"detention-seconds": 60
}
},
{
"endpoints": [
"origin-tier2.com"
],
"protocol": "http/1.1"
}
]
}
}
Figure 9
3.2. MI.SourceDetention
MI.SourceDetention is a subobject of MI.SourceMetadataExtended and
defines detention rules at the set of sources.
Property: detention-full-behavior
* Description: Defines how a response is constructed when every
endpoint of each MI.SourceMetadata has been put in detention.
* Type: DetentionFullBehavior object
* Mandatory-to-Specify: No. If not specified, the dCDN-specific
behavior is used.
Property: detention-reset-behavior
Chaudhari, et al. Expires 5 September 2024 [Page 27]
Internet-Draft CDNI Source Access Control Metadata March 2024
* Description: After every endpoint of each MI.SourceMetadata is put
in detention, it defines early removal of an endpoint from
detention without having served the full duration of detention.
* Type: DetentionResetBehavior object
* Mandatory-to-Specify: No. If not specified, an endpoint is
removed from detention only upon the completion of the detention
duration.
3.2.1. MI.DetentionFullBehavior
A uCDN can configure how a response is constructed when all endpoints
are in detention.
Property: serve-if-stale-available
* Description: A stale version of the requested object is served
back to the client. If no stale objects exist, other properties
of MI.DetentionFullBehavior apply.
* Type: Boolean
* Mandatory-to-Specify: No. The default value is "False", in which
case other properties of MI.DetentionFullBehavior apply.
Property: synthetic-response
* Description: The synthetic response to return back to the client.
* Type: MI.SyntheticResponse object. See the Processing Stages
Metadata Specification [SVTA2032]
* Mandatory-to-Specify: No. If not specified, the dCDN-specific
error response is used.
3.2.2. MI.DetentionResetBehavior
When all endpoints of an MI.SourceMetadata are put in detention, this
object allows a uCDN to define the early removal of an endpoint from
detention. All endpoints removed from detention through this
behavior are available for immediate use for all subsequent client
requests.
Property: reset-endpoints
Chaudhari, et al. Expires 5 September 2024 [Page 28]
Internet-Draft CDNI Source Access Control Metadata March 2024
* Description: The list of endpoints to be removed from detention
after no healthy endpoints are available across all
MI.SourceExtended objects.
* Type: Array of endpoint objects.
* Mandatory-to-Specify: No. The default value is an empty array,
indicating that no endpoints can be removed early from detention.
Property: reset-all-endpoints
* Description: All endpoints are removed from detention after no
healthy endpoints are available across all MI.SourceExtended
objects.
* Type: Boolean
* Mandatory-to-Specify: No. The default value is "False",
indicating that no endpoints can be removed early from detention.
The following example shows two MI.SourceExtended objects, each with
two endpoints. A detention trigger of type HTTPErrorCodeTrigger for
the first source and connection setup failure for the second source
are also defined, with each endpoint set to be put in detention for
60 seconds. For the case when all endpoints are put in detention,
the defined MI.SourceDetention object allows for the return of a
stale version of the object and fallback to return a 502 if no stale
object is found. Additionally, the "a2.origin-tier2.com" endpoint is
set for early removal from detention.
{
"generic-metadata-type": "MI.SourceMetadataExtended",
"generic-metadata-value": {
"sources": [
{
"endpoints": [
"a1.origin-tier1.com",
"b1.origin-tier1.com",
"c.origin-tier1.com"
],
"failover-errors": [
"502",
"503",
"504",
"500"
],
"endpoint-detention": {
"http-error-code-trigger": {
Chaudhari, et al. Expires 5 September 2024 [Page 29]
Internet-Draft CDNI Source Access Control Metadata March 2024
"error-codes": [
"404, 5xx"
],
"trigger": {
"trigger-type": "MI.EndpointRepeatingFailures",
"trigger-value": {
"event-count": 1,
"time-window-millisec": 1000
}
}
},
"detention-seconds": 60
}
},
{
"endpoints": [
"a2.origin-tier2.com",
"b2.origin-tier2.com"
],
"timeout-ms": 4000,
"endpoint-detention": {
"connection-setup-fail-trigger": {
"trigger-type": "MI.EndpointRepeatingFailures",
"trigger-value": {
"event-count": 3,
"time-window-millisec": 1000,
"fail-event-percent-threshold": 10
}
},
"detention-seconds": 60
}
}
],
"source-detention": {
"detention-full-behavior": {
"serve-if-stale-available": true,
"synthetic-response": {
"headers": [
{
"name": "x-error-reason",
"value": "all sources in detention"
}
],
"response-status": 502,
"response-body":
"req.uri . 'is unavailable due to origin errors'",
"body-is-expression": true
}
Chaudhari, et al. Expires 5 September 2024 [Page 30]
Internet-Draft CDNI Source Access Control Metadata March 2024
},
"detention-reset-behavior": {
"reset-endpoints": [
"a2.origin-tier2.com"
],
"reset-all-endpoints": true
}
}
}
}
Figure 10
3.3. MI.LoadBalanceMetadata
The MI.LoadBalanceMetadata object is a subobject of
MI.SourceMetadataExtended,defining how content acquisition requests
are distributed over the MI.SourceExtended objects listed in the
MI.SourceMetadataExtended object.
Property: balance-algorithm
* Description: Specifies the algorithm to be used when distributing
content acquisition requests over the sources in an
MI.SourceMetadataExtended object. The available algorithms are:
o random: Requests are distributed over the sources in proportion to
their associated weights.
o content-hash: Requests are distributed over the sources in a
consistent fashion, based on the balance-path-pattern property.
o ip-hash: Requests are distributed over the sources in a consistent
fashion based on the IP address of the client requestor.
* Type: String, one of the following: random | content-hash | ip-
hash
* Mandatory-to-Specify: No. The default is to use sources in
preference order as defined in the MI.SourceMetadataExtended
object.
Property: balance-weights
* Description: Specifies the relative frequency that a source is
used when distributing requests. For example, if there are three
MI.SourceExtended objects in a MI.SourceMetadataExtended object
Chaudhari, et al. Expires 5 September 2024 [Page 31]
Internet-Draft CDNI Source Access Control Metadata March 2024
with balance-weights [1, 2, 1], source 1 will receive 1/4 of the
requests, source 2 will receive 2/4 of the requests, and source 3
will receive 1/4 of the requests.
* Type: Array of integers
* Mandatory-to-Specify: No. The default is to use sources in
preference order as defined in the MI.SourceMetadataExtended
object.
Property: balance-path-pattern
* Description: This property specifies a regular expression pattern
to apply to the URI when calculating the content hash used by the
balance-algorithm. For example, "balance-path-pattern":
"^/prod/(.*)/.*\.ts$" would distribute requests based on the URI
but exclude the /prod prefix and the .ts segment file.
* Type: String (regular expression)
* Mandatory-to-Specify: No. The default is to use the original URI.
In example 1, the MI.LoadBalanceMetadata object distributes content
acquisition requests over sources using a content-hash algorithm:
{
"generic-metadata-type": "MI.LoadBalanceMetadata",
"generic-metadata-value": {
"balance-algorithm": "content-hash",
"balance-path-pattern": "^/prod/(.*)/.*\\.ts$"
}
}
Figure 11
In example 2, the MI.LoadBalanceMetadata object distributes content
acquisition requests over sources using the random algorithm:
{
"generic-metadata-type": "MI.LoadBalanceMetadata",
"generic-metadata-value": {
"balance-algorithm": "random",
"balance-weights": [
1,2, 1
]
}
}
Chaudhari, et al. Expires 5 September 2024 [Page 32]
Internet-Draft CDNI Source Access Control Metadata March 2024
Figure 12
4. New Authentication Types
To meet the typical industry requirements for authenticating CDNs to
external origins, two new authentication types are defined
(MI.HeaderAuth and MI.AWSv4Auth) to be used within the MI.Auth object
defined in [RFC8006], section 4.2.7 These authentication types are
designed to leverage the SVTA/CDNI Protected Secrets Metadata
standard, allowing for sensitive values to be protected by
referencing them from an external keystore as an alternative to
embedding them in the clear in the configuration metadata.
4.1. MI.HeaderAuth
The MI.HeaderAuth metadata object is used in the auth-value property
of the
MI.Auth object, as defined in [RFC8006] section 4.2.7, and MAY be
applied to any
source by including or referencing it under its authentication
property. This method of authentication provides a simple capability
for a mutually agreed upon header to be added by the CDN to all
requests sent to a specific source/origin. Note that if a
dynamically generated header value is required, the RequestTransform
capabilities within StageProcessing can be used as an alternative to
synthesize a value.
Property: header-name
* Description: The name of the authentication header.
* Type: String
* Mandatory-to-Specify: Yes
Property: header-value
* Description: The value of the authentication header (typically a
pre-shared key).
* Type: MI.SecretValue object that can either contain the header
value in the clear (not recommended) or as a reference to the
header value in an external key store. See the Protected Secrets
Metadata standard [SVTA2039] for more details.
Chaudhari, et al. Expires 5 September 2024 [Page 33]
Internet-Draft CDNI Source Access Control Metadata March 2024
* Mandatory-to-Specify: Yes
In the following example the Auth object is used for header
authentication, referencing an external key vault for the protected
header value:
{
"generic-metadata-type": "MI.SourceMetadataExtended",
"generic-metadata-value": {
"sources": [
{
"endpoints": [
"origin.example.com"
],
"protocol": "http/1.1",
"acquisition-auth": {
"generic-metadata-type": "MI.Auth",
"generic-metadata-value": {
"auth-type": "MI.HeaderAuth",
"auth-value": {
"header-name": "X-Origin-Auth",
"header-value": {
"secret-store-id": "my-key-vault",
"secret-path":
"/source/keys/origin.example.com_header"
}
}
}
}
}
]
}
}
Figure 13
4.2. MI.AWSv4Auth
The MI.AWSv4Auth metadata object is used in the auth-value property
of the MI.Auth object as defined in [RFC8006] section 4.2.7, and MAY
be applied to any source by including or referencing it under its
authentication property.
Chaudhari, et al. Expires 5 September 2024 [Page 34]
Internet-Draft CDNI Source Access Control Metadata March 2024
AWSv4 authentication causes upstream requests to have a signature
applied, following the method described in [AWSv4]. A hash-based
signature is calculated over the request URI and specified headers,
and is provided in an Authorization: header on the upstream request.
The signature is tied to a pre-shared secret key specific to an AWS
service, region, and key ID.
Property: access-key-id
* Description: The preconfigured ID of the pre-shared authorization
secret.
* Type: String
* Mandatory-to-Specify: Yes
Property: secret-access-key
* Description: The pre-shared authorization secret, which is the
basis of building the signature.
* Type: MI.SecretValue object that can either contain the access key
in the clear (not recommended) or as a reference to the access key
in an external key store. See [SVTA2039] for more details.
* Mandatory-to-Specify: Yes
Property: aws-region
* Description: The AWS region name that is hosting the service and
shares the key ID and corresponding pre-shared secret.
* Type: String
* Mandatory-to-Specify: Yes
Property: aws-service
* Description: The AWS service name that is serving the upstream
requests.
* Type: String
* Mandatory-to-Specify: No. The default is "s3" if not specified.
Property: host-name
Chaudhari, et al. Expires 5 September 2024 [Page 35]
Internet-Draft CDNI Source Access Control Metadata March 2024
* Description: The host name to use as part of the signature
calculation.
* Type: String
* Mandatory-to-Specify: No. The default is to use the value of the
Host: header of the upstream request. This property is available
in case the application needs to override the default behavior.
In the following example, the Auth object is used for AWSv4
authentication, referencing an external key vault for the protected
access key:
{
"generic-metadata-type": "MI.SourceMetadataExtended",
"generic-metadata-value": {
"sources": [
{
"endpoints": [
"origin.example.com"
],
"protocol": "http/1.1",
"acquisition-auth": {
"generic-metadata-type": "MI.Auth",
"generic-metadata-value": {
"auth-type": "MI.AWSv4Auth",
"auth-value": {
"access-key-id": "MYACCESSKEYID",
"secret-access-key": {
"secret-store-id": "my-key-vault",
"secret-path": "/source/keys/aws/s3-key1"
},
"aws-region": "us-west-1",
"aws-service": "s3"
}
}
}
}
]
}
}
Figure 14
Chaudhari, et al. Expires 5 September 2024 [Page 36]
Internet-Draft CDNI Source Access Control Metadata March 2024
5. Security Considerations
The FCI and MI objects defined in the present document are
transferred via the interfaces defined in CDNI [RFC8006] which
describes how to secure these interfaces protecting integrity and
confidentiality while ensuring the authenticity of the dCDN and uCDN.
6. IANA Considerations
6.1. CDNI Payload Types
This document requests the registration of the following entries
under the "CDNI Payload Types" registry hosted by IANA:
Chaudhari, et al. Expires 5 September 2024 [Page 37]
Internet-Draft CDNI Source Access Control Metadata March 2024
+---------------------------------+---------------+
| Payload Type | Specification |
+---------------------------------+---------------+
| MI.SourceMetadataExtended | RFCthis |
+---------------------------------+---------------+
| MI.SourceExtended | RFCthis |
+---------------------------------+---------------+
| MI.SourceConnectionControl | RFCthis |
+---------------------------------+---------------+
| MI.SourceByteReadTimeoutActions | RFCthis |
+---------------------------------+---------------+
| MI.SourceTimeoutActions | RFCthis |
+---------------------------------+---------------+
| MI.SourceConnectionRetries | RFCthis |
+---------------------------------+---------------+
| MI.HTTPCodeFailover | RFCthis |
+---------------------------------+---------------+
| MI.HTTPCodeFailoverActions | RFCthis |
+---------------------------------+---------------+
| MI.HTTPCodeReforwards | RFCthis |
+---------------------------------+---------------+
| MI.EndpointDetention | RFCthis |
+---------------------------------+---------------+
| MI.HTTPErrorCodeTrigger | RFCthis |
+---------------------------------+---------------+
| MI.EndpointDetentionTrigger | RFCthis |
+---------------------------------+---------------+
| MI.EndpointRepeatingFailures | RFCthis |
+---------------------------------+---------------+
| MI.SourceDetention | RFCthis |
+---------------------------------+---------------+
| MI.DetentionFullBehavior | RFCthis |
+---------------------------------+---------------+
| MI.DetentionResetBehavior | RFCthis |
+---------------------------------+---------------+
| MI.LoadBalanceMetadata | RFCthis |
+---------------------------------+---------------+
| MI.HeaderAuth | RFCthis |
+---------------------------------+---------------+
| MI.AWSv4Auth | RFCthis |
+---------------------------------+---------------+
Table 1: CDNI Payload Types
Chaudhari, et al. Expires 5 September 2024 [Page 38]
Internet-Draft CDNI Source Access Control Metadata March 2024
7. Acknowledgements
The authors would like to express their gratitude to the members of
the Streaming Video Technology Alliance [SVTA] Open Caching Working
Group for their guidance / contribution / reviews ...)
Particulary the following people contribute in one or other way to
the content of this draft:
* Guillaume Bichot - Broadpeak
* Christoph Neumann - Broadpeak
* Chris Lemmons - Comcast
* Rajeev RK - picoNETS
* Shmuel Asafi - Qwilt
* Yoav Gressel - Qwilt
* Nir Sopher - Qwilt
* Eric Klein - Sirius XM
* Andrew Ryan - Sirius XM
* Alfonso Siloniz - Telefonica
* Ben Rosenblum - Vecima
* Sanjay Mishra - Verizon
8. Normative References
[RFC1034] Mockapetris, P., "Domain names - concepts and facilities",
STD 13, RFC 1034, DOI 10.17487/RFC1034, November 1987,
<https://www.rfc-editor.org/info/rfc1034>.
[RFC1123] Braden, R., Ed., "Requirements for Internet Hosts -
Application and Support", STD 3, RFC 1123,
DOI 10.17487/RFC1123, October 1989,
<https://www.rfc-editor.org/info/rfc1123>.
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14, RFC 2119,
DOI 10.17487/RFC2119, March 1997,
<https://www.rfc-editor.org/info/rfc2119>.
Chaudhari, et al. Expires 5 September 2024 [Page 39]
Internet-Draft CDNI Source Access Control Metadata March 2024
[RFC8006] Niven-Jenkins, B., Murray, R., Caulfield, M., and K. Ma,
"Content Delivery Network Interconnection (CDNI)
Metadata", RFC 8006, DOI 10.17487/RFC8006, December 2016,
<https://www.rfc-editor.org/info/rfc8006>.
[RFC9110] Fielding, R., Ed., Nottingham, M., Ed., and J. Reschke,
Ed., "HTTP Semantics", STD 97, RFC 9110,
DOI 10.17487/RFC9110, June 2022,
<https://www.rfc-editor.org/info/rfc9110>.
9. Informative References
[AWSv4] AWS, "Authenticating Requests (AWS Signature Version 4)",
<https://docs.aws.amazon.com/AmazonS3/latest/API/sig-v4-
authenticating-requests.html>.
[SVTA] SVTA, "Streaming Video Technology Alliance Home Page",
<https://www.svta.org>.
[SVTA2031] SVTA, "Metadata Expression Language (MEL)",
<https://svta.org/documents/SVTA2031>.
[SVTA2032] SVTA, "Processing Stages Metadata",
<https://svta.org/documents/SVTA2032>.
[SVTA2039] SVTA, "Protected Secrets Metadata",
<https://svta.org/documents/SVTA2039>.
Authors' Addresses
Pankaj Chaudhari
Disney
United States of America
Email: pankaj.chaudhari.pub@gmail.com
Glenn Goldstein
Lumen Technologies
United States of America
Email: glenng1215@gmail.com
Will Power
Lumen Technologies
United States of America
Email: wrpower@gmail.com
Chaudhari, et al. Expires 5 September 2024 [Page 40]
Internet-Draft CDNI Source Access Control Metadata March 2024
Arnon Warshavsky
Qwilt
Israel
Email: arnon@qwilt.com
Chaudhari, et al. Expires 5 September 2024 [Page 41]