• redaccion@screenai.es
Cómo activar AWS Bedrock en Europa con modelos Anthropic Claude: guía completa de errores y soluciones reales

Cómo activar AWS Bedrock en Europa con modelos Anthropic Claude: guía completa de errores y soluciones reales

Si quieres usar Claude en producción cumpliendo RGPD con data residency EU estricto, AWS Bedrock es una de las mejores opciones. Pero el proceso de activación tiene trampas no documentadas que pueden costar horas de debug. Aquí están todas las que nos encontramos y cómo las resolvimos.

Activar AWS Bedrock con modelos Anthropic Claude en una región europea no es trivial. Los errores que aparecen son crípticos (INVALID_PAYMENT_INSTRUMENT cuando tienes tarjeta válida, Operation not allowed cuando tienes credenciales), y AWS no documenta bien el flujo correcto. Este artículo documenta todos los errores reales que nos encontramos al activar Bedrock EU Geo con modelos Anthropic desde una cuenta AWS europea con facturación empresarial española, y las soluciones concretas para cada uno.

Contexto de la implementación:

Proyecto: plataforma SaaS de chatbots multicanal (WhatsApp, Instagram, Messenger, web).

Stack: Laravel + PHP 8.4 + PostgreSQL 16.

Requisito: data residency EU estricto (RGPD + Schrems II).

Cuenta AWS: abierta hace 2 años, con facturación a nombre de empresa española (Screen Art S.L.).

Región elegida: eu-west-1 (Irlanda).

 

Los 3 tipos de endpoint Bedrock y por qué importan

Antes de entrar en errores, hay que entender la terminología de AWS. Existen 3 perfiles de inferencia distintos para cada modelo, y elegir el incorrecto puede significar que tus datos crucen el Atlántico sin que lo sepas.

Tipo Prefijo Enrutamiento RGPD
Global Cross-region global.* Cualquier región del mundo No cumple
Geo Cross-region EU eu.* Solo regiones EU (Irlanda, Frankfurt, París, Milán, Estocolmo, Londres, Zúrich) Sí cumple
In-region puro sin prefijo Solo la región que llamas Sí cumple

Conclusión técnica: para RGPD estricto en producción, usa siempre el prefijo eu. con región eu-west-1 o eu-central-1. El problema es que muchos modelos nuevos solo existen como inference profile eu.*, no como in-region puro. Lo implementamos automáticamente en el código según la región del AWSProvider.

 

Error #1: “Class BedrockRuntimeClient not found”

Síntoma

Class "Aws\BedrockRuntime\BedrockRuntimeClient" not found

Causa

Al ejecutar composer require aws/aws-sdk-php desde una shell con el directorio de trabajo en un directorio distinto al del proyecto Laravel, composer instala el SDK en el directorio padre incorrecto. El autoload de Laravel no lo encuentra.

Solución

Forzar el working dir en composer:

composer --working-dir=/ruta/absoluta/al/proyecto require aws/aws-sdk-php

Verificar que se creó la carpeta vendor/aws/aws-sdk-php/src/BedrockRuntime/.

 

Error #2: “ValidationException: Operation not allowed”

Síntoma

ValidationException: Operation not allowed

Causa

El usuario IAM que genera las credenciales AWS no tiene permiso para invocar modelos Bedrock. Las credenciales son válidas (AWS autentica) pero la operación está denegada.

Solución

Consola AWS → IAM → Users → tu usuario → Permissions → Add permissions → Attach policies directly → marcar AmazonBedrockFullAccess. Para producción restrictiva, crear policy custom con solo bedrock:InvokeModelbedrock:Converse y bedrock:InvokeModelWithResponseStream.

Recomendación: policy defensiva anti-fuga regional.

Añade esta policy inline que bloquea cualquier llamada Bedrock fuera de EU a nivel de AWS, más allá de lo que haga tu código:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "DenyBedrockOutsideEU",
            "Effect": "Deny",
            "Action": "bedrock:*",
            "Resource": "*",
            "Condition": {
                "StringNotEquals": {
                    "aws:RequestedRegion": [
                        "eu-west-1",
                        "eu-central-1",
                        "eu-west-3",
                        "eu-south-1",
                        "eu-north-1",
                        "eu-west-2",
                        "eu-central-2"
                    ]
                }
            }
        }
    ]
}
 

Error #3: “The provided model identifier is invalid”

Síntoma

ValidationException: The provided model identifier is invalid.

Causa

El model ID no corresponde con ningún modelo publicado por AWS en esa región. Las causas más comunes: el sufijo de versión/fecha cambia (20250929 vs 20251101), el modelo no está disponible en esa región EU (está solo en US), o usas el formato “comercial” en vez del modelId técnico.

Solución

Enumerar los IDs reales desde el SDK probando candidatos:

$candidates = [
    'eu.anthropic.claude-opus-4-5-20251029-v1:0',
    'eu.anthropic.claude-opus-4-5-20251101-v1:0',
];
foreach ($candidates as $id) {
    try {
        $client->converse([
            'modelId' => $id,
            'messages' => [['role' => 'user', 'content' => [['text' => 'ping']]]],
            'inferenceConfig' => ['maxTokens' => 5],
        ]);
        echo "$id OK\n";
    } catch (Exception $e) {
        echo "$id FAIL: " . $e->getMessage() . "\n";
    }
}

