# 云平台服务架构

## 概述

本目录包含了重构后的云平台服务架构，旨在提供统一的云平台管理接口，支持多种云服务提供商（Azure、AWS、GCP等）。

## 架构设计

### 1. 接口层 (Interface)

- `interface.go` - 定义了云平台提供者的统一接口 `CloudProvider`
- 所有云平台实现都必须实现这个接口

### 2. 工厂层 (Factory)

- `factory.go` - 云平台工厂，负责创建不同云平台的提供者实例
- 支持动态创建Azure、AWS、GCP等云平台提供者

### 3. 实现层 (Implementation)

每个云平台都有独立的实现目录：

#### Azure (`azure/`)
- `provider.go` - Azure提供者主类，实现用户角色同步逻辑
- `role_manager.go` - Azure角色管理器，处理角色分配、查询、删除
- `user_manager.go` - Azure用户管理器，处理用户Object ID获取等

#### AWS (`aws/`)
- `provider.go` - AWS提供者，实现AWS SSO角色同步功能
- 支持用户角色分配、删除和批量删除操作

#### GCP (`gcp/`)
- `provider.go` - GCP提供者，实现GCP IAM角色同步功能
- 支持用户角色绑定、解绑和批量操作

#### Alibaba Cloud (`alicloud/`)
- `provider.go` - 阿里云提供者，实现阿里云云SSO角色同步功能
- `client.go` - 阿里云API客户端，处理云SSO API调用
- 支持用户角色分配、删除和批量删除操作

## 使用方法

### 1. 创建云平台提供者

```go
// 创建工厂
factory := cloud.NewFactory()

// 创建Azure提供者
provider, err := factory.CreateProvider("azure", subscriptionID)
if err != nil {
    return err
}

// 同步用户角色
err = provider.SyncUserRoles(ctx, roles, cloudResource, optionType)
```

### 2. 添加新的云平台

1. 在对应目录下创建提供者实现
2. 实现 `CloudProvider` 接口
3. 在工厂中添加创建逻辑

## 优势

1. **统一接口** - 所有云平台实现相同的接口
2. **易于扩展** - 新增云平台只需实现接口
3. **职责分离** - 每个云平台有独立的实现类
4. **配置集中** - 每个云平台的配置集中管理
5. **测试友好** - 可以独立测试每个云平台的实现

## 迁移说明

原有的云平台同步方法已被重构到新的云平台架构中：

- `SyncAzure` → `internal/apiserver/service/v1/cloud/azure/provider.go`
- `SyncToAWS` → `internal/apiserver/service/v1/cloud/aws/provider.go`
- `SyncToGcp` → `internal/apiserver/service/v1/cloud/gcp/provider.go`

如需使用云平台功能，请通过云平台工厂创建对应的提供者实例。

## 配置说明

### Azure配置
```yaml
azure:
  client_id: "your-client-id"
  client_secret: "your-client-secret"
  tenant_id: "your-tenant-id"
```

### AWS配置
```yaml
aws:
  access_key_id: "your-access-key"
  secret_access_key: "your-secret-key"
  session_token: "your-session-token"
  region: "ap-northeast-1"
  instance_arn: "arn:aws:sso:::instance/your-instance"
  identity_store_id: "your-identity-store-id"
```

### GCP配置
```yaml
gcp:
  service_account_file: "/path/to/service-account.json"
```

### 阿里云配置
```yaml
alicloud:
  access_key_id: "your-access-key-id"
  access_key_secret: "your-access-key-secret"
  region: "cn-hangzhou"
  instance_id: "your-cloudsso-instance-id"
  role_arn: "acs:ram::account:role/rolename"
```

## 待办事项

- [x] 实现Azure提供者
- [x] 实现AWS提供者
- [x] 实现GCP提供者
- [x] 实现阿里云提供者
- [ ] 添加更多云平台支持
- [ ] 完善错误处理和日志记录
- [ ] 添加单元测试
