如何在公开GitHub的Python项目中安全接入Google Drive与AWS数据库?
安全接入Google Drive与AWS数据库的代码实现方案
Google Drive服务账户密钥处理
- 禁止将服务账户JSON文件提交至GitHub仓库,哪怕数据公开,该密钥属于你的Google Cloud身份,泄露后可能被滥用(如操作其他Drive资源、触发配额超限)
- 改用环境变量加载密钥:
import os import json from google.oauth2 import service_account # 从环境变量读取服务账户JSON内容 drive_key_json = json.loads(os.getenv("GOOGLE_DRIVE_SERVICE_ACCOUNT_JSON")) credentials = service_account.Credentials.from_service_account_info(drive_key_json) - 或者通过环境变量指定JSON文件路径,同时在
.gitignore中排除该文件:- 项目根目录创建
.gitignore,添加google-service-account.json(你的JSON文件名) - 代码中读取路径:
import os from google.oauth2 import service_account cred_path = os.getenv("GOOGLE_DRIVE_CRED_PATH") credentials = service_account.Credentials.from_service_account_file(cred_path)
- 项目根目录创建
AWS数据库(MySQL)凭证处理
- 移除硬编码的数据库凭证,改用环境变量读取:
import mysql.connector import os db_connection = mysql.connector.connect( host=os.getenv("AWS_DB_HOST"), user=os.getenv("AWS_DB_USER"), password=os.getenv("AWS_DB_PASSWORD"), database=os.getenv("AWS_DB_NAME") ) - 若部署在AWS环境(如ECS、Lambda),推荐使用AWS Secrets Manager存储凭证,通过boto3获取:
import mysql.connector import boto3 import json # 从Secrets Manager拉取数据库凭证 secrets_manager = boto3.client('secretsmanager') secret_response = secrets_manager.get_secret_value(SecretId='your-db-secret-name') db_credentials = json.loads(secret_response['SecretString']) db_connection = mysql.connector.connect( host=db_credentials['host'], user=db_credentials['username'], password=db_credentials['password'], database=db_credentials['dbname'] ) - 务必在
.gitignore中排除本地测试用的配置文件(如.env、local_config.py),防止误提交。
额外安全建议
- 给Google服务账户配置最小权限:仅分配工具所需的Drive权限(如只读),即便密钥泄露,影响范围也会被限制
- 启用GitHub仓库的Secret Scanning功能,自动检测并提醒敏感密钥的提交
- 不要依赖“数据公开”放松凭证保护,身份凭证泄露可能导致数据被篡改、云服务配额被恶意消耗
内容的提问来源于stack exchange,提问作者jiopla
相关产品推荐
相关产品推荐

