AWS S3 Proxy: TCL iRule
Problem this snippet solves:
Create a secure proxy to AWS S3 via iRule/IRuleLX
Related Article: Creating a Secure AWS S3 Proxy with F5 iRulesLX
How to use this snippet:
- Install iRule via iRulesLX Workspace
- Create iRulesLX plugin
- Create AWS role or IAM credentials
- Create FQDN pool to AWS S3
- Create Virtual Server
- Enable OneConnect and WebAcceleration profiles
- Assign iRule to Virtual Server
Code :
when HTTP_REQUEST {
set orig_path [string trimleft [HTTP::path] "/"]
set key "s3:$orig_path"
set data [table lookup -notouch $key]
if { $data eq "" } {
set RPC_HANDLE [ILX::init aws_s3_rpc_plugin aws_s3_rpc_ext]
set rpc_response [ILX::call $RPC_HANDLE aws_s3_rpc_add_creds $orig_path]
set qs [ lindex $rpc_response 0]
set expires [lindex $rpc_response 1]
set time_to_expires [lindex $rpc_response 2]
# save value in cache
table set $key $qs $time_to_expires $time_to_expires
} else {
# use cached value
set qs $data
}
}
when HTTP_REQUEST_SEND {
clientside {
HTTP::header replace Host "secure-bucket.s3.amazonaws.com"
# specify bucket
HTTP::uri "/$orig_path?$qs"
#log local0. "https://secure-bucket.s3.amazonaws.com[HTTP::uri]"
}
}
when HTTP_RESPONSE {
# remove identifying data
HTTP::header remove "Server"
HTTP::header remove "x-amz-id-2"
HTTP::header remove "x-amz-request-id"
if { [HTTP::status] contains "403"} {
HTTP::respond 404 content "not found"
}
}Tested this on version:
13.0Published Jul 21, 2017
Version 1.0Eric_Chen
Employee
Joined May 16, 2013
Eric_Chen
Employee
Joined May 16, 2013
No CommentsBe the first to comment