local sigv4 = require("assay.aws.sigv4")
local sts = require("assay.aws.sts")
local M = {}
local TOKEN_EXPIRES_SECS = 60
local function base64url(s)
return (base64.encode(s):gsub("+", "-"):gsub("/", "_"):gsub("=", ""))
end
function M.get_token(cluster_name, opts)
opts = opts or {}
local creds = opts.credentials or sts.credentials(opts)
local region = opts.region or env.get("AWS_REGION") or env.get("AWS_DEFAULT_REGION")
or "us-east-1"
local url = sigv4.presign({
access_key = creds.access_key,
secret_key = creds.secret_key,
session_token = creds.session_token,
service = "sts",
region = region,
method = "GET",
host = "sts." .. region .. ".amazonaws.com",
path = "/",
query = { Action = "GetCallerIdentity", Version = "2011-06-15" },
headers = { ["x-k8s-aws-id"] = cluster_name },
expires = TOKEN_EXPIRES_SECS,
time = opts.time,
})
return "k8s-aws-v1." .. base64url(url)
end
return M