OSS访问
OSS做为一种SAAS层应用,有开箱即用的特点。创建bucket,bucket名称要求在本region内唯一。
OSS权限配置
OSS权限首先设置ACL,然后基于RAM的子账号可以设置细颗粒度的Bucket授权策略。
- 设置ACL为公共读或者私有,不建议公共读写。此处设置公共读,私有写
- 根据规划创建RAM子账号及其AK和SK。AK和SK要保存好。
- 针对bucket设置整个bucket级别或者目录级或者文件级别的读写策略,授权对象为步骤2创建的RAM子账号。
根据测试,Bucket授权策略里面如果针对指定的目录级资源授予子账号读写权限,仍然会报错。
You have no right to access this object because of bucket acl
解决方案:
方案一:
在Bucket授权策略里面授权资源为整个Bucket
方案二:
在RAM里面的权限策略管理,针对用户创建权限策略
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": [
"oss:*"
],
"Resource": [
"acs:oss:*:*:example-bucket/tmp/*"
]
}
]
}
OSS客户端配置
- 下载并安装OSS客户端ossutil。
- 具体参见https://help.aliyun.com/document_detail/120075.html?spm=a2c4g.11186623.2.3.449a63faw6x03d
- ossutil配置
./ossutil64 config
该命令创建将一个配置文件,在其中存储配置信息。
请输入配置文件名,文件名可以带路径(默认为:/root/.ossutilconfig,回车将使用默认配置文件。如果用户设置为其它文件,在使用命令时需要将--config-file选项设置为该文件):
未输入配置文件,将使用默认配置文件:/root/.ossutilconfig。
对于下述配置,回车将跳过相关配置项的设置,配置项的具体含义,请使用"help config"命令查看。
请输入语言(CH/EN,默认为:CH,该配置项将在此次config命令成功结束后生效):
请输入endpoint:(OSS的endpiont,不是bucket的域名,比如oss-cn-zhangjiakou-internal.aliyuncs.com)
请输入accessKeyID:(RAM子账号的AK)
请输入accessKeySecret:(RAM子账号的SK)
请输入stsToken:(可以忽略)
OSS客户端常见命令
- 列举文件目录
./ossutil64 ls oss://example-bucket/
./ossutil64 ls oss://example-bucket/tmp
./ossutil64 ls oss://example-bucket/tmp -a -s
- 上传文件
./ossutil64 cp examplefile.log oss://example-bucket/tmp
- 详见:https://help.aliyun.com/document_detail/179388.html?spm=a2c4g.11186623.6.859.60f4738558sKtX
- 下载文件或目录
./ossutil64 cp oss://example-bucket/tmp/examplefile.log ./
./ossutil64 cp -r oss://example-bucket/tmp/examplefile.log ./
错误记录
- 当ossutil的config中endpoint配置了bucket域名,然后ls命令使用错误,报出如下错误。开始以为是AK/SK配置有误,后续发现是endpoint和ls命令参数有问题,错误提示有误导。
Error: oss: service returned error: StatusCode=403, ErrorCode=SignatureDoesNotMatch, ErrorMessage="The request signature we calculated does not match the signature you provided. Check your key and signing
method.", RequestId=603A2957EC36B43130EBADCE
- 当ossutil的config中endpoint配置了bucket域名,运行如下命令报错。需要修改endpoint
./ossutil64 ls oss://example-bucket/
Error: oss: service returned error: StatusCode=400, ErrorCode=InvalidBucketName, ErrorMessage="The specified bucket is not valid.", RequestId=603A2A9621510937394D9584, Bucket=example-bucket, Object$