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
参考サイト
- AWS CLIドキュメント (Amazon Web Services)
- AWSのリージョンとエンドポイント (Amazon Web Services)
- Using the AWS SDKs, CLI, and Explorers (Amazon Web Services)
元記事はこちら
「[Amazon Web Services]AWS CLIでS3にアクセスするとclient error(PermanentRedirect)になる(署名バージョン2によるアクセス)」