Ai_GirlFriend/check_aliyun_account.py

145 lines
5.1 KiB
Python
Raw Normal View History

2026-03-03 19:06:01 +08:00
#!/usr/bin/env python3
"""
查询阿里云账号信息
通过 AccessKey 获取账号详情和权限信息
"""
import os
import sys
from dotenv import load_dotenv
# 加载环境变量
load_dotenv()
def check_account_info():
"""检查阿里云账号信息"""
try:
import oss2
from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.request import CommonRequest
# 从环境变量读取配置
access_key_id = os.getenv('ALIYUN_OSS_ACCESS_KEY_ID')
access_key_secret = os.getenv('ALIYUN_OSS_ACCESS_KEY_SECRET')
print(f"🔍 查询阿里云账号信息...")
print(f" AccessKeyId: {access_key_id}")
if not access_key_id or not access_key_secret:
print("❌ AccessKey 配置不完整")
return False
# 方法1: 通过 OSS 获取账号信息
try:
auth = oss2.Auth(access_key_id, access_key_secret)
# 尝试列出所有 Bucket这会显示账号ID
service = oss2.Service(auth, 'https://oss-cn-hangzhou.aliyuncs.com')
print(f"\n📋 尝试列出该账号下的所有 Bucket...")
buckets = service.list_buckets()
if buckets.buckets:
print(f"✅ 找到 {len(buckets.buckets)} 个 Bucket:")
for bucket in buckets.buckets:
print(f" - {bucket.name} (区域: {bucket.location}, 创建时间: {bucket.creation_date})")
# 检查是否有 nvlovers
if bucket.name == 'nvlovers':
print(f" ✅ 找到目标 Bucket: nvlovers")
return True
print(f"\n❌ 未找到 'nvlovers' Bucket")
print(f"💡 建议使用上述任一 Bucket或创建新的 Bucket")
else:
print(f"❌ 该账号下没有任何 Bucket")
except Exception as e:
print(f"❌ OSS 查询失败: {e}")
# 分析错误类型
error_str = str(e)
if "InvalidAccessKeyId" in error_str:
print("💡 AccessKeyId 无效或不存在")
elif "SignatureDoesNotMatch" in error_str:
print("💡 AccessKeySecret 错误")
elif "AccessDenied" in error_str:
print("💡 AccessKey 权限不足,无法列出 Bucket")
# 方法2: 通过 STS 获取账号信息
try:
print(f"\n🔍 尝试获取账号身份信息...")
client = AcsClient(access_key_id, access_key_secret, 'cn-hangzhou')
request = CommonRequest()
request.set_accept_format('json')
request.set_domain('sts.cn-hangzhou.aliyuncs.com')
request.set_method('POST')
request.set_protocol_type('https')
request.set_version('2015-04-01')
request.set_action_name('GetCallerIdentity')
response = client.do_action_with_exception(request)
import json
result = json.loads(response)
if 'AccountId' in result:
account_id = result['AccountId']
user_id = result.get('UserId', 'N/A')
arn = result.get('Arn', 'N/A')
print(f"✅ 账号信息:")
print(f" 账号ID: {account_id}")
print(f" 用户ID: {user_id}")
print(f" ARN: {arn}")
return True
except ImportError:
print("❌ 阿里云 SDK 未安装,请运行:")
print(" pip install aliyun-python-sdk-core")
print(" pip install aliyun-python-sdk-sts")
except Exception as e:
print(f"❌ STS 查询失败: {e}")
return False
except ImportError:
print("❌ 依赖模块未安装,请运行:")
print(" pip install oss2")
print(" pip install aliyun-python-sdk-core")
return False
except Exception as e:
print(f"❌ 查询失败: {e}")
return False
def suggest_solutions():
"""提供解决方案建议"""
print(f"\n🔧 解决方案建议:")
print(f"1. 如果找到了其他 Bucket修改 .env 中的 ALIYUN_OSS_BUCKET_NAME")
print(f"2. 如果没有 Bucket登录阿里云控制台创建一个:")
print(f" https://oss.console.aliyun.com/")
print(f"3. 如果 AccessKey 权限不足,在 RAM 控制台添加 OSS 权限:")
print(f" https://ram.console.aliyun.com/")
print(f"4. 确保 AccessKey 有以下权限:")
print(f" - oss:ListBuckets")
print(f" - oss:ListObjects")
print(f" - oss:PutObject")
print(f" - oss:DeleteObject")
def main():
print("🚀 开始查询阿里云账号信息...")
success = check_account_info()
if not success:
suggest_solutions()
return 1
return 0
if __name__ == "__main__":
sys.exit(main())