startuppalrag / app /utils /verify_aws_credentials.py
kashif12123's picture
Upload 78 files
e34506d verified
Raw
History Blame Contribute Delete
4.6 kB
#!/usr/bin/env python3
"""
A utility script to verify AWS credentials by connecting to an S3 bucket.
"""
import os
import sys
import boto3
from botocore.exceptions import ClientError
from dotenv import load_dotenv
def verify_aws_credentials(bucket_name=None, aws_access_key_id=None, aws_secret_access_key=None, region_name=None):
"""
Verifies if the provided AWS credentials are valid by attempting to list objects in the specified bucket.
Args:
bucket_name (str): Name of the S3 bucket to connect to
aws_access_key_id (str): AWS access key ID
aws_secret_access_key (str): AWS secret access key
region_name (str): AWS region name
Returns:
bool: True if credentials are valid, False otherwise
"""
try:
# Create an S3 client
s3 = boto3.client(
's3',
aws_access_key_id=aws_access_key_id,
aws_secret_access_key=aws_secret_access_key,
region_name=region_name
)
# Try to list objects in the bucket (only requesting max 1 item to minimize data transfer)
response = s3.list_objects_v2(Bucket=bucket_name, MaxKeys=1)
# If we get here, the credentials are valid
print(f"✅ AWS credentials verification successful!")
print(f"✅ Successfully connected to bucket: {bucket_name}")
# Optionally print the first object if any exist
if 'Contents' in response and len(response['Contents']) > 0:
print(f"✅ First object in bucket: {response['Contents'][0]['Key']}")
else:
print("ℹ️ The bucket is empty.")
return True
except ClientError as e:
error_code = e.response.get('Error', {}).get('Code', 'Unknown')
error_message = e.response.get('Error', {}).get('Message', str(e))
print(f"❌ AWS credentials verification failed!")
print(f"❌ Error code: {error_code}")
print(f"❌ Error message: {error_message}")
if error_code == 'InvalidAccessKeyId':
print("ℹ️ The AWS Access Key ID you provided does not exist in our records.")
elif error_code == 'SignatureDoesNotMatch':
print("ℹ️ The AWS Secret Access Key you provided is incorrect.")
elif error_code == 'AccessDenied':
print("ℹ️ The provided credentials do not have permission to access this bucket.")
elif error_code == 'NoSuchBucket':
print(f"ℹ️ The bucket '{bucket_name}' does not exist.")
return False
except Exception as e:
print(f"❌ An unexpected error occurred: {str(e)}")
return False
def main():
"""Main function to run the script."""
# Load environment variables from .env file
load_dotenv()
# Get credentials from environment variables or command line arguments
bucket_name = os.getenv('AWS_S3_BUCKET_NAME')
aws_access_key_id = os.getenv('AWS_ACCESS_KEY_ID')
aws_secret_access_key = os.getenv('AWS_SECRET_ACCESS_KEY')
region_name = os.getenv('AWS_REGION', 'us-east-1') # Default to us-east-1 if not specified
# Override with command line arguments if provided
if len(sys.argv) > 1:
bucket_name = sys.argv[1]
if len(sys.argv) > 2:
aws_access_key_id = sys.argv[2]
if len(sys.argv) > 3:
aws_secret_access_key = sys.argv[3]
if len(sys.argv) > 4:
region_name = sys.argv[4]
# Check if required parameters are provided
if not all([bucket_name, aws_access_key_id, aws_secret_access_key]):
print("❌ Missing required parameters!")
print("Required parameters can be provided as environment variables or command line arguments:")
print(" - AWS_S3_BUCKET_NAME / 1st argument: S3 bucket name")
print(" - AWS_ACCESS_KEY_ID / 2nd argument: AWS access key ID")
print(" - AWS_SECRET_ACCESS_KEY / 3rd argument: AWS secret access key")
print(" - AWS_REGION / 4th argument: AWS region name (default: us-east-1)")
print("\nUsage: python verify_aws_credentials.py [bucket_name] [access_key_id] [secret_access_key] [region]")
sys.exit(1)
# Verify the credentials
success = verify_aws_credentials(
bucket_name=bucket_name,
aws_access_key_id=aws_access_key_id,
aws_secret_access_key=aws_secret_access_key,
region_name=region_name
)
# Exit with appropriate status code
sys.exit(0 if success else 1)
if __name__ == "__main__":
main()