新增 OCI 访问配置指南和自动化脚本
All checks were successful
Build and Push OCI GenAI Gateway Docker Image / docker-build-push (push) Successful in 31s

This commit is contained in:
2025-12-09 15:16:18 +08:00
parent 42222744c7
commit 9098c61c6c
5 changed files with 823 additions and 26 deletions

443
script/setup-oci-genai-access.sh Executable file
View File

@@ -0,0 +1,443 @@
#!/bin/bash
################################################################################
# OCI Generative AI 访问配置脚本
#
# 功能:
# 1. 创建用于 Generative AI 的用户组
# 2. 创建并配置 IAM 策略
# 3. 创建新用户并添加到组
# 4. 提供 API Key 创建指引
#
# 使用方法:
# bash setup-oci-genai-access.sh
#
# 环境要求:
# - Oracle Cloud Shell 或已配置 OCI CLI 的环境
################################################################################
set -e # 遇到错误立即退出
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# 打印带颜色的消息
print_info() {
echo -e "${BLUE} $1${NC}"
}
print_success() {
echo -e "${GREEN}$1${NC}"
}
print_warning() {
echo -e "${YELLOW}⚠️ $1${NC}"
}
print_error() {
echo -e "${RED}$1${NC}"
}
print_header() {
echo ""
echo -e "${BLUE}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
echo -e "${BLUE} $1${NC}"
echo -e "${BLUE}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
echo ""
}
################################################################################
# 检查 OCI CLI 是否可用
################################################################################
check_oci_cli() {
print_header "检查环境"
if ! command -v oci &> /dev/null; then
print_error "未找到 OCI CLI请确保您在 Oracle Cloud Shell 中运行此脚本"
exit 1
fi
print_success "OCI CLI 已安装"
# 检查 OCI CLI 配置
if ! oci iam region list &> /dev/null; then
print_error "OCI CLI 配置有误,请检查您的认证设置"
exit 1
fi
print_success "OCI CLI 配置正常"
}
################################################################################
# 获取租户信息
################################################################################
get_tenancy_info() {
print_header "获取租户信息"
TENANCY_OCID=$(oci iam availability-domain list --query 'data[0]."compartment-id"' --raw-output)
if [ -z "$TENANCY_OCID" ]; then
print_error "无法获取租户 OCID"
exit 1
fi
TENANCY_NAME=$(oci iam tenancy get --tenancy-id "$TENANCY_OCID" --query "data.name" --raw-output)
print_success "租户名称: $TENANCY_NAME"
print_info "租户 OCID: $TENANCY_OCID"
}
################################################################################
# 获取用户输入
################################################################################
get_user_input() {
print_header "配置信息"
# 默认值
DEFAULT_GROUP_NAME="GenAI-Users"
DEFAULT_USER_NAME="genai-api-user"
DEFAULT_POLICY_NAME="GenAI-Access-Policy"
echo ""
read -p "请输入用户组名称 (默认: $DEFAULT_GROUP_NAME): " GROUP_NAME
GROUP_NAME=${GROUP_NAME:-$DEFAULT_GROUP_NAME}
read -p "请输入用户名 (默认: $DEFAULT_USER_NAME): " USER_NAME
USER_NAME=${USER_NAME:-$DEFAULT_USER_NAME}
read -p "请输入策略名称 (默认: $DEFAULT_POLICY_NAME): " POLICY_NAME
POLICY_NAME=${POLICY_NAME:-$DEFAULT_POLICY_NAME}
echo ""
print_info "配置摘要:"
echo " • 用户组: $GROUP_NAME"
echo " • 用户名: $USER_NAME"
echo " • 策略名: $POLICY_NAME"
echo ""
read -p "确认继续? (y/N): " CONFIRM
if [[ ! $CONFIRM =~ ^[Yy]$ ]]; then
print_warning "已取消操作"
exit 0
fi
}
################################################################################
# 创建用户组
################################################################################
create_group() {
print_header "创建用户组"
# 检查组是否已存在
EXISTING_GROUP=$(oci iam group list --all --query "data[?name=='$GROUP_NAME'].id | [0]" --raw-output 2>/dev/null || echo "")
if [ -n "$EXISTING_GROUP" ] && [ "$EXISTING_GROUP" != "null" ]; then
print_warning "用户组 '$GROUP_NAME' 已存在"
GROUP_OCID=$EXISTING_GROUP
print_info "使用现有用户组 OCID: $GROUP_OCID"
else
print_info "正在创建用户组 '$GROUP_NAME'..."
GROUP_OCID=$(oci iam group create \
--compartment-id "$TENANCY_OCID" \
--name "$GROUP_NAME" \
--description "OCI Generative AI Users Group" \
--query "data.id" \
--raw-output)
if [ -z "$GROUP_OCID" ]; then
print_error "创建用户组失败"
exit 1
fi
print_success "用户组创建成功"
print_info "用户组 OCID: $GROUP_OCID"
fi
}
################################################################################
# 创建策略
################################################################################
create_policy() {
print_header "创建 IAM 策略"
# 检查策略是否已存在
EXISTING_POLICY=$(oci iam policy list --compartment-id "$TENANCY_OCID" --all --query "data[?name=='$POLICY_NAME'].id | [0]" --raw-output 2>/dev/null || echo "")
if [ -n "$EXISTING_POLICY" ] && [ "$EXISTING_POLICY" != "null" ]; then
print_warning "策略 '$POLICY_NAME' 已存在"
POLICY_OCID=$EXISTING_POLICY
print_info "使用现有策略 OCID: $POLICY_OCID"
# 询问是否更新策略
read -p "是否更新现有策略? (y/N): " UPDATE_POLICY
if [[ $UPDATE_POLICY =~ ^[Yy]$ ]]; then
print_info "正在更新策略..."
oci iam policy update \
--policy-id "$POLICY_OCID" \
--statements "[\"ALLOW GROUP $GROUP_NAME to manage generative-ai-family IN TENANCY\"]" \
--force > /dev/null
print_success "策略更新成功"
fi
else
print_info "正在创建策略 '$POLICY_NAME'..."
POLICY_OCID=$(oci iam policy create \
--compartment-id "$TENANCY_OCID" \
--name "$POLICY_NAME" \
--description "Allow $GROUP_NAME group to manage Generative AI services" \
--statements "[\"ALLOW GROUP $GROUP_NAME to manage generative-ai-family IN TENANCY\"]" \
--query "data.id" \
--raw-output)
if [ -z "$POLICY_OCID" ]; then
print_error "创建策略失败"
exit 1
fi
print_success "策略创建成功"
print_info "策略 OCID: $POLICY_OCID"
fi
echo ""
print_info "策略语句:"
echo " ALLOW GROUP $GROUP_NAME to manage generative-ai-family IN TENANCY"
}
################################################################################
# 创建用户
################################################################################
create_user() {
print_header "创建用户"
# 检查用户是否已存在
EXISTING_USER=$(oci iam user list --all --query "data[?name=='$USER_NAME'].id | [0]" --raw-output 2>/dev/null || echo "")
if [ -n "$EXISTING_USER" ] && [ "$EXISTING_USER" != "null" ]; then
print_warning "用户 '$USER_NAME' 已存在"
USER_OCID=$EXISTING_USER
print_info "使用现有用户 OCID: $USER_OCID"
else
print_info "正在创建用户 '$USER_NAME'..."
USER_OCID=$(oci iam user create \
--compartment-id "$TENANCY_OCID" \
--name "$USER_NAME" \
--description "User for accessing OCI Generative AI services via API" \
--query "data.id" \
--raw-output)
if [ -z "$USER_OCID" ]; then
print_error "创建用户失败"
exit 1
fi
print_success "用户创建成功"
print_info "用户 OCID: $USER_OCID"
fi
}
################################################################################
# 将用户添加到组
################################################################################
add_user_to_group() {
print_header "添加用户到组"
# 检查用户是否已在组中
IS_MEMBER=$(oci iam group list-users --group-id "$GROUP_OCID" --query "data[?\"user-id\"=='$USER_OCID'].\"user-id\" | [0]" --raw-output 2>/dev/null || echo "")
if [ -n "$IS_MEMBER" ] && [ "$IS_MEMBER" != "null" ]; then
print_warning "用户 '$USER_NAME' 已在组 '$GROUP_NAME' 中"
else
print_info "正在将用户 '$USER_NAME' 添加到组 '$GROUP_NAME'..."
oci iam group add-user \
--user-id "$USER_OCID" \
--group-id "$GROUP_OCID" > /dev/null
print_success "用户已成功添加到组"
fi
}
################################################################################
# 保存配置信息
################################################################################
save_config() {
CONFIG_FILE="oci-genai-setup-$(date +%Y%m%d-%H%M%S).txt"
cat > "$CONFIG_FILE" << EOF
═══════════════════════════════════════════════════════════════
OCI Generative AI 访问配置信息
═══════════════════════════════════════════════════════════════
创建时间: $(date '+%Y-%m-%d %H:%M:%S')
租户信息
──────────────────────────────────────────────────────────────
名称: $TENANCY_NAME
OCID: $TENANCY_OCID
用户组信息
──────────────────────────────────────────────────────────────
名称: $GROUP_NAME
OCID: $GROUP_OCID
策略信息
──────────────────────────────────────────────────────────────
名称: $POLICY_NAME
OCID: $POLICY_OCID
语句: ALLOW GROUP $GROUP_NAME to manage generative-ai-family IN TENANCY
用户信息
──────────────────────────────────────────────────────────────
名称: $USER_NAME
OCID: $USER_OCID
下一步操作
──────────────────────────────────────────────────────────────
1. 为用户创建 API Key:
- 登录 OCI 控制台
- 导航到: Identity & Security > Users > $USER_NAME
- 点击 "API Keys" > "Add API Key"
- 下载私钥文件并保存公钥指纹
2. 配置 OCI CLI:
- 创建或编辑 ~/.oci/config 文件
- 添加以下配置:
[DEFAULT]
user=$USER_OCID
fingerprint=<从控制台获取>
key_file=~/.oci/oci_api_key.pem
tenancy=$TENANCY_OCID
region=<您的区域,例如: us-chicago-1>
3. 测试配置:
oci iam region list
4. 使用 OCI GenAI Gateway:
- 克隆项目: git clone <repository-url>
- 配置环境变量 (参考 .env.example)
- 启动服务: cd src && python main.py
═══════════════════════════════════════════════════════════════
EOF
print_success "配置信息已保存到: $CONFIG_FILE"
}
################################################################################
# 显示后续步骤
################################################################################
show_next_steps() {
print_header "配置完成"
print_success "所有资源创建成功!"
echo ""
print_info "📋 后续步骤:"
echo ""
echo "1⃣ 创建 API Key"
echo " ┌─────────────────────────────────────────────────────────┐"
echo " │ • 登录 OCI 控制台: │"
echo " │ https://cloud.oracle.com │"
echo " │ │"
echo " │ • 导航到: │"
echo " │ Identity & Security > Users > $USER_NAME"
echo " │ │"
echo " │ • 点击左侧 \"API Keys\" │"
echo " │ │"
echo " │ • 点击 \"Add API Key\" 按钮 │"
echo " │ │"
echo " │ • 选择 \"Generate API Key Pair\" │"
echo " │ │"
echo " │ • 下载私钥文件 (oci_api_key.pem) │"
echo " │ │"
echo " │ • 复制并保存公钥指纹 (fingerprint) │"
echo " └─────────────────────────────────────────────────────────┘"
echo ""
echo "2⃣ 配置 OCI CLI"
echo " ┌─────────────────────────────────────────────────────────┐"
echo " │ 创建或编辑 ~/.oci/config 文件: │"
echo " │ │"
echo " │ [DEFAULT] │"
echo " │ user=$USER_OCID"
echo " │ fingerprint=<从控制台复制的指纹> │"
echo " │ key_file=~/.oci/oci_api_key.pem │"
echo " │ tenancy=$TENANCY_OCID"
echo " │ region=us-chicago-1 # 根据实际区域修改 │"
echo " │ │"
echo " │ 设置私钥文件权限: │"
echo " │ chmod 600 ~/.oci/oci_api_key.pem │"
echo " └─────────────────────────────────────────────────────────┘"
echo ""
echo "3⃣ 测试配置"
echo " ┌─────────────────────────────────────────────────────────┐"
echo " │ 运行以下命令验证配置: │"
echo " │ │"
echo " │ oci iam region list │"
echo " │ │"
echo " │ 如果配置正确,将显示可用区域列表 │"
echo " └─────────────────────────────────────────────────────────┘"
echo ""
echo "4⃣ 部署 OCI GenAI Gateway"
echo " ┌─────────────────────────────────────────────────────────┐"
echo " │ • 克隆项目仓库 │"
echo " │ • 配置 .env 文件 (参考 .env.example) │"
echo " │ • 启动服务: │"
echo " │ cd src && python main.py │"
echo " │ │"
echo " │ 或使用 Docker: │"
echo " │ docker-compose up │"
echo " └─────────────────────────────────────────────────────────┘"
echo ""
print_info "📄 详细配置信息已保存到文件中,请妥善保管"
echo ""
}
################################################################################
# 主函数
################################################################################
main() {
clear
cat << "EOF"
╔═══════════════════════════════════════════════════════════════════════╗
║ ║
║ 🚀 OCI Generative AI 访问配置自动化脚本 ║
║ ║
║ 此脚本将自动创建以下资源: ║
║ • IAM 用户组 (Group)
║ • IAM 策略 (Policy)
║ • IAM 用户 (User)
║ ║
╚═══════════════════════════════════════════════════════════════════════╝
EOF
echo ""
# 执行配置步骤
check_oci_cli
get_tenancy_info
get_user_input
create_group
create_policy
create_user
add_user_to_group
save_config
show_next_steps
print_success "脚本执行完成!"
echo ""
}
# 执行主函数
main