I’m working on a project that includes sending data via Amazon Simple Storage Service (S3) and was having some problems configuring and using the s3cmd client.
The first thing I discovered about s3cmd is not to trust what it tells you when invoking s3cmd –configure to get things set up to use the bucket.
$ s3cmd -v --configure s3://some-bucket/some-prefix/
Enter new values or accept defaults in brackets with Enter.
Refer to user manual for detailed description of all options.
Access key and Secret key are your identifiers for Amazon S3
Access Key: thisisanaccesskey
Secret Key: thisisasecretkey
Encryption password is used to protect your files from reading
by unauthorized persons while in transfer to S3
Encryption password:
Path to GPG program:
When using secure HTTPS protocol all communication with Amazon S3
servers is protected from 3rd party eavesdropping. This method is
slower than plain HTTP and can't be used if you're behind a proxy
Use HTTPS protocol [No]: Y
New settings:
Access Key: thisisanaccesskey
Secret Key: thisisasecretkey
Encryption password:
Path to GPG program: None
Use HTTPS protocol: True
HTTP Proxy server name:
HTTP Proxy server port: 0
Test access with supplied credentials? [Y/n] y
Please wait, attempting to list bucket: s3://some-bucket/some-prefix/
ERROR: Test failed: 403 (AccessDenied): Access Denied
Retry configuration? [Y/n] n
Save settings? [y/N] y
Configuration saved to '/home/rchapin/.s3cfg'
As you can see, when I ran configure and opted to test the configs, I got a 403 error. At that point, I assumed that I didn’t have acces to the bucket and went back to the client to try and figure out if I had the right key, if they set up the bucket with the right permissions, blah, blah, blah.
It turns out, that s3cmd simply gave me incorrect information, or the command that it was using to test it wasn’t valid, or it was trying to do something with the bucket that I didn’t have permission to do.
After running the config above, I tried:
$ s3cmd put test.txt s3://some-bucket/some-prefix/
ERROR: Config: verbosity level '20' is not valid
test.txt -> s3://some-bucket/some-prefix/test.txt [1 of 1]
15 of 15 100% in 0s 67.58 B/s done
Turns out that I have access after all.
$ s3cmd ls s3://some-bucket/some-prefix/
ERROR: Config: verbosity level '20' is not valid
2014-03-01 00:25 0 s3://some-bucket/some-prefix/
2014-03-19 14:06 15 s3://some-bucket/some-prefix/test.txt
It also turns out that appending the ‘-v’ arg when configuring s3cmd causes it to throw the ‘ERROR: Config: verbosity level ’20’ is not valid’ error.
If you delete the .s3cfg file in your home dir, and re-run s3cmd –configure without the -v command it should work as expected.
Just don’t trust the s3cmd –configure test . . . test it yourself and you might find that you have access already.