第一步:登录 AWS Console
- AWS Console 国际登录入口:https://aws.amazon.com/console
- AWS 中国登录入口:https://console.amazonaws.cn
采用 S3 作为 Canvas 存储方案,可提供更加完善、灵活的文件存储方案。注意亚马逊 S3 存储桶方案,会产生额外费用,具体定价方案可查询 AWS 官方网站:https://www.amazonaws.cn/s3/pricing
第二步:创建 S3 存储桶(Bucket)
- 输入存储桶名称,仅限 0-9 A-z 字母和 "-" 组成
- 选择所在区域
- 其他选项保持默认,可根据需求后期调整,本文不做赘述
第三步:获取存储桶信息
- 打开刚刚创建的存储桶,点击 Properties (属性)选项卡
- 如果在第五步设置 IAM 账户权限时采用 Inline Policy 形式,复制 Amazon Resource Name (ARN) 备用
第四步:配置 CORS 跨域访问
参考文档:https://docs.aws.amazon.com/AmazonS3/latest/userguide/ManageCorsUsing.html
- 打开 S3 存储桶
- 点击 Permissions (权限)选项卡,滚动至页面最下方 CORS 设置
[
{
"AllowedHeaders": [
"*"
],
"AllowedMethods": [
"HEAD",
"GET",
"POST",
"PUT"
],
"AllowedOrigins": [
"https://your.canvas.domain"
],
"ExposeHeaders": [],
"MaxAgeSeconds": 3000
}
]
第五步:创建 IAM 用户
AWS IAM 是 Amazon Web Services (AWS) 的身份和访问管理服务,它用于管理 AWS 资源的身份验证和授权。IAM 允许您精确控制谁可以访问您的 AWS 资源以及这些用户、应用程序或服务可以执行哪些操作。
以下是 AWS IAM 的主要功能和概念:
- 用户 (User): 用户是人或实体,可以通过 IAM 创建并授予他们访问 AWS 资源的权限。每个用户都有唯一的凭证,如用户名和密码,或访问密钥 (Access Key ID 和 Secret Access Key)。
- 组 (Group): 组是一种逻辑方式来分组用户,并为这些用户授予相同的权限。这使得管理用户和权限更为简单,您可以为组分配权限,而不必逐个分配给每个用户。
- 角色 (Role): 角色是用于授权 AWS 服务或资源(如 EC2 实例、Lambda 函数等)的一种身份。角色允许 AWS 服务执行特定操作,而无需使用访问密钥,这提高了安全性。
- 策略 (Policy): 策略是 JSON 文档,定义了哪些操作允许或禁止,以及允许或拒绝这些操作的资源。策略可以附加到用户、组或角色,并用于控制他们对 AWS 资源的访问。
- 权限 (Permissions): 权限是指用户、组或角色在 IAM 中授予的操作和资源访问权限。这些权限由策略定义。
- 多因素身份验证 (MFA): MFA 增强了帐户的安全性,要求用户提供两个或多个身份验证因素(通常是密码和硬件令牌或移动应用程序生成的代码)以进行身份验证。
- 访问密钥 (Access Key): 访问密钥包括 Access Key ID 和 Secret Access Key,用于以编程方式访问 AWS 资源。这通常用于 API 调用、CLI 操作和应用程序的身份验证。
回到 AWS Console 主页面,搜索 IAM
根据实际需要创建新账户,并确保该账户拥有 AmazonS3FullAccess 权限即可,可以通过添加用户组或单独为账户设置 Policy 均可。
如果采用 Inline Policy,将第三步中的 ARN 复制到以下 JSON 配置信息:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:ListBucket",
"s3:GetObject",
"s3:PutObject",
"s3:DeleteObject"
],
"Resource": [
"arn:aws-cn:s3:::canvas-storage-001",
"arn:aws-cn:s3:::canvas-storage-001/*"
]
}
]
}
另一种 Policy 参考:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:*",
"Resource": "arn:aws-cn:s3:::canvas-storage-cn/*",
"Condition": {}
},
{
"Effect": "Allow",
"Action": [
"s3:*"
],
"Resource": "arn:aws-cn:s3:::canvas-storage-cn",
"Condition": {}
}
]
}
第六步:创建 Access keys
访问密钥包括 Access Key ID 和 Secret Access Key,用于以编程方式访问 AWS 资源。这通常用于 API 调用、CLI 操作和应用程序的身份验证。
在当前用户下,点击 Security credentials 选项卡:
访问密钥(Access key) 生成后,记得妥善保存,不要将其保存在公共平台,或代码仓库中。
第七步:Canvas 配置文件
Canvas 配置文件 domain.yml 中无需设置 files_domain
创建 file_store.yml 配置文件,如果文件已经存在,直接编辑即可:
$ cd /data/canvas #输入实际路径
$ cp config/file_store.yml.example config/file_store.yml
$ nano config/file_store.yml
将默认 production 注释,并添加 s3 节点:
#production:
#storage: local
#path_prefix: tmp/files
## amazon storage example. requires valid amazon_s3.yml
production:
storage: s3
创建 amazon_s3.yml 配置文件,如果文件已经存在,直接编辑即可:
$ cd /data/canvas #输入实际路径
$ cp config/amazon_s3.yml.example config/amazon_s3.yml
$ nano config/amazon_s3.yml
打开文件后,查找 production 节点,按照上述步骤填写 bucket_name, access_key_id 和 secret_access_key,最后一个 region 设置项,根据实际的 AWS 所在区域填写。参照如下修改:
production:
bucket_name: canvas_storage
access_key_id: ************
secret_access_key: *******************
region: ap-east-1
第八步:重启 Canvas 实例
$ sudo /etc/init.d/canvas_init restart
登录 Canvas,尝试上传文件,并检查 AWS S3 存储桶对应文件状态。