浏览代码

add aws s3 iam check (#5174)

tags/0.6.11
Jyong 1年前
父节点
当前提交
d7fbae286a
没有帐户链接到提交者的电子邮件
共有 4 个文件被更改,包括 17 次插入8 次删除
  1. 1
    0
      api/.env.example
  2. 2
    0
      api/config.py
  3. 12
    8
      api/extensions/storage/s3_storage.py
  4. 2
    0
      docker/docker-compose.yaml

+ 1
- 0
api/.env.example 查看文件

# storage type: local, s3, azure-blob # storage type: local, s3, azure-blob
STORAGE_TYPE=local STORAGE_TYPE=local
STORAGE_LOCAL_PATH=storage STORAGE_LOCAL_PATH=storage
S3_USE_AWS_MANAGED_IAM=false
S3_ENDPOINT=https://your-bucket-name.storage.s3.clooudflare.com S3_ENDPOINT=https://your-bucket-name.storage.s3.clooudflare.com
S3_BUCKET_NAME=your-bucket-name S3_BUCKET_NAME=your-bucket-name
S3_ACCESS_KEY=your-access-key S3_ACCESS_KEY=your-access-key

+ 2
- 0
api/config.py 查看文件

'APP_WEB_URL': 'https://udify.app', 'APP_WEB_URL': 'https://udify.app',
'FILES_URL': '', 'FILES_URL': '',
'FILES_ACCESS_TIMEOUT': 300, 'FILES_ACCESS_TIMEOUT': 300,
'S3_USE_AWS_MANAGED_IAM': 'False',
'S3_ADDRESS_STYLE': 'auto', 'S3_ADDRESS_STYLE': 'auto',
'STORAGE_TYPE': 'local', 'STORAGE_TYPE': 'local',
'STORAGE_LOCAL_PATH': 'storage', 'STORAGE_LOCAL_PATH': 'storage',
self.STORAGE_LOCAL_PATH = get_env('STORAGE_LOCAL_PATH') self.STORAGE_LOCAL_PATH = get_env('STORAGE_LOCAL_PATH')


# S3 Storage settings # S3 Storage settings
self.S3_USE_AWS_MANAGED_IAM = get_bool_env('S3_USE_AWS_MANAGED_IAM')
self.S3_ENDPOINT = get_env('S3_ENDPOINT') self.S3_ENDPOINT = get_env('S3_ENDPOINT')
self.S3_BUCKET_NAME = get_env('S3_BUCKET_NAME') self.S3_BUCKET_NAME = get_env('S3_BUCKET_NAME')
self.S3_ACCESS_KEY = get_env('S3_ACCESS_KEY') self.S3_ACCESS_KEY = get_env('S3_ACCESS_KEY')

+ 12
- 8
api/extensions/storage/s3_storage.py 查看文件

super().__init__(app) super().__init__(app)
app_config = self.app.config app_config = self.app.config
self.bucket_name = app_config.get('S3_BUCKET_NAME') self.bucket_name = app_config.get('S3_BUCKET_NAME')
self.client = boto3.client(
's3',
aws_secret_access_key=app_config.get('S3_SECRET_KEY'),
aws_access_key_id=app_config.get('S3_ACCESS_KEY'),
endpoint_url=app_config.get('S3_ENDPOINT'),
region_name=app_config.get('S3_REGION'),
config=Config(s3={'addressing_style': app_config.get('S3_ADDRESS_STYLE')})
)
if app_config.get('S3_USE_AWS_MANAGED_IAM'):
session = boto3.Session()
self.client = session.client('s3')
else:
self.client = boto3.client(
's3',
aws_secret_access_key=app_config.get('S3_SECRET_KEY'),
aws_access_key_id=app_config.get('S3_ACCESS_KEY'),
endpoint_url=app_config.get('S3_ENDPOINT'),
region_name=app_config.get('S3_REGION'),
config=Config(s3={'addressing_style': app_config.get('S3_ADDRESS_STYLE')})
)


def save(self, filename, data): def save(self, filename, data):
self.client.put_object(Bucket=self.bucket_name, Key=filename, Body=data) self.client.put_object(Bucket=self.bucket_name, Key=filename, Body=data)

+ 2
- 0
docker/docker-compose.yaml 查看文件

# only available when STORAGE_TYPE is `local`. # only available when STORAGE_TYPE is `local`.
STORAGE_LOCAL_PATH: storage STORAGE_LOCAL_PATH: storage
# The S3 storage configurations, only available when STORAGE_TYPE is `s3`. # The S3 storage configurations, only available when STORAGE_TYPE is `s3`.
S3_USE_AWS_MANAGED_IAM: 'false'
S3_ENDPOINT: 'https://xxx.r2.cloudflarestorage.com' S3_ENDPOINT: 'https://xxx.r2.cloudflarestorage.com'
S3_BUCKET_NAME: 'difyai' S3_BUCKET_NAME: 'difyai'
S3_ACCESS_KEY: 'ak-difyai' S3_ACCESS_KEY: 'ak-difyai'
STORAGE_TYPE: local STORAGE_TYPE: local
STORAGE_LOCAL_PATH: storage STORAGE_LOCAL_PATH: storage
# The S3 storage configurations, only available when STORAGE_TYPE is `s3`. # The S3 storage configurations, only available when STORAGE_TYPE is `s3`.
S3_USE_AWS_MANAGED_IAM: 'false'
S3_ENDPOINT: 'https://xxx.r2.cloudflarestorage.com' S3_ENDPOINT: 'https://xxx.r2.cloudflarestorage.com'
S3_BUCKET_NAME: 'difyai' S3_BUCKET_NAME: 'difyai'
S3_ACCESS_KEY: 'ak-difyai' S3_ACCESS_KEY: 'ak-difyai'

正在加载...
取消
保存