Palo Alto Networks Prisma AIRS Network Intercept on AWS
๐ต AI Chatbot - Direct
Simple Q&A with Web Search
๐ Key Difference: Tool Calling vs Direct Response
Flow: 1 HTTP POST โ Direct Answer
Sessions: 1 TCP, 1 HTTP POST
Duration: ~3-5 seconds
Tools: None (answers from knowledge)
Flow: 2 HTTP POSTs in loop
Sessions: 1 TCP, 2 HTTP POSTs
Duration: ~10-15 seconds
Tools: search_flights (real data)
๐ก Network Path (Same as Direct Chatbot)
Lambda (10.200.1.147) โ Bedrock (10.200.2.226)
Connection stays OPEN (HTTP Keep-Alive)
โ Request: Query + 4 tool definitions (search_flights, search_hotels, etc.)
โ Goes through: Lambda โ TGW โ Prisma AIRS (SSL decrypt) โ Bedrock
โ Response (00:05): stopReason="tool_use"
โ Claude says: "I need search_flights tool with params: origin=NYC, dest=Paris"
โ ๏ธ Firewall sees: HTTP POST /converse (request + response)
โ Lambda executes search_flights() locally (mock data)
โ Returns: [Flight 1: $715, Flight 2: $728, Flight 3: $747]
โฑ๏ธ Takes ~0.1 seconds (no network call)
โ Request: Tool results (flight data)
โ SAME TCP connection (reused)
โ Goes through: Lambda โ TGW โ Prisma AIRS (SSL decrypt) โ Bedrock
โ Response (00:15): stopReason="end_turn"
โ Claude returns: Formatted answer with flight table
โ ๏ธ Firewall sees: HTTP POST /converse (request + response)
Total Duration: 15 seconds
HTTP POSTs: 2 (both visible on Prisma AIRS)
Destination: 10.200.2.226:443 (Bedrock)
Protocol: SSL/HTTPS
Duration: 15 seconds
Sessions: 1 TCP session
Decrypted: Yes โ
Bytes Transferred: ~8 KB
Time: 00:01
Request Body: Query + tool definitions
Response: tool_use (search_flights)
POST #2: /model/us.anthropic.claude-sonnet-4-6/converse
Time: 00:06
Request Body: Tool results
Response: Final formatted answer
โข ONE TCP session from Lambda to Bedrock (HTTP Keep-Alive)
โข MULTIPLE HTTP POST requests within that session (1 per iteration)
โข All requests visible on Prisma AIRS with SSL decryption
โข Tool execution happens locally in Lambda (no network call)
โข Same network path as Direct Chatbot (10.200.1.91 โ Firewall โ 10.200.2.226)
โข Difference: Direct = 1 HTTP POST, Tool Calling = 2+ HTTP POSTs
๐ข AI Travel Agent
Autonomous Tool Calling (Flights, Hotels, Budget, Itinerary)
Lambda โ TGW โ Prisma AIRS (SSL decrypt) โ Bedrock KB (10.200.2.19)
โ API: bedrock-agent-runtime.retrieve() with query
โ OpenSearch vector search + S3 chunk retrieval
โ Response (00:02): Returns top-K chunks from S3
โ ๏ธ Firewall sees: Query in REQUEST + S3 chunks in RESPONSE
Lambda โ TGW โ Prisma AIRS (SSL decrypt) โ Bedrock Runtime (10.200.2.226)
โ API: bedrock-runtime.invoke_model()
โ Prompt includes: Query + S3 chunks from REQUEST 1
โ Response (00:05): Claude generates answer based on chunks
โ ๏ธ Firewall sees: S3 chunks in REQUEST prompt + Answer in RESPONSE
Total Duration: ~5 seconds
HTTP POSTs: 2 (both visible on Prisma AIRS)
๐ฅ Firewall sees S3 data TWICE:
1. In retrieve() response (chunks with scores)
2. In invoke_model() request (chunks in prompt)
โข Source: 10.200.3.15:xxxxx (RAG Lambda)
โข Dest: 10.200.2.19:443 (Bedrock KB VPC Endpoint)
โข URL: /knowledgebases/{kb-id}/retrieve
โข Method: POST
โข Decrypted: Yes โ
โข Request Body: {"input": {"text": "user query"}}
โข Response Body: S3 chunks with scores
๐ Traffic Log Entry 2 (bedrock-runtime.invoke_model):
โข Source: 10.200.3.15:xxxxx (RAG Lambda)
โข Dest: 10.200.2.226:443 (Bedrock Runtime VPC Endpoint)
โข URL: /model/us.anthropic.claude-sonnet-4-6/invoke
โข Method: POST
โข Decrypted: Yes โ
โข Request Body: {"messages": [{"content": "user query + S3 chunks"}]}
โข Response Body: Claude's answer based on chunks
โ DLP Use Case:
โข Inspect S3 knowledge base content for PII/sensitive data
โข Block SSN, credit cards, credentials in both requests
โข Monitor data exfiltration from knowledge base
โข Perfect visibility: S3 data appears in BOTH network packets
โข Dual Inspection: Firewall sees S3 chunks TWICE (retrieve response + invoke request)
โข Network Path: Lambda (10.200.3.15) โ Firewall โ KB (10.200.2.19) + Runtime (10.200.2.226)
โข Perfect for DLP: Full visibility into knowledge base content in transit
๐ RAG Knowledge Base
Retrieval-Augmented Generation with Dual Inspection
๐ Deploy This Architecture
Complete infrastructure-as-code package to replicate this entire setup in your AWS account. Deploy all 3 AI chatbots with Prisma AIRS firewall providing full SSL decryption and traffic visibility.
Required Before Deployment
Infrastructure (Must Exist)
AWS Account
Tools
API Keys
Creates VPCs, Transit Gateway attachments, IAM roles, and Bedrock VPC endpoints.
cd terraform/shared-infrastructure/
# Configure
cp terraform.tfvars.example terraform.tfvars
vi terraform.tfvars # Update: aws_account_id, tgw_id, prisma_airs_eni_ip
# Deploy
terraform init
terraform plan
terraform apply
โข Transit Gateway attachments and route tables
โข IAM roles for Lambda functions
โข 2 Bedrock VPC Endpoints (Runtime + Agent Runtime)
Deploys Lambda function, API Gateway, S3 bucket, and CloudFront distribution.
cd ../direct-architecture/
# Configure
cp terraform.tfvars.example terraform.tfvars
vi terraform.tfvars # Update: aws_account_id, serpapi_key
# Deploy
terraform init
terraform plan
terraform apply
# Save outputs
terraform output api_gateway_url
terraform output cloudfront_url
โข API Gateway with CORS enabled
โข S3 bucket and CloudFront distribution for web UI
โข Security groups and IAM permissions
Deploys Travel Agent Lambda with tool calling capabilities (flights, weather, hotels).
cd ../travel-agent-architecture/
# Configure
cp terraform.tfvars.example terraform.tfvars
vi terraform.tfvars # Update: aws_account_id, serpapi_key
# Deploy
terraform init
terraform plan
terraform apply
# Save outputs
terraform output api_gateway_url
โข API Gateway with CORS enabled
โข Tool definitions (search_flights, get_weather, book_hotel)
โข Security groups
Deploys RAG Lambda, Bedrock Knowledge Base, and OpenSearch Serverless collection.
cd ../rag-architecture/
# Configure
cp terraform.tfvars.example terraform.tfvars
vi terraform.tfvars # Update: aws_account_id
# Deploy
terraform init
terraform plan
terraform apply
# Upload sample documents
S3_BUCKET=$(terraform output -raw s3_bucket_name)
aws s3 cp sample-doc.pdf s3://${S3_BUCKET}/
# Trigger Knowledge Base sync
KB_ID=$(terraform output -raw knowledge_base_id)
DS_ID=$(terraform output -raw data_source_id)
aws bedrock-agent start-ingestion-job \
--knowledge-base-id $KB_ID \
--data-source-id $DS_ID
โข Bedrock Knowledge Base
โข OpenSearch Serverless collection
โข S3 bucket for documents
โข API Gateway with CORS enabled
Test Direct Chatbot
DIRECT_API=$(terraform output -raw api_gateway_url)
curl -X POST $DIRECT_API \
-H "Content-Type: application/json" \
-d '{"query":"What is AWS Bedrock?"}'
Test Travel Agent
AGENT_API=$(terraform output -raw api_gateway_url)
curl -X POST $AGENT_API \
-H "Content-Type: application/json" \
-d '{"query":"Plan a trip to Paris"}'
Test RAG Chatbot
RAG_API=$(terraform output -raw api_gateway_url)
curl -X POST $RAG_API \
-H "Content-Type: application/json" \
-d '{"query":"Summarize the documents"}'
Verify Prisma AIRS Traffic
2. Filter:
addr.src in 10.200.1.0/24 or addr.src in 10.200.3.0/243. Verify: Decrypted: Yes โ
4. Check full URL path visible
Lambda Timeout
aws ec2 describe-route-tables \
--filters "Name=tag:Name,Values=*chatbot*"
Prisma AIRS Not Seeing Traffic
1. Verify TGW route tables route 10.200.0.0/16 through Security VPC
2. Check Prisma AIRS routes include 10.200.2.0/24
3. Verify TGW attachments are active
RAG Returns No Results
aws s3 cp documents/ s3://YOUR_BUCKET/ --recursive
aws bedrock-agent start-ingestion-job \
--knowledge-base-id YOUR_KB_ID \
--data-source-id YOUR_DS_ID