测试通过s3 api访问swift资源失败

jameswangjz 发布于 2017/04/24 11:32
阅读 460
收藏 0

华为云11月刊推送:DIY微信问答机器人,高性能计算代码的20个技巧!>>>

通过devstack安装openstack,并部署了swift和swift3,在dashboard可以创建容器、上传下载文档。
然后通过openstack ec2 credentials create创建了admin用户的access key和secret key,无论是通过s3 brower工具还是s3curl命令均无法list或create bucket。
s3 browser配置如下:
Account type:s3 compatible Storage
Endpoint:172.24.4.102:8080
access key:7d13a10fb6fd426cb8bab3dddb2a51f8
secret key:57fb63b144e74f309612d7d9624b4d07
对应s-proxy.log如下
proxy-server: Calling Swift3 Middleware (txn: tx5176267558c24888bc58d-0058fd5e30)
proxy-server: {'access_key': '7d13a10fb6fd426cb8bab3dddb2a51f8', 'account': None, '_timestamp': 1492999731.00000_0000000000000000, 'user_id': None, 'slo_enabled': True, 'container_name': '', 'string_to_sign': 'GET\n\n\n\nx-amz-date:Mon, 24 Apr 2017 02:08:51 GMT\n/', '_params_cache': {}, 'headers': <swift.common.swob.HeaderEnvironProxy object at 0x7f7f434b4f90>, 'object_name': None, 'bucket_in_host': None, 'environ': {'HTTP_AUTHORIZATION': 'AWS 7d13a10fb6fd426cb8bab3dddb2a51f8:kwhz2yCJRYot2ziz4QKg3TWVZOE=', 'SCRIPT_NAME': '', 'swift.proxy_access_log_made': True, 'REQUEST_METHOD': 'GET', 'HTTP_X_AMZ_DATE': 'Mon, 24 Apr 2017 02:08:51 GMT', 'PATH_INFO': '/', 'SERVER_PROTOCOL': 'HTTP/1.0', 'HTTP_USER_AGENT': 'S3 Browser 6-5-9 http://s3browser.com', 'HTTP_CONNECTION': 'Keep-Alive', 'REMOTE_PORT': '52748', 'SERVER_NAME': '172.24.4.102', 'REMOTE_ADDR': '192.168.1.104', 'eventlet.input': <eventlet.wsgi.Input object at 0x7f7f435a4e10>, 'wsgi.url_scheme': 'http', 'SERVER_PORT': '8080', 'CONTENT_TYPE': None, 'swift.leave_relative_location': True, 'wsgi.input': <swift.common.utils.InputProxy object at 0x7f7f434b4dd0>, 'HTTP_HOST': '172.24.4.102:8080', 'wsgi.multithread': True, 'eventlet.posthooks': [], 'wsgi.version': (1, 0), 'RAW_PATH_INFO': '/', 'GATEWAY_INTERFACE': 'CGI/1.1', 'wsgi.run_once': False, 'wsgi.errors': <swift.common.utils.LoggerFileObject object at 0x7f7f437c4410>, 'wsgi.multiprocess': False, 'swift.trans_id': 'tx5176267558c24888bc58d-0058fd5e30', 'headers_raw': (('User-Agent', 'S3 Browser 6-5-9 http://s3browser.com'), ('Authorization', 'AWS 7d13a10fb6fd426cb8bab3dddb2a51f8:kwhz2yCJRYot2ziz4QKg3TWVZOE='), ('x-amz-date', 'Mon, 24 Apr 2017 02:08:51 GMT'), ('Host', '172.24.4.102:8080'), ('Connection', 'Keep-Alive')), 'swift3.auth_details': {'access_key': '7d13a10fb6fd426cb8bab3dddb2a51f8', 'check_signature': <bound method Request.check_signature of <swift3.request.Request object at 0x7f7f434b4e10>>, 'string_to_sign': 'GET\n\n\n\nx-amz-date:Mon, 24 Apr 2017 02:08:51 GMT\n/', 'signature': 'kwhz2yCJRYot2ziz4QKg3TWVZOE='}, 'swift.cache': <swift.common.memcached.MemcacheRing object at 0x7f7f4361f550>}, 'token': None, 'signature': 'kwhz2yCJRYot2ziz4QKg3TWVZOE='}
proxy-server: Calling S3Token middleware.
proxy-server: You did not specify an auth or a storage token. skipping.
proxy-server: Deferring reject downstream
proxy-server: Received request from 
proxy-server: Authorizing as anonymous (txn: tx5176267558c24888bc58d-0058fd5e30)
proxy-server: 192.168.1.104 192.168.1.104 24/Apr/2017/02/08/48 GET / HTTP/1.0 403 - S3%20Browser%206-5-9%20http://s3browser.com - - 277 - tx5176267558c24888bc58d-0058fd5e30 - 0.0057 - - 1492999728.204854012 1492999728.210511923 -

使用s3curl.py进行测试
root@ubuntu :~/s3curl# cat .s3curl 
%awsSecretAccessKeys = (
    # personal account
    personal => {
        id => '7d13a10fb6fd426cb8bab3dddb2a51f8',
        key => '57fb63b144e74f309612d7d9624b4d07',
#    personal => {
#        id => 'a03606e0eae644379f3d6226fb076ca1',
#        key => '25f8caa75f574fa98d6d681c5223c943',
#    personal => {
#        id => '73fce89355fd44df892a82d7345b099b',
#        key => '617118add8854538a59b97590896694a',
#    personal => {
#        id => 'admin:admin',
#        key => 'admin',
    },

   # corporate account
#   company => {
#        id => '1ATXQ3HHA59CYF1CVS02',
#        key => 'WQY4SrSS95pJUT95V6zWea01gBKBCL6PI0cdxeH8',
#    },
);
root@ubuntu :~/s3curl# ./s3curl.pl --debug --id=personal -- http://172.24.4.102:8080
s3curl: Found the url: host=172.24.4.102; port=8080; uri=; query=;
s3curl: cname endpoint signing case
s3curl: StringToSign='GET\n\n\nMon, 24 Apr 2017 02:12:01 +0000\n/172.24.4.102/'
s3curl: exec curl -v -H 'Date: Mon, 24 Apr 2017 02:12:01 +0000' -H 'Authorization: AWS 7d13a10fb6fd426cb8bab3dddb2a51f8:C/J13X7bm+TcXfuF48DTd0OTsHk=' -L -H 'content-type: ' http://172.24.4.102:8080
* Rebuilt URL to: http://172.24.4.102:8080/
*   Trying 172.24.4.102...
* Connected to 172.24.4.102 (172.24.4.102) port 8080 (#0)
> GET / HTTP/1.1
> Host: 172.24.4.102:8080
> User-Agent: curl/7.47.0
> Accept: */*
> Date: Mon, 24 Apr 2017 02:12:01 +0000
> Authorization: AWS 7d13a10fb6fd426cb8bab3dddb2a51f8:C/J13X7bm+TcXfuF48DTd0OTsHk=

< HTTP/1.1 403 Forbidden
< x-amz-id-2: txe7870c03bdd04136b598e-0058fd5ef1
< x-amz-request-id: txe7870c03bdd04136b598e-0058fd5ef1
< Content-Type: application/xml
< X-Trans-Id: txe7870c03bdd04136b598e-0058fd5ef1
< X-Openstack-Request-Id: txe7870c03bdd04136b598e-0058fd5ef1
< Date: Mon, 24 Apr 2017 02:12:01 GMT
< Transfer-Encoding: chunked

<?xml version='1.0' encoding='UTF-8'?>
* Connection #0 to host 172.24.4.102 left intact
<Error><Code>SignatureDoesNotMatch</Code><Message>The request signature we calculated does not match the signature you provided. Check your key and signing method.</Message><RequestId>txe7870c03bdd04136b598e-0058fd5ef1</RequestId></Error>root@ubuntu :~/s3curl# 
对应的s-proxy.log如下
proxy-server: Calling Swift3 Middleware (txn: txe7870c03bdd04136b598e-0058fd5ef1)
proxy-server: {'access_key': '7d13a10fb6fd426cb8bab3dddb2a51f8', 'account': None, '_timestamp': 1492999921.00000_0000000000000000, 'user_id': None, 'slo_enabled': True, 'container_name': '', 'string_to_sign': 'GET\n\n\nMon, 24 Apr 2017 02:12:01 +0000\n/', '_params_cache': {}, 'headers': <swift.common.swob.HeaderEnvironProxy object at 0x7f7f434d3290>, 'object_name': None, 'bucket_in_host': None, 'environ': {'HTTP_AUTHORIZATION': 'AWS 7d13a10fb6fd426cb8bab3dddb2a51f8:C/J13X7bm+TcXfuF48DTd0OTsHk=', 'SCRIPT_NAME': '', 'swift.trans_id': 'txe7870c03bdd04136b598e-0058fd5ef1', 'swift.proxy_access_log_made': True, 'REQUEST_METHOD': 'GET', 'swift3.auth_details': {'access_key': '7d13a10fb6fd426cb8bab3dddb2a51f8', 'check_signature': <bound method Request.check_signature of <swift3.request.Request object at 0x7f7f434d3710>>, 'string_to_sign': 'GET\n\n\nMon, 24 Apr 2017 02:12:01 +0000\n/', 'signature': 'C/J13X7bm+TcXfuF48DTd0OTsHk='}, 'PATH_INFO': '/', 'SERVER_PROTOCOL': 'HTTP/1.0', 'HTTP_USER_AGENT': 'curl/7.47.0', 'REMOTE_PORT': '38712', 'SERVER_NAME': '172.24.4.102', 'REMOTE_ADDR': '172.24.4.102', 'eventlet.input': <eventlet.wsgi.Input object at 0x7f7f434b4f50>, 'wsgi.url_scheme': 'http', 'SERVER_PORT': '8080', 'CONTENT_TYPE': None, 'swift.leave_relative_location': True, 'HTTP_DATE': 'Mon, 24 Apr 2017 02:12:01 +0000', 'HTTP_HOST': '172.24.4.102:8080', 'wsgi.multithread': True, 'eventlet.posthooks': [], 'HTTP_ACCEPT': '*/*', 'wsgi.version': (1, 0), 'RAW_PATH_INFO': '/', 'GATEWAY_INTERFACE': 'CGI/1.1', 'wsgi.run_once': False, 'wsgi.errors': <swift.common.utils.LoggerFileObject object at 0x7f7f437c4410>, 'wsgi.multiprocess': False, 'wsgi.input': <swift.common.utils.InputProxy object at 0x7f7f434d36d0>, 'headers_raw': (('Host', '172.24.4.102:8080'), ('User-Agent', 'curl/7.47.0'), ('Accept', '*/*'), ('Date', 'Mon, 24 Apr 2017 02:12:01 +0000'), ('Authorization', 'AWS 7d13a10fb6fd426cb8bab3dddb2a51f8:C/J13X7bm+TcXfuF48DTd0OTsHk=')), 'swift.cache': <swift.common.memcached.MemcacheRing object at 0x7f7f4361f550>}, 'token': None, 'signature': 'C/J13X7bm+TcXfuF48DTd0OTsHk='}
proxy-server: Calling S3Token middleware.
proxy-server: You did not specify an auth or a storage token. skipping.
proxy-server: Deferring reject downstream
proxy-server: Received request from 
proxy-server: Authorizing as anonymous (txn: txe7870c03bdd04136b598e-0058fd5ef1)
proxy-server: 172.24.4.102 172.24.4.102 24/Apr/2017/02/12/01 GET / HTTP/1.0 403 - curl/7.47.0 - - 277 - txe7870c03bdd04136b598e-0058fd5ef1 - 0.0111 - - 1492999921.225270987 1492999921.236358881 -

root@ubuntu :/opt/stack/logs# openstack ec2 credentials list
+----------------------------------+----------------------------------+----------------------------------+----------------------------------+
| Access                           | Secret                           | Project ID                       | User ID                          |
+----------------------------------+----------------------------------+----------------------------------+----------------------------------+
| 7d13a10fb6fd426cb8bab3dddb2a51f8 | 57fb63b144e74f309612d7d9624b4d07 | 44bc3de880c043568fdfd708fe74e697 | 7e53a6fe16a94151983878f788a5e932 |
+----------------------------------+----------------------------------+----------------------------------+----------------------------------+
/etc/swift/proxy-server.conf主要配置
[pipeline:main]
pipeline = catch_errors gatekeeper healthcheck proxy-logging cache container_sync bulk tempurl ratelimit crossdomain swift3 s3token  authtoken keystoneauth tempauth  formpost staticweb copy container-quotas account-quotas slo dlo versioned_writes proxy-logging  proxy-server
[filter:s3token]
paste.filter_factory = keystonemiddleware.s3_token:filter_factory
auth_uri = http://172.24.4.102/identity_admin
cafile = /opt/stack/data/ca-bundle.pem
admin_user = swift
admin_tenant_name = service
admin_password = password
[filter:swift3]
use = egg:swift3#swift3
location = RegionOne

加载中
返回顶部
顶部