IAM¶
El SDK corre con tus credenciales de AWS (las de quien llama: tu usuario,
el rol de tu servicio, el de tu CI). Esta página dice qué permiso necesita
cada función y qué plantilla de infra/
lo concede.
Las plantillas¶
| Plantilla | Crea | Coste | Cuándo |
|---|---|---|---|
infra/iam.yaml |
el rol de build de la imagen, el execution role opcional y tres políticas del llamante: rayito-m0-launcher-<región> (SandboxLauncherPolicy, sólo lanzar sandboxes), rayito-m0-publisher-<región> (ImagePublisherPolicy, sólo publicar imágenes) y rayito-m0-caller-<región> (CallerPolicy, las dos juntas) |
$0 | siempre (Configurar AWS) |
infra/secrets-access.yaml |
las políticas RayitoSecretsReader y RayitoSecretsAdmin |
$0 | sólo si usas secretos |
infra/metadata-index.yaml |
la tabla DynamoDB y las políticas RayitoIndexWriter y RayitoIndexReader |
$0 en reposo | sólo si usas el índice de metadatos |
infra/egress-connector.yaml |
un conector de red VPC con un security group deny-all | el de tu VPC | sólo si quieres controlar la salida a internet fuera del sandbox (Red saliente) |
infra/templates.yaml |
la política RayitoTemplateBuilder |
$0 | sólo si construyes templates (Template.build, AgentTemplate) (Templates) |
infra/s3-mounts.yaml |
la política RayitoS3MountAccess, para el execution role |
$0 | sólo si usas mounts= (Montajes S3) |
infra/otlp-export.yaml |
la política RayitoOtlpExport, para el execution role |
$0 | sólo si usas telemetry= con OtlpAuth.execution_role() (Exportación OTLP) |
infra/sizes-guard.yaml |
la política RayitoRunAllowedSizes (un Deny) |
$0 | sólo si quieres limitar los tamaños que se lanzan (Tamaños) |
infra/events-webhooks.yaml |
la pila de eventos y las políticas EventsLauncherPolicy, EventsReaderPolicy, EventsWebhookAdminPolicy y EventsOperatorPolicy |
ver Precios | sólo si usas events= (Eventos y webhooks) |
infra/efs-volumes.yaml (experimental) |
EFS en tu VPC, su conector y la política RayitoEfsVolumeClient para el execution role |
ver Precios | sólo si usas volúmenes EFS (Volúmenes EFS en tu VPC) |
infra/custom-domain.yaml (experimental) |
CloudFront, su Function y un KeyValueStore; ningún rol ni política | ver Precios | sólo si usas CustomDomain (Dominio propio) |
Las plantillas opcionales se despliegan con rayito stack deploy <componente>
(o aws cloudformation deploy), que necesita
cloudformation:CreateStack/UpdateStack/DescribeStacks/DeleteStack y los
permisos de lo que crea la plantilla
(Pilas opcionales).
Un servicio en producción sólo lanza sandboxes
Vincula SandboxLauncherPolicy (output SandboxLauncherPolicyArn) al
rol de un servicio o de un agente que crea sandboxes, nunca
CallerPolicy: con ella, quien comprometa ese servicio (un RCE o un
SSRF en el backend del agente) podría publicar una versión con puerta
trasera de rayito-base o de cualquier template, que correría en todos
los sandboxes futuros de la cuenta. Publicar imágenes es cosa del
mantenedor o del pipeline de release, con ImagePublisherPolicy.
Permisos por función¶
| Función | Permisos del llamante | Dónde están |
|---|---|---|
| Crear, conectar, pausar, reanudar, listar y matar sandboxes | lambda:RunMicrovm, GetMicrovm, ListMicrovms, SuspendMicrovm, ResumeMicrovm, TerminateMicrovm, CreateMicrovmAuthToken; las lecturas de imagen con las que el SDK resuelve nombres y tamaños (ListMicrovmImages, GetMicrovmImage, GetMicrovmImageVersion, ListMicrovmImageVersions, ListTags y ListManagedMicrovmImages/ListManagedMicrovmImageVersions); lambda:PassNetworkConnector (conectores gestionados) |
SandboxLauncherPolicy (o CallerPolicy) de infra/iam.yaml |
Publicar y podar imágenes (rayito image) |
lambda:CreateMicrovmImage, UpdateMicrovmImage, UpdateMicrovmImageVersion, DeleteMicrovmImageVersion, GetMicrovmImage*, ListMicrovmImage*, GetMicrovmImageBuild, ListMicrovmImageBuilds, TagResource; iam:PassRole del rol de build; s3:PutObject/GetObject sobre <bucket>/rayito/* y s3:ListBucket |
ImagePublisherPolicy (o CallerPolicy) |
rayito doctor |
lo anterior más servicequotas:ListServiceQuotas (en las tres políticas) y, opcionalmente, iam:SimulatePrincipalPolicy e iam:GetRole; con --efs-vpc-id, ec2:Describe* |
CallerPolicy (salvo la simulación, que se salta si falta, y ec2:Describe*). Con sólo SandboxLauncherPolicy, la simulación avisa (WARN) de las acciones de publicación que faltan: es lo esperado |
| Ejecutar código, comandos, ficheros, PTY, git, métricas | ninguno más: viajan por el canal del sandbox con su access token | — |
Plazo del servidor, update_network, formas de clase |
ninguno más | — |
execution_role_arn= (credenciales dentro del sandbox) |
iam:PassRole sobre ese rol |
SandboxLauncherPolicy o CallerPolicy (para el ExecutionRole de la plantilla) |
URLs de S3 y ficheros grandes (transfer=) |
s3:PutObject, GetObject, DeleteObject, AbortMultipartUpload sobre <bucket>/<prefijo>/* y s3:ListBucket acotado al prefijo |
SandboxLauncherPolicy o CallerPolicy con TransferBucket y TransferPrefix |
Persistencia (persist=) |
ninguno en el llamante; el execution role necesita s3:PutObject, GetObject, AbortMultipartUpload y ListBucket sobre el prefijo |
ExecutionRole con PersistenceBucket y PersistencePrefix |
Secretos: inyectar (secrets=) |
secretsmanager:GetSecretValue y DescribeSecret sobre secret:rayito/*, salvo rayito/webhooks/* (los secretos de firma de webhooks: denegados, y el SDK los rechaza) |
RayitoSecretsReader |
Secretos: CRUD (SecretStore) |
además CreateSecret, PutSecretValue, UpdateSecret, DeleteSecret y ListSecrets |
RayitoSecretsAdmin |
| Secretos con una CMK propia | kms:Decrypt (y kms:GenerateDataKey para escribir), sólo a través de Secrets Manager |
parámetro KmsKeyArn de infra/secrets-access.yaml |
Índice de metadatos: crear con index= |
dynamodb:PutItem sobre la tabla |
RayitoIndexWriter |
Índice de metadatos: listar con index= |
dynamodb:BatchGetItem sobre la tabla |
RayitoIndexReader |
Eventos: lanzar con events= |
secretsmanager:GetSecretValue sobre la clave del stack y cloudformation:DescribeStacks sobre la pila |
EventsLauncherPolicy (pila events-webhooks) |
Eventos: leer (get_events) |
dynamodb:Query sobre las filas de eventos y el índice gsi1, y DescribeStacks |
EventsReaderPolicy |
Eventos: webhooks (register_webhook, list_webhooks, delete_webhook) |
dynamodb:PutItem/DeleteItem/Query sólo sobre filas WEBHOOK, y DescribeStacks |
EventsWebhookAdminPolicy (de operador: los webhooks son de toda la pila) |
Templates (Template.build, rayito template build, AgentTemplate, rayito agent template build) |
lambda:CreateMicrovmImage/UpdateMicrovmImage (nunca sobre rayito-base*), iam:PassRole del rol de build, S3 sobre <bucket>/rayito/templates/* y lectura de los logs de build |
RayitoTemplateBuilder (infra/templates.yaml) |
Agente (sbx.agent.run/.stream) |
ninguno más: viaja por el canal del sandbox. La credencial del modelo llega por la pasarela (gateways=, presets bedrock_gateway…): secretsmanager:GetSecretValue sobre ese secreto, en las credenciales del llamante, no en el execution role. Los permisos de Bedrock son los de la clave de API que guardas en el secreto, no los tuyos |
RayitoSecretsReader (Agente en el sandbox, Pasarela de secretos) |
Montajes S3 (mounts=), telemetría con OtlpAuth.execution_role(), volúmenes EFS |
ninguno en el llamante salvo EFS (elasticfilesystem:CreateAccessPoint/DescribeAccessPoints/DeleteAccessPoint para VolumeStore, ver Volúmenes EFS); el execution role necesita la política de la pila |
RayitoS3MountAccess, RayitoOtlpExport, RayitoEfsVolumeClient |
| Limitar los tamaños que se pueden lanzar | un Deny de RunMicrovm fuera de la lista y de publicar imágenes |
RayitoRunAllowedSizes (pila sizes-guard): sólo para el lanzador, nunca el publicador |
Proxy local (rayito sandbox proxy) |
lambda:GetMicrovm y CreateMicrovmAuthToken |
SandboxLauncherPolicy o CallerPolicy |
Logs de CloudWatch (rayito sandbox logs) |
logs:DescribeLogStreams y logs:GetLogEvents sobre el grupo /rayito/<imagen> |
no viene en la plantilla: añádelo a tu política |
El execution role del sandbox no necesita nada de esto
Las transferencias las firma el SDK con tus credenciales y rayd nunca
guarda credenciales. El execution role sólo hace falta para la
persistencia y para dar a tu código credenciales dentro del sandbox; por
defecto no hay ninguno.
Comprobarlo¶
La comprobación iam-simulation simula las acciones del SDK y la CLI. Es
orientativa: el simulador marca lambda:PassNetworkConnector como
implicitDeny incluso con permisos de administrador, y ese aviso no bloquea
nada.