Credenciales temporales (STS)
Genera credenciales S3 que caducan solas y solo pueden acceder a un bucket, sin repartir claves permanentes.
Las credenciales temporales (STS) son una pareja access key + secret key acompañada de un session token, con una fecha de caducidad. Te las genera OtterStorage al instante desde la consola del bucket, dan acceso solo a ese bucket y dejan de funcionar al expirar. Son ideales para CI/CD, scripts y terceros, porque no tienes que entregar claves permanentes.
Cuándo usar credenciales temporales
- Pipelines de CI/CD que suben artefactos o backups: usa credenciales que caduquen al terminar el job.
- Scripts puntuales o tareas programadas que no deben llevar una clave permanente embebida.
- Terceros o colaboradores a los que das acceso acotado y limitado en el tiempo.
- Cualquier caso en el que prefieras que una credencial filtrada expire sola en horas en lugar de seguir siendo válida indefinidamente.
Si necesitas acceso permanente para una integración estable, usa las access keys por bucket. Las temporales y las permanentes conviven sin problema.
Generarlas desde la consola
Las credenciales temporales se emiten desde la propia consola del bucket:
- Abre el bucket en la consola de OtterStorage.
- Ve a la sección Credenciales temporales (STS).
- Elige la duración (por ejemplo 1, 4 o 12 horas) y pulsa Generar credenciales temporales.
- OtterStorage te muestra una sola vez el
access key, elsecret key, elsession tokeny la fecha de caducidad.
El resultado tiene este aspecto:
Access key ID: STSXMPL7TEMP9QZ2A0B
Secret access key: aB3xY9kLpQ7mN2vWcR5tZ8dF1gH4jK6sUe0oI2pL
Session token: FQoGZXIvYXdzE...muy-largo...Q==
Bucket: mi-primer-bucket
Endpoint: https://es-mad-1.s3.otterstorage.io
Caducan: en 1 hora
Cópialas en el momento: igual que con las access keys, el secret y el token no se vuelven a mostrar. No hace falta revocarlas: caducan solas al cumplirse la duración.
Usarlas con AWS CLI
A diferencia de una clave permanente, las credenciales temporales requieren además el session token. Con AWS CLI se pasan por variables de entorno:
export AWS_ACCESS_KEY_ID="STSXMPL7TEMP9QZ2A0B"
export AWS_SECRET_ACCESS_KEY="aB3xY9kLpQ7mN2vWcR5tZ8dF1gH4jK6sUe0oI2pL"
export AWS_SESSION_TOKEN="FQoGZXIvYXdzE...muy-largo...Q=="
export AWS_DEFAULT_REGION="eu-mad"
export AWS_ENDPOINT_URL="https://es-mad-1.s3.otterstorage.io"
# Solo funciona sobre el bucket para el que se generaron
aws s3 ls s3://mi-primer-bucket
Cuando el token caduca, cualquier petición devuelve un error de credenciales expiradas: genera unas nuevas desde la consola.
Usarlas con un SDK (boto3)
Desde código, pasa el aws_session_token junto con las claves al crear el cliente:
import boto3
s3 = boto3.client(
"s3",
endpoint_url="https://es-mad-1.s3.otterstorage.io",
region_name="eu-mad",
aws_access_key_id="STSXMPL7TEMP9QZ2A0B",
aws_secret_access_key="aB3xY9kLpQ7mN2vWcR5tZ8dF1gH4jK6sUe0oI2pL",
aws_session_token="FQoGZXIvYXdzE...muy-largo...Q==",
)
resp = s3.list_objects_v2(Bucket="mi-primer-bucket")
for obj in resp.get("Contents", []):
print(obj["Key"], obj["Size"])
Tareas largas: acceso programático con auto-renovación
Las credenciales temporales no se autorenuevan y duran como máximo 12 horas. Para procesos largos o desatendidos (CI/CD, backups) no querrás regenerarlas a mano. La solución es una credencial de servicio: una clave de larga vida sin permisos S3 cuyo único poder es pedir credenciales temporales de tu bucket (AssumeRole). Tu SDK la usa para renovar solo los tokens cuando caducan.
- Créala en la sección Acceso programático (auto-renovable) del bucket. Se muestra una sola vez su
access key+secret keyy un fragmento listo para copiar. - Es revocable al instante desde la consola; por sí sola no puede tocar S3, solo obtener tokens acotados a ese bucket.
Ejemplo con boto3 que auto-renueva las credenciales (RefreshableCredentials):
import boto3
from botocore.credentials import RefreshableCredentials
from botocore.session import get_session
ENDPOINT = "https://es-mad-1.s3.otterstorage.io"
REGION = "eu-mad"
ROLE_ARN = "arn:aws:iam::RGW...:role/bkr-123"
SVC_KEY = "SVCXMPL..."
SVC_SECRET = "..." # guárdalo en tu gestor de secretos
def _refresh():
sts = boto3.client("sts", endpoint_url=ENDPOINT, region_name=REGION,
aws_access_key_id=SVC_KEY, aws_secret_access_key=SVC_SECRET)
c = sts.assume_role(RoleArn=ROLE_ARN, RoleSessionName="job", DurationSeconds=3600)["Credentials"]
return {"access_key": c["AccessKeyId"], "secret_key": c["SecretAccessKey"],
"token": c["SessionToken"], "expiry_time": c["Expiration"].isoformat()}
sess = get_session()
sess._credentials = RefreshableCredentials.create_from_metadata(_refresh(), _refresh, "sts-assume-role")
s3 = boto3.Session(botocore_session=sess).client("s3", endpoint_url=ENDPOINT, region_name=REGION)
# s3 auto-renueva las credenciales temporales al caducar; el job no se interrumpe.
También puedes usar la librería aws-assume-role-lib, que hace el refresco automático por ti.
Alcance y límites
- Acceso a un solo bucket. Las credenciales solo pueden operar sobre el bucket para el que se generaron; cualquier otro responde
AccessDenied. - Caducan solas. Al cumplirse la duración dejan de funcionar; no se renuevan automáticamente.
- No se almacenan. OtterStorage no guarda el secret ni el token: si los pierdes, genera unos nuevos.
- Sin revocación manual necesaria. Por su corta vida, la forma natural de "cortar" el acceso es esperar a que expiren o rotar la configuración del bucket.
Buenas prácticas
- Elige la duración más corta que cubra tu tarea: menos ventana de exposición.
- Genera unas por tarea/job en lugar de reutilizar las mismas en todo.
- Pásalas por variables de entorno o por tu gestor de secretos, nunca en el código ni en el repositorio.
- Para uso permanente de una integración estable, usa access keys por bucket.
Resumen
- Las credenciales temporales (STS) son
access key+secret key+session tokencon caducidad, limitadas a un bucket. - Se generan en la sección Credenciales temporales (STS) del bucket eligiendo la duración; se muestran una sola vez.
- Para usarlas hay que añadir el
session token(variableAWS_SESSION_TOKENoaws_session_tokenen el SDK). - Caducan solas, solo acceden a su bucket y no se almacenan. Para acceso permanente, usa las access keys por bucket.
¿Y ahora qué? Repasa las access keys por bucket, conecta con AWS CLI o protege objetos críticos con Object Lock.
¿Listo para probarlo?
Crea tu cuenta y genera credenciales en minutos.
