mirror of
https://github.com/awslabs/amazon-bedrock-agentcore-samples.git
synced 2025-09-08 20:50:46 +00:00
189 lines
6.6 KiB
Python
Executable File
189 lines
6.6 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
"""
|
|
Test script to verify AWS authentication setup
|
|
"""
|
|
|
|
import os
|
|
import boto3
|
|
from botocore.exceptions import NoCredentialsError, ProfileNotFound
|
|
from dotenv import load_dotenv
|
|
|
|
def test_aws_authentication():
|
|
"""Test AWS authentication with profile priority"""
|
|
print("AWS Authentication Test")
|
|
print("=" * 40)
|
|
|
|
# Load environment variables
|
|
load_dotenv()
|
|
|
|
aws_profile = os.getenv('AWS_PROFILE', 'default')
|
|
aws_region = os.getenv('AWS_REGION', 'us-east-1')
|
|
|
|
print(f"AWS Profile: {aws_profile}")
|
|
print(f"AWS Region: {aws_region}")
|
|
print()
|
|
|
|
# Test 1: Try AWS profile first
|
|
print("1. Testing AWS Profile Authentication...")
|
|
try:
|
|
session = boto3.Session(profile_name=aws_profile, region_name=aws_region)
|
|
sts = session.client('sts')
|
|
identity = sts.get_caller_identity()
|
|
|
|
print("✅ AWS Profile authentication successful!")
|
|
print(f" Account: {identity.get('Account', 'Unknown')}")
|
|
print(f" User/Role: {identity.get('Arn', 'Unknown').split('/')[-1]}")
|
|
print(f" Region: {aws_region}")
|
|
return session, "profile"
|
|
|
|
except ProfileNotFound:
|
|
print(f"⚠️ AWS profile '{aws_profile}' not found")
|
|
except NoCredentialsError:
|
|
print(f"⚠️ No credentials found for profile '{aws_profile}'")
|
|
except Exception as e:
|
|
print(f"⚠️ Profile authentication failed: {e}")
|
|
|
|
# Test 2: Fallback to access keys
|
|
print("\n2. Testing Access Key Authentication...")
|
|
aws_access_key = os.getenv('AWS_ACCESS_KEY_ID')
|
|
aws_secret_key = os.getenv('AWS_SECRET_ACCESS_KEY')
|
|
|
|
if aws_access_key and aws_secret_key:
|
|
try:
|
|
session = boto3.Session(
|
|
aws_access_key_id=aws_access_key,
|
|
aws_secret_access_key=aws_secret_key,
|
|
region_name=aws_region
|
|
)
|
|
sts = session.client('sts')
|
|
identity = sts.get_caller_identity()
|
|
|
|
print("✅ Access key authentication successful!")
|
|
print(f" Account: {identity.get('Account', 'Unknown')}")
|
|
print(f" Access Key: {aws_access_key[:8]}...")
|
|
print(f" Region: {aws_region}")
|
|
return session, "access_keys"
|
|
|
|
except Exception as e:
|
|
print(f"❌ Access key authentication failed: {e}")
|
|
else:
|
|
print("❌ No AWS access keys found in environment")
|
|
|
|
print("\n❌ No valid AWS authentication method found!")
|
|
return None, None
|
|
|
|
def test_bedrock_access(session):
|
|
"""Test access to Amazon Bedrock"""
|
|
print("\n3. Testing Amazon Bedrock Access...")
|
|
|
|
if not session:
|
|
print("❌ No valid AWS session available")
|
|
return False
|
|
|
|
try:
|
|
bedrock = session.client('bedrock')
|
|
# Try to list foundation models
|
|
response = bedrock.list_foundation_models()
|
|
|
|
# Check if Claude models are available
|
|
claude_models = [
|
|
model for model in response.get('modelSummaries', [])
|
|
if 'claude' in model.get('modelId', '').lower()
|
|
]
|
|
|
|
print("✅ Amazon Bedrock access successful!")
|
|
print(f" Available models: {len(response.get('modelSummaries', []))}")
|
|
print(f" Claude models: {len(claude_models)}")
|
|
|
|
# Check for the specific model we use
|
|
target_model = "anthropic.claude-3-5-sonnet-20241022-v2:0"
|
|
model_available = any(
|
|
model.get('modelId') == target_model
|
|
for model in response.get('modelSummaries', [])
|
|
)
|
|
|
|
if model_available:
|
|
print(f"✅ Target model '{target_model}' is available")
|
|
else:
|
|
print(f"⚠️ Target model '{target_model}' not found")
|
|
print(" Available Claude models:")
|
|
for model in claude_models[:3]: # Show first 3
|
|
print(f" - {model.get('modelId')}")
|
|
|
|
return True
|
|
|
|
except Exception as e:
|
|
print(f"❌ Bedrock access failed: {e}")
|
|
print(" Make sure your AWS account has access to Amazon Bedrock")
|
|
return False
|
|
|
|
def test_agentcore_permissions(session):
|
|
"""Test AgentCore permissions"""
|
|
print("\n4. Testing AgentCore Permissions...")
|
|
|
|
if not session:
|
|
print("❌ No valid AWS session available")
|
|
return False
|
|
|
|
try:
|
|
from bedrock_agentcore.tools.code_interpreter_client import code_session
|
|
|
|
# Test code session creation and execution
|
|
region = session.region_name or 'us-east-1'
|
|
|
|
with code_session(region) as code_client:
|
|
# Try to execute a simple test
|
|
response = code_client.invoke("executeCode", {
|
|
"code": "print('AgentCore permissions test successful')",
|
|
"language": "python",
|
|
"clearContext": True
|
|
})
|
|
|
|
# Check if we got a valid response
|
|
for event in response["stream"]:
|
|
result = event.get("result", {})
|
|
if not result.get("isError", False):
|
|
print("✅ AgentCore permissions verified!")
|
|
print(" You can use full AgentCore code execution")
|
|
return True
|
|
|
|
return False
|
|
|
|
except Exception as e:
|
|
print(f"⚠️ AgentCore permissions not available: {e}")
|
|
print(" The application will use Strands simulation instead")
|
|
print(" This is normal if you don't have bedrock-agentcore permissions")
|
|
return False
|
|
|
|
def main():
|
|
"""Run all authentication tests"""
|
|
session, auth_method = test_aws_authentication()
|
|
|
|
if session:
|
|
bedrock_ok = test_bedrock_access(session)
|
|
agentcore_ok = test_agentcore_permissions(session)
|
|
|
|
print("\n" + "=" * 40)
|
|
print("🎯 Authentication Summary:")
|
|
print(f" Method: {auth_method.title().replace('_', ' ')}")
|
|
print(f" Bedrock Access: {'✅' if bedrock_ok else '❌'}")
|
|
print(f" AgentCore Access: {'✅' if agentcore_ok else '⚠️'}")
|
|
|
|
if bedrock_ok:
|
|
print("\n🎉 Ready to run the application!")
|
|
if agentcore_ok:
|
|
print(" Full AgentCore code execution available")
|
|
else:
|
|
print(" Will use Strands simulation for code execution")
|
|
else:
|
|
print("\n❌ Bedrock access required. Check your AWS permissions.")
|
|
|
|
return 0 if bedrock_ok else 1
|
|
else:
|
|
print("\n❌ AWS authentication failed. Check your credentials.")
|
|
return 1
|
|
|
|
if __name__ == "__main__":
|
|
import sys
|
|
sys.exit(main())
|