curl --request GET \
--url https://iam.basaltic.sh/v1/sts-sessions \
--header 'Authorization: Bearer <token>'import requests
url = "https://iam.basaltic.sh/v1/sts-sessions"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://iam.basaltic.sh/v1/sts-sessions', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://iam.basaltic.sh/v1/sts-sessions",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://iam.basaltic.sh/v1/sts-sessions"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://iam.basaltic.sh/v1/sts-sessions")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://iam.basaltic.sh/v1/sts-sessions")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"sts_sessions": [
{
"id": "f6a7b8c9-d0e1-2345-6789-0abcdef12345",
"role_id": "b2c3d4e5-f6a7-8901-2345-67890abcdef1",
"principal_id": "550e8400-e29b-41d4-a716-446655440000",
"principal_type": "service_account",
"session_name": "deploy-session",
"created_at": "2026-01-15T09:30:00Z",
"expires_at": "2026-01-15T10:30:00Z",
"last_used_at": "2026-01-15T09:45:00Z",
"revoked": false,
"revoked_at": "2026-01-15T10:00:00Z",
"revoked_reason": "Security incident response",
"source_ip": "203.0.113.42",
"user_agent": "basaltic-cli/1.4.0",
"account_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"account_handle": "<string>",
"source_account_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"source_principal_type": "<string>",
"source_principal_crn": "<string>",
"parent_session_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"grant_type": "<string>",
"crn": "crn:iam::production:sts-session/550e8400-e29b-41d4-a716-446655440001"
}
],
"meta": {
"total": 150,
"limit": 20,
"marker": "550e8400-e29b-41d4-a716-446655440000",
"has_more": true
}
}{
"error": {
"code": "UNAUTHORIZED",
"message": "Authentication required",
"request_id": "550e8400-e29b-41d4-a716-446655440000"
}
}{
"error": {
"code": "ACCESS_DENIED",
"message": "You don't have permission to perform this action",
"request_id": "550e8400-e29b-41d4-a716-446655440000"
}
}Listar sesiones STS
Muestra las sesiones STS (asunción de rol) activas y recientes para la cuenta seleccionada. Requiere permiso iam:ListSTSSessions.
curl --request GET \
--url https://iam.basaltic.sh/v1/sts-sessions \
--header 'Authorization: Bearer <token>'import requests
url = "https://iam.basaltic.sh/v1/sts-sessions"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://iam.basaltic.sh/v1/sts-sessions', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://iam.basaltic.sh/v1/sts-sessions",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://iam.basaltic.sh/v1/sts-sessions"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://iam.basaltic.sh/v1/sts-sessions")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://iam.basaltic.sh/v1/sts-sessions")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"sts_sessions": [
{
"id": "f6a7b8c9-d0e1-2345-6789-0abcdef12345",
"role_id": "b2c3d4e5-f6a7-8901-2345-67890abcdef1",
"principal_id": "550e8400-e29b-41d4-a716-446655440000",
"principal_type": "service_account",
"session_name": "deploy-session",
"created_at": "2026-01-15T09:30:00Z",
"expires_at": "2026-01-15T10:30:00Z",
"last_used_at": "2026-01-15T09:45:00Z",
"revoked": false,
"revoked_at": "2026-01-15T10:00:00Z",
"revoked_reason": "Security incident response",
"source_ip": "203.0.113.42",
"user_agent": "basaltic-cli/1.4.0",
"account_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"account_handle": "<string>",
"source_account_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"source_principal_type": "<string>",
"source_principal_crn": "<string>",
"parent_session_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"grant_type": "<string>",
"crn": "crn:iam::production:sts-session/550e8400-e29b-41d4-a716-446655440001"
}
],
"meta": {
"total": 150,
"limit": 20,
"marker": "550e8400-e29b-41d4-a716-446655440000",
"has_more": true
}
}{
"error": {
"code": "UNAUTHORIZED",
"message": "Authentication required",
"request_id": "550e8400-e29b-41d4-a716-446655440000"
}
}{
"error": {
"code": "ACCESS_DENIED",
"message": "You don't have permission to perform this action",
"request_id": "550e8400-e29b-41d4-a716-446655440000"
}
}iam:ListSTSSessions. Consulte permisos de IAM para obtener la lista completa, lo que cubre cada una y un ejemplo de directiva.Autorizaciones
Un token bearer de OAuth 2.0, enviado como Authorization: Bearer <token>. Esta es la forma recomendada de autenticación.
Obtén el token intercambiando el par de claves de acceso de una cuenta de servicio en POST /v1/oauth/token con grant_type=client_credentials. Es el flujo estándar de credenciales de cliente; las bibliotecas compatibles con OAuth pueden obtener y renovar el token por ti.
curl -s -u "$KEY_ID:$SECRET" -d grant_type=client_credentials \
https://iam.basaltic.sh/v1/oauth/token
Los tokens duran una hora por defecto. El mismo par de claves de acceso también sirve como credencial AWS SigV4 para el endpoint de objetos compatible con S3, que solo acepta ese método de autenticación.
Parámetros de consulta
Nombre exacto del recurso, combinado con crn usando AND antes de la paginación. Los valores vacíos son filtros. Los recursos sin nombre nunca coinciden.
CRN exacto devuelto, combinado con el nombre usando AND antes de la paginación. Los CRN mal formados o vacíos devuelven 400; los CRN válidos no coincidentes o extranjeros devuelven una página vacía. Los recursos sin un CRN nunca coinciden. Los CRN de ámbito de organización usan la organización autenticada.
UUID de rol, nombre inmutable o CRN de rol calificado por cuenta.
"b2c3d4e5-f6a7-8901-2345-67890abcdef1"
Referencia principal; principal_type es obligatorio. Los usuarios y las sesiones de rol asumido aceptan UUID o CRN; las cuentas de rol y servicio también aceptan nombres en la cuenta propietaria.
"550e8400-e29b-41d4-a716-446655440000"
Filtrar por tipo de principal. assumed_role selecciona las sesiones que produce la cadena de roles, donde una sesión de rol asumido existente asumió otro rol.
user, service_account, role, assumed_role "service_account"
Mostrar solo las sesiones activas (no expiradas, no revocadas)
true
Número máximo de artículos a devolver. Un valor por encima del máximo se le aplica en lugar de rechazarlo, por lo que una página más corta que la que solicitaste es normal — page until meta.has_more es falso, no hasta que una página se vea corta.
1 <= x <= 100Cursor de paginación opaco. Hacer eco del valor meta.marker de la página anterior para buscar la siguiente; no construirlo ni analizarlo. La forma interna del token varía según el punto final (un ID de recurso, una marca de tiempo, etc.) y no se garantiza su estabilidad entre versiones.

