#cloud-front #routing #client #label #amazon #codec #dns

amazon-cloudfront-client-routing-lib

a library to encode and decode dns labels

1 stable release

1.0.0 Aug 14, 2023

#6 in #cloud-front

Apache-2.0

50KB
645 lines

Amazon CloudFront Client Routing Library

The Amazon CloudFront Client Routing Library is an open-source library designed for CloudFront's Client Routing feature, which is used direct client devices to CloudFront Points of Presence (POPs) with greater precision. Client Routing feature utilizes information present within a specially formatted DNS label, and this library provides functions to encode and decode such DNS labels.

What is Client Routing?

Client Routing is a new feature from CloudFront which utilizes client subnet information encoded in a DNS label to route traffic to CloudFront POPs. In addition to utilizing this library, this feature has associated prerequisites such as using Route53 and requiring certificate updates. Documentation for Client Routing will be released in the near future, but if you are interested in using this feature sooner, please reach out to AWS Support to know more.

How to Use the Amazon CloudFront Client Routing Library?

There are two main functions in the library: encode_request_data and decode_request_data.

Encoding

encode_request_data takes three parameters: client_ip, content_group_id, and fqdn. A Client Routing label is generated from this data and then that label is returned prepended as a subdomain to the fqdn.

The content_group_id is set aside for future use and must be set to an empty string for now.

let encoded_label = amazon_cloudfront_client_routing_lib::encode_request_data("1.2.3.4", "", "example.com"); // encoded_label is abacaqdaaaaaaaamaaaaaaaaaaaaa.example.com

Decoding

decode_request_data takes one parameter: domain. A result containing either a DecodedClientRoutingLabel struct or a DecodeLengthError is returned with each field set according to the domain. The domain can be either a FQDN or just the Client Routing label.

let decoded_label = amazon_cloudfront_client_routing_lib::decode_request_data("abacaqdaaaaaaaamaaaaaaaaaaaaa").unwrap();
// DecodedClientRoutingLabel {
//     client_sdk_version: 1,
//     is_ipv6: false,
//     client_subnet: [1, 2, 3, 0, 0, 0, 0, 0],
//     subnet_mask: 24,
//     cgid: 0,
// }
let decoded_label = amazon_cloudfront_client_routing_lib::decode_request_data("abacaqdaaaaaaaamaaaaaaaaaaaaa.example.com").unwrap();
// DecodedClientRoutingLabel {
//     client_sdk_version: 1,
//     is_ipv6: false,
//     client_subnet: [1, 2, 3, 4, 0, 0, 0, 0],
//     subnet_mask: 24,
//     cgid: 0,
// }

If the first dns label of the domain is an invalid Client Routing label (eg. improper length) then the result will contain an error.

let decoded_label = amazon_cloudfront_client_routing_lib::decode_request_data("abacaqdaaaaaaaamnjg3oubcyv").unwrap();
// DecodeLengthError {
//     num_chars: 26,
//     expected_num_chars: 29   
// }

License

This library is licensed under the Apache 2.0 License.

Dependencies

~150KB