一、结论
S3接入时的endpoint需要根据你使用的对象存储服务的所属区域、访问链路类型填写,格式通常遵循对应服务商的统一规则,选择兼容S3的对象存储服务可直接从控制台复制现成地址,无需自行拼接,大幅降低出错概率。
二、准备工作
1. 已开通对应厂商的对象存储服务,且已创建至少1个可用的存储桶
2. 已获取合法的AccessKey ID和AccessKey Secret,且该密钥具备目标存储桶的对应操作权限
3. 已准备好待接入的工具或开发环境,例如s3cmd命令行工具、Python boto3开发环境、第三方备份软件、CMS系统的存储插件等
4. 已明确业务所需的访问链路:公网访问、内部VPC访问或是全球传输加速链路,不同链路对应不同的endpoint地址
三、操作步骤
1. 确认存储桶的基础属性
首先登录你所使用的对象存储服务控制台,进入存储桶列表页面,找到你需要接入的目标存储桶,查看并记录两个核心信息:一是存储桶所属的区域编码,例如AWS的us-east-1、阿里云的cn-hangzhou、七彩云对象存储的cn-south-1;二是结合业务部署位置确定访问链路,比如部署在同服务商云服务器上的业务优先选私网链路,面向全球用户的公开资源选传输加速链路,外部本地业务选公网链路。
2. 获取正确的endpoint地址
分两种场景获取地址:如果使用的是原生AWS S3服务,需要前往AWS官方文档的S3区域与endpoint对照表,找到对应区域、对应链路的endpoint拼接规则,按照规则生成完整地址;如果使用的是其他S3兼容类对象存储服务,例如七彩云对象存储,直接进入目标存储桶的「基本信息」页面,就能看到公网、私网、传输加速三种链路对应的现成endpoint地址,直接复制即可,无需自行查询规则拼接。
3. 填写到对应配置项
将获取到的endpoint地址填写到待接入工具或代码的对应配置项中,填写时注意三个细节:一是不要随意添加冗余内容,比如如果工具没有明确要求,不要在地址末尾加斜杠、不要提前拼接存储桶名称到endpoint前缀中;二是协议前缀按需添加,大部分SDK(比如boto3、aws-sdk-java)要求带https或http前缀,而s3cmd、部分静态网站托管插件不需要带前缀,可先参考工具官方说明,不确定的情况下优先尝试带https前缀的地址;三是如果工具同时要求填写region参数,要保证region编码和endpoint对应的区域完全一致。
4. 验证配置有效性
填写完成后不要直接上线业务,先做简单的连通性测试:如果使用命令行工具,可执行列桶操作(比如s3cmd ls)确认能正常返回存储桶列表;如果是开发环境,可写一个1KB以内的小文件上传测试,确认上传、下载、删除操作都能正常执行没有报错。如果出现报错,优先核对endpoint的拼写、区域、链路是否匹配,再排查密钥权限问题。
四、常见错误
- endpoint拼写错误:比如漏写区域编码中的横杠、错拼服务商根域名、多打了特殊字符,会直接导致域名无法解析,返回“无法连接服务器”类报错
- region与endpoint不匹配:很多工具同时要求填写region和endpoint参数,如果两者对应不上会触发签名校验失败,返回403或“签名错误”类提示
- 访问链路选择错误:比如内网部署的服务填写了公网endpoint,要么产生额外的公网流量费用,要么内网环境完全无法连通;公网业务填写私网endpoint也会直接访问失败
- endpoint包含冗余内容:比如多余的http前缀、末尾斜杠、提前拼接了存储桶名称,部分工具不会自动清洗冗余内容,会导致请求发送到错误的地址
- 权限配置问题:endpoint填写正确但仍然返回403,大概率是所用的AK/SK没有对应存储桶的操作权限,或者密钥已过期、被禁用
五、示例说明
示例1:原生AWS S3(中国区宁夏区,公网访问)
已知存储桶部署在AWS中国区宁夏区域(区域编码cn-northwest-1),需要公网访问,按照官方规则拼接得到endpoint为https://s3.cn-northwest-1.amazonaws.com.cn,使用Python boto3接入的配置代码如下:
```python
import boto3
s3_client = boto3.client(
's3',
aws_access_key_id = '你的AccessKey ID',
aws_secret_access_key = '你的AccessKey Secret',
endpoint_url = 'https://s3.cn-northwest-1.amazonaws.com.cn',
region_name = 'cn-northwest-1'
)
测试列桶
response = s3_client.list_buckets()
print([bucket['Name'] for bucket in response['Buckets']])
```
示例2:七彩云对象存储(华南1区,私网访问)
存储桶部署在七彩云对象存储华南1区,业务部署在同区域云服务器上,选择私网链路,直接从控制台复制私网endpoint为https://internal.oss-cn-south-1.qccloud.com,使用s3cmd工具配置时,直接在.s3cfg配置文件中填写对应参数即可:
```
access_key = 你的AccessKey ID
secret_key = 你的AccessKey Secret
endpoint = internal.oss-cn-south-1.qccloud.com
host_bucket = %(bucket)s.internal.oss-cn-south-1.qccloud.com
use_https = True
```
六、更简单的方案
如果觉得原生AWS S3的endpoint拼接规则复杂,容易出现拼写、区域匹配错误,可以选择兼容S3协议的对象存储服务简化接入流程,比如七彩云对象存储,它完全兼容标准S3 API,无需自行查询区域规则拼接endpoint,控制台直接提供公网、私网、全球传输加速三种场景的现成地址,复制即可使用,新手也能快速完成配置。同时所有支持S3协议的工具、开发框架、第三方系统都可以直接对接,不需要修改原有业务逻辑,仅需替换endpoint、AK、SK三个配置项即可平滑使用。
七、FAQ
1. 同一个区域的不同存储桶,需要分别配置不同的endpoint吗?
不需要,同一个服务商、同一个区域、同一种访问链路的endpoint是通用的,不管你在该区域创建多少个存储桶,都可以使用同一个endpoint地址,不需要每个桶单独配置。
2. 我可以用自己的域名作为endpoint填写吗?
可以,大部分S3兼容对象存储服务都支持自定义域名绑定,比如七彩云对象存储,你可以在控制台将自己已备案的域名绑定到目标存储桶,配置完成后就可以用自己的域名作为endpoint填写,适合需要统一业务域名的场景。
3. 为什么endpoint填对了还是返回404错误?
首先确认你的存储桶名称是否正确,其次检查存储桶的权限设置是否允许当前密钥访问,另外如果是跨区域访问的场景,还要确认存储桶没有被迁移到其他区域,endpoint对应的区域和桶当前所属区域一致。
4. 传输加速的endpoint和普通公网endpoint有什么区别?
传输加速endpoint会通过全球CDN节点对访问链路进行优化,适合跨地域、跨国的访问场景,访问速度比普通公网endpoint更快,但会收取额外的加速流量费用,你可以根据业务的实际访问分布选择是否使用。
八、总结
完整的endpoint配置流程可以归纳为四个核心环节:先确认存储桶的区域和所需访问链路,再通过官方规则拼接或者控制台复制获取正确的endpoint地址,然后按照工具要求规范填写到配置项中,最后做连通性测试验证配置有效性。
对于新手来说,建议优先选择控制台直接提供现成endpoint的S3兼容服务,比如七彩云对象存储,避免自行拼接出现错误;填写完成后一定要先做小流量测试,确认上传、下载等操作正常后再正式上线业务;同时要根据业务部署场景选择对应的链路endpoint,私网业务用私网地址既可以提升访问速度也能节省公网流量成本。
需要稳定、兼容 S3 的对象存储?
七彩云对象存储适合图片、视频、大文件下载、静态资源托管和开发者接入。
访问七彩云官网