IDs correctos verificados (abril 2026) en Bedrock EU Irlanda:

Modelo comercial ModelId Bedrock EU
Claude Haiku 3 eu.anthropic.claude-3-haiku-20240307-v1:0
Claude Haiku 4.5 eu.anthropic.claude-haiku-4-5-20251001-v1:0
Claude Sonnet 4.5 eu.anthropic.claude-sonnet-4-5-20250929-v1:0
Claude Opus 4.5 eu.anthropic.claude-opus-4-5-20251101-v1:0
Amazon Nova Micro eu.amazon.nova-micro-v1:0
Amazon Nova Lite eu.amazon.nova-lite-v1:0
Amazon Nova Pro eu.amazon.nova-pro-v1:0
Mixtral 8x7B mistral.mixtral-8x7b-instruct-v0:1
 

Error #4: “INVALID_PAYMENT_INSTRUMENT” — el más complicado

Síntoma

AccessDeniedException: Model access is denied due to INVALID_PAYMENT_INSTRUMENT: A valid payment instrument must be provided. Your AWS Marketplace subscription for this model cannot be completed at this time.

Este es el error que más confusión genera. El mensaje dice “payment instrument” pero puede fallar aunque tengas tarjeta válida añadida. La razón es cómo funciona AWS Marketplace con productos de terceros (Anthropic, Mistral), que es diferente a productos nativos de AWS (Nova, Llama vía Meta directo).

La secuencia real que ocurre

Cuando invocas un modelo Claude por API, AWS intenta auto-crear una suscripción en Marketplace a ese producto. Para ello necesita: método de pago verificado completamente (estado “Verified”), datos fiscales completos (CIF/VAT), y dirección de facturación completa. Si algo falla, AWS crea un agreement con precio $0.00, lo marca “Terminated” inmediatamente, y te devuelve INVALID_PAYMENT_INSTRUMENT. Recibes dos emails casi simultáneos: uno “agreement accepted” y otro “agreement expired”. Cada intento fallido genera un nuevo agreement fantasma en tu historial.

Por qué nuestra cuenta fallaba

Teníamos varios problemas acumulados: American Express marcada como default había caducado (AWS intentaba cargar ahí primero), SEPA bank account recién añadida con mandato pendiente de 3-7 días bancarios, y Visa añadida al final pero no marcada aún como default. En nuestro caso acumulamos 8 agreements fantasma antes de resolver el problema.

Solución paso a paso (la que funcionó)

1. Limpiar métodos de pago caducados. Consola AWS → Billing and Cost Management → Preferencias de pago → Métodos de pago. Eliminar tarjetas caducadas, dejar solo los métodos activos y verificados.

2. Añadir tarjeta de crédito verificable al instante. Las cuentas SEPA tardan 3-7 días en verificar. Si necesitas desbloquear rápido: agregar una Visa/Mastercard (personal o empresa). AWS hace autorización de 1€ y la verificación es instantánea. Marcarla como “Predeterminado”.

3. Verificar datos fiscales. Configuración de impuestos en Billing: país España, CIF/VAT completo (ej. ESB57029415), estado “Verificado”.

4. Descartar Private Marketplace. Si tu cuenta está en una AWS Organization, puede haber restricciones. Busca “Private Marketplace” en la consola. Si ves “No le rige una experiencia de Private Marketplace”, no es tu problema.

5. SUSCRIBIRSE MANUALMENTE a cada modelo Anthropic. Este es el paso crítico que muchos se saltan.

Consola AWS → AWS Marketplace → Discover products.

Buscar por ejemplo: “Claude Haiku 4.5 (Amazon Bedrock Edition)”.

Click en el producto → “View purchase options” → “Continue to Subscribe” → Aceptar términos → Subscribe.

Esperar el email “agreement accepted” SIN el email “expired” posterior.

Repetir para cada modelo Claude que quieras usar (Haiku 3, Haiku 4.5, Sonnet 4.5, Opus 4.5).

6. Verificar en Marketplace → Manage subscriptions. Deben aparecer como suscripciones activas, no Terminated. Esperar 2-5 minutos para propagación y probar de nuevo.

 

Error #5: Modelos legacy sin perfil EU visible en Playground

En la UI de Bedrock Playground, al seleccionar Claude Haiku 3 no aparece la opción “EU Anthropic Claude Haiku 3”. Solo aparece “Bajo demanda”. Esto sugiere que el modelo no tiene Geo EU estricto. Pero es engañoso.

La UI de Playground oculta inference profiles que sí existen por API. El modelo sí tiene perfil Geo EU disponible. Solo hay que invocarlo con el prefijo eu. desde código:

$client->converse([
    'modelId' => 'eu.anthropic.claude-3-haiku-20240307-v1:0',
    ...
]);

La UI simplemente no lista el selector visual, pero el endpoint está activo.

 

Error #6: Agreements “Terminated” acumulados en Marketplace

Al entrar a AWS Marketplace → Manage subscriptions → Inactive, aparece una lista de 5, 8, 10 agreements del mismo modelo Claude, todos con estado “Terminated” y fechas consecutivas.

Cada vez que una invocación API falla por INVALID_PAYMENT_INSTRUMENT, AWS genera un nuevo agreement fantasma. No tienen impacto real: son solo registros de auditoría. No se pueden borrar. Cuando finalmente creas una suscripción exitosa, aparece como nueva entrada en “Active” y las “Terminated” quedan como historia. Si sigues acumulándolos tras resolver pagos, revisa que el usuario IAM no esté reintentando masivamente.

 

Diferencias entre proveedores Bedrock: por qué Amazon Nova funciona y Claude no

Nova no pasa por AWS Marketplace. Son modelos de AWS directo. Por eso en pruebas iniciales, cuando Claude fallaba con INVALID_PAYMENT_INSTRUMENT, Nova Micro, Lite y Pro respondían perfectamente. Si estás bloqueado con Claude pero necesitas producción, empieza con Amazon Nova.

Proveedor Facturación Verificación tarjeta Velocidad activación
Amazon Nova AWS directo No aplica Instantáneo
Meta Llama AWS directo No aplica Instantáneo
Mistral AWS Marketplace Sí requiere Rápido (~5 min)
Anthropic Claude AWS Marketplace Sí requiere Suscripción manual + propagación
Cohere AWS Marketplace Sí requiere Rápido
OpenAI GPT-OSS AWS Marketplace Sí requiere Rápido

Regla general: si tu proveedor pasa por Marketplace, asegúrate primero de tener tarjeta verificada antes de intentar usarlo.

 

Almacenamiento seguro de credenciales

Una vez todo funcionó, las credenciales AWS quedan guardadas encriptadas en base de datos con Laravel Crypt::encryptString() (AES-256). Las claves nunca aparecen en texto plano en logs, base de datos ni código fuente. Solo se desencriptan al momento de instanciar el cliente AWS:

$client = new BedrockRuntimeClient([
    'region' => $credentials['aws_region'],
    'credentials' => [
        'key'    => Crypt::decryptString($credentials['aws_access_key_id']),
        'secret' => Crypt::decryptString($credentials['aws_secret_access_key']),
    ],
]);
 

Garantías RGPD obtenidas

Tras resolver todos los errores, la configuración final proporciona: región AWS fijada a eu-west-1 (Irlanda), prefijo eu. automático en todos los modelIds para Geo Cross-region EU, IAM policy defensiva que bloquea regiones no-EU, facturación AWS EMEA SARL (Luxemburgo) en EUR, CIF empresarial verificado, AWS DPA (Data Processing Addendum) firmado automáticamente, y credenciales AWS encriptadas AES-256 en base de datos. Documentación legal suficiente para responder a cualquier auditor RGPD.

 

Checklist final de activación

Si estás intentando activar AWS Bedrock EU con Claude y te sale algún error, sigue este orden:

# Paso
1 AWS SDK PHP instalado en el directorio correcto del proyecto (composer --working-dir=...)
2 IAM user con policy AmazonBedrockFullAccess
3 Policy IAM defensiva anti-fuga regional (recomendado)
4 Método de pago verificado (tarjeta de crédito = instantáneo; SEPA = 3-7 días)
5 Tarjeta activa marcada como “Predeterminado”
6 Tarjetas caducadas eliminadas
7 CIF/VAT verificado en Configuración de impuestos
8 Dirección fiscal completa
9 Private Marketplace no activo o con productos aprobados
10 Suscripción MANUAL a cada producto Claude en Marketplace (crítico)
11 Suscripciones confirmadas en “Active” (no Terminated)
12 Probar primero con Amazon Nova (no necesita Marketplace) → si funciona, código OK
13 Probar Claude solo después de tener suscripciones activas
14 Usar prefijo eu. en modelIds cuando región es eu-*
 

Precios resultantes del stack completo

Una vez resueltos todos los errores, el stack multi-proveedor con data residency EU estricto queda así:

Caso de uso Modelo Precio / 1M tokens
Chat económico Nova Micro desde $0.035 input / $0.14 output
Chat con visión Nova Lite $0.06 / $0.24
Chat premium Claude Haiku 4.5 EU desde $1.10
Razonamiento top Claude Sonnet 4.5 EU desde $3.30
Fallback open-source Mixtral 8x7B ~$0.45

Todo bajo el mismo paraguas de AWS, con facturación unificada, DPA firmado y garantías RGPD contractuales. El coste total de las pruebas de activación fue de $0.002 (4 tests Claude + 8 tests Nova/Mixtral). Las pruebas en Bedrock son insignificantes en coste.

 

Escrito tras resolver un caso real de activación Bedrock EU + Anthropic desde cuenta AWS europea con facturación empresarial española. Abril 2026.

Comentarios (0)

No hay comentarios todavía.

Dejar un Comentario

Tu email se usa para moderación anti-spam y no se muestra públicamente.

Pulsa Enter para buscar o Esc para cerrar