S3にアクセスする際の署名バージョンには2と4があるが、AWS CLIの古いバージョンで署名バージョン4のみサポートするリージョンのS3バケットにアクセスすると以下のようなエラーになる。(この例ではフランクフルトリージョンのS3バケットにアクセス)

% aws --version
aws-cli/1.10.33 Python/2.7.14 Linux/4.14.72-68.55.amzn1.x86_64 botocore/1.4.23

% aws s3 cp test.txt s3://sample-eu-central-1/
upload failed: ./test.txt to s3://sample-eu-central-1/test.txt A
client error (PermanentRedirect) occurred when calling the PutObject
operation: The bucket you are attempting to access must be addressed
using the specified endpoint. Please send all future requests to this
endpoint: sample-eu-central-1.s3.eu-central-1.amazonaws.com

You can fix this issue by explicitly providing the correct region
location using the --region argument, the AWS_DEFAULT_REGION
environment variable, or the region variable in the AWS CLI
configuration file.  You can get the bucket's location by running "aws
s3api get-bucket-location --bucket BUCKET".

% aws s3api get-bucket-location --bucket sample-eu-central-1
{
    "LocationConstraint": "eu-central-1"
}

これは古いバージョンのAWS CLIがデフォルトで署名バージョン2でS3にアクセスするために起こる事象なので、CLI実行時にリージョンを明示的に指定するか、AWS CLIをアップデートすれば起こらなくなる。

⦿ CLI実行時にリージョンを指定する場合

% aws --region eu-central-1 s3 cp test.txt s3://sample-eu-central-1/
upload: ./test.txt to s3://sample-eu-central-1/test.txt

⦿ AWS CLIをアップデートする場合

% pip install --upgrade awscli

% aws --version
aws-cli/1.16.81 Python/2.7.14 Linux/4.14.72-68.55.amzn1.x86_64 botocore/1.12.71

% aws s3 cp test.txt s3://sample-eu-central-1/
upload: ./test.txt to s3://sample-eu-central-1/test.txt

参考サイト

元記事はこちら

[Amazon Web Services]AWS CLIでS3にアクセスするとclient error(PermanentRedirect)になる(署名バージョン2によるアクセス)