Intermedia un rol de nube de corta duración
Mantén una concesión sobre un rol, asúmelo mediante el plano para obtener una credencial corta, úsala y libera la concesión.
iam.assumecoordination.lease
Mantén una concesión sobre un rol, asúmelo mediante el plano para obtener una credencial corta, úsala y libera la concesión.
iam.assumecoordination.leasePasa por Intramedial acciones de agentes, hashes de contenido, pruebas de API, DNS, webhooks, llamadas LLM y commits. Obtén un recibo firmado que cualquiera verifica, sin fiarse de nadie.
Los agentes no deberían tener claves permanentes de la nube. El intermediario comprueba el rol contra las clases protegidas, exige una concesión vigente sobre el ARN exacto del rol en poder del agente y luego pide a STS una sesión. La emisión queda en el libro mayor con el actor, el rol y el vencimiento, nunca las claves.
La respuesta incluye la clave de acceso secreta y el token de sesión una sola vez, y el libro mayor nunca los guarda. Liberar la concesión no revoca una credencial ya emitida: dura hasta expirationMs. STS rechaza sesiones de menos de 900 segundos.
arn:aws:iam::El código lee la clave de INTRAMEDIAL_KEY. Guárdala en tu shell o en tu almacén de secretos, nunca en un archivo que suba al repositorio. Las llamadas que requieren una persona con sesión iniciada no pueden usar una clave: las hace la consola.
Toma una concesión sobre el ARN exacto del rol, como el agente que lo usará. La vida de la credencial está limitada por el tiempo restante de la concesión.
assumed es true; siguen la concesión y el vencimiento.
{
"assumed": true,
"roleArn": "arn:aws:iam::123456789012:role/deploy",
"sessionName": "release-agent",
"leaseId": "lease_4b7e",
"leaseScoped": true,
"expirationMs": ,
: ,
: ,
:
}expirationMs.iam.assumeiam-assumecoordination.leasecoordination-lease
curl -sS -X POST https://api.intramedial.com/api/v1/acp/coordination/lease \
-H "Authorization: Bearer $INTRAMEDIAL_KEY" \
-H "Content-Type: application/json" \
-d '{
"resource": "arn:aws:iam::123456789012:role/deploy",
"actorDid": "did:web:acme.example:agent:release"
}'const res = await fetch("https://api.intramedial.com/api/v1/acp/coordination/lease", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.INTRAMEDIAL_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
resource: "arn:aws:iam::123456789012:role/deploy",
actorDid: "did:web:acme.example:agent:release",
}),
});
console.log(res.status, await res.json());import os, requests
res = requests.post(
"https://api.intramedial.com/api/v1/acp/coordination/lease",
headers={"Authorization": "Bearer " + os.environ["INTRAMEDIAL_KEY"]},
json={
"resource": "arn:aws:iam::123456789012:role/deploy",
"actorDid": "did:web:acme.example:agent:release",
},
timeout=30,
)
print(res.status_code, res.json())Envía el rol, el agente, un nombre de sesión y el token de identidad web. La respuesta incluye el secreto una sola vez, así que guárdalo donde los registros no lo vean.
curl -sS -X POST https://api.intramedial.com/api/v1/acp/iam/assume \
-H "Authorization: Bearer $INTRAMEDIAL_KEY" \
-H "Content-Type: application/json" \
-d '{
"roleArn": "arn:aws:iam::123456789012:role/deploy",
"actorDid": "did:web:acme.example:agent:release",
"sessionName": "release-agent",
"webIdentityToken": "eyJ…"
}'
# Save the answer to assume.json: it holds the secret once, so keep it out of logs.const res = await fetch("https://api.intramedial.com/api/v1/acp/iam/assume", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.INTRAMEDIAL_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
roleArn: "arn:aws:iam::123456789012:role/deploy",
actorDid: "did:web:acme.example:agent:release",
sessionName: "release-agent",
webIdentityToken: "eyJ…",
}),
});
console.log(res.status, await res.json());import os, requests
res = requests.post(
"https://api.intramedial.com/api/v1/acp/iam/assume",
headers={"Authorization": "Bearer " + os.environ["INTRAMEDIAL_KEY"]},
json={
"roleArn": "arn:aws:iam::123456789012:role/deploy",
"actorDid": "did:web:acme.example:agent:release",
"sessionName": "release-agent",
"webIdentityToken": "eyJ…",
},
timeout=30,
)
print(res.status_code, res.json())Exporta las claves para el único trabajo que las necesita. Duran hasta expirationMs, el vencimiento que STS informa para la sesión.
export AWS_ACCESS_KEY_ID=$(jq -r .accessKeyId assume.json)
export AWS_SECRET_ACCESS_KEY=$(jq -r .secretAccessKey assume.json)
export AWS_SESSION_TOKEN=$(jq -r .sessionToken assume.json)
# jq -r .expirationMs assume.json when STS says the credential endsLibera la concesión cuando termine el trabajo. Eso impide que se emita la siguiente credencial. No retira las ya emitidas, que duran hasta expirationMs. Para vigilar ráfagas de solicitudes, watchdog.check lee los eventos iam.assume.
curl -sS -X POST https://api.intramedial.com/api/v1/acp/coordination/release \
-H "Authorization: Bearer $INTRAMEDIAL_KEY" \
-H "Content-Type: application/json" \
-d '{
"resource": "arn:aws:iam::123456789012:role/deploy",
"actorDid": "did:web:acme.example:agent:release"
}'const res = await fetch("https://api.intramedial.com/api/v1/acp/coordination/release", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.INTRAMEDIAL_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
resource: "arn:aws:iam::123456789012:role/deploy",
actorDid: "did:web:acme.example:agent:release",
}),
});
console.log(res.status, await res.json());import os, requests
res = requests.post(
"https://api.intramedial.com/api/v1/acp/coordination/release",
headers={"Authorization": "Bearer " + os.environ["INTRAMEDIAL_KEY"]},
json={
"resource": "arn:aws:iam::123456789012:role/deploy",
"actorDid": "did:web:acme.example:agent:release",
},
timeout=30,
)
print(res.status_code, res.json())Copiado de: /docs/iam-assume
expirationMs.El libro mayor es de solo anexado y está sellado bajo raíces de Merkle. La hora de una entrada es el reloj propio de Intramedial, y un paquete firmado puede verificarse sin conexión con la clave publicada.
Toma una concesión exclusiva sobre un recurso con coordination.lease, mira quién la tiene y suéltala cuando termine.
coordination.leaseLee el libro mayor en busca de ráfagas, picos y silencio en eventos de concesiones y credenciales, y ejecuta la comprobación desde tu propio programador.
watchdog.checkPregunta al plano si un agente puede actuar sobre una fuente de SaaS conectada y lee el veredicto antes de enviar nada.
saas.admitUn email breve cuando añadimos recetas. Ningún otro correo, y puedes darte de baja desde cualquier mensaje.
Sin cuenta: 35 llamadas en 7 días en las rutas attest, con recibos marcados como de prueba. Regístrate cuando quieras seguir.