質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Amazon S3

Amazon S3 (Simple Storage Service)とはアマゾン・ウェブ・サービスが提供するオンラインストレージサービスです。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

Q&A

解決済

1回答

3095閲覧

【Amazon S3】署名付きURLでのアップロードをするとAccess Deniedになる

aaaaakiyama

総合スコア29

Amazon S3

Amazon S3 (Simple Storage Service)とはアマゾン・ウェブ・サービスが提供するオンラインストレージサービスです。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

0グッド

0クリップ

投稿2018/12/18 08:35

前提・実現したいこと

Amazon S3に署名付きURLを使ってファイルのアップロードがしたいです。
アップロードしたファイルは、アクセス不可の状態にしたいのです。

発生している問題・エラーメッセージ

署名付きURLの生成はできたのですが、Curlを用いたアップロードで、「Access Denied」が出てしまいます。
IAMやバケットサイドで、何か設定が必要なのでしょうか。
以下、curlを実行した際の出力です。

Trying [ip_address]... * TCP_NODELAY set * Connected to [my_bucket_name].s3.amazonaws.com [ip address] port 443 (#0) * ALPN, offering h2 * ALPN, offering http/1.1 * Cipher selection: ALL:!EXPORT:!EXPORT40:!EXPORT56:!aNULL:!LOW:!RC4:@STRENGTH * successfully set certificate verify locations: * CAfile: /etc/ssl/certs/ca-certificates.crt CApath: /etc/ssl/certs * TLSv1.2 (OUT), TLS header, Certificate Status (22): * TLSv1.2 (OUT), TLS handshake, Client hello (1): * TLSv1.2 (IN), TLS handshake, Server hello (2): * TLSv1.2 (IN), TLS handshake, Certificate (11): * TLSv1.2 (IN), TLS handshake, Server key exchange (12): * TLSv1.2 (IN), TLS handshake, Server finished (14): * TLSv1.2 (OUT), TLS handshake, Client key exchange (16): * TLSv1.2 (OUT), TLS change cipher, Client hello (1): * TLSv1.2 (OUT), TLS handshake, Finished (20): * TLSv1.2 (IN), TLS change cipher, Client hello (1): * TLSv1.2 (IN), TLS handshake, Finished (20): * SSL connection using TLSv1.2 / *****-***-******-***-****** * ALPN, server did not agree to a protocol * Server certificate: * subject: C=US; ST=Washington; L=Seattle; O=Amazon.com Inc.; CN=*.s3.amazonaws.com * start date: Nov 7 00:00:00 2018 GMT * expire date: Feb 7 12:00:00 2020 GMT * subjectAltName: host "[my-bucket_name].s3.amazonaws.com" matched cert's "*.s3.amazonaws.com" * issuer: C=US; O=DigiCert Inc; OU=www.digicert.com; CN=DigiCert Baltimore CA-2 G2 * SSL certificate verify ok. > PUT /test.txt?AWSAccessKeyId=[my_access_key_id] HTTP/1.1 > Host: [my_bucket_name].s3.amazonaws.com > User-Agent: curl/7.52.1 > Accept: */* > Content-Length: 6 > Expect: 100-continue > < HTTP/1.1 403 Forbidden HTTP/1.1 403 Forbidden < x-amz-request-id: [***] x-amz-request-id: [***] < x-amz-id-2: [***] x-amz-id-2: [***] < Content-Type: application/xml Content-Type: application/xml < Transfer-Encoding: chunked Transfer-Encoding: chunked < Date: Tue, 18 Dec 2018 08:10:23 GMT Date: Tue, 18 Dec 2018 08:10:23 GMT < Connection: close Connection: close < Server: AmazonS3 Server: AmazonS3 < <?xml version="1.0" encoding="UTF-8"?> * Curl_http_done: called premature == 0 * Closing connection 0 * TLSv1.2 (OUT), TLS alert, Client hello (1): <Error><Code>AccessDenied</Code><Message>Access Denied</Message><RequestId>[***]</RequestId><HostId>[***]</HostId></Error>

該当のソースコード

下記の投稿を参考にさせていただき、実行しました。
https://dev.classmethod.jp/cloud/aws/generate-pre-signed-url-for-s3-with-boto3/

python

1import boto3 2 3BUCKET = '[my-bucket_name]' 4KEY = test.txt 5 6s3 = boto3.client('s3') 7print s3.generate_presigned_url( 8 ClientMethod = 'put_object', 9 Params = {'Bucket' : BUCKET, 'Key' : KEY}, 10 ExpiresIn = 3600, 11 HttpMethod = 'PUT')

sh

1$ curl -v -D - -X PUT --upload-file test.txt [生成された署名付きURL]

試したこと

・ルートユーザーで上記の実行 →Access Denied
・ルートユーザーにS3FullAccess付与 →Access Denied
・AWS CLIで署名付きURL生成、ローカルからアップロード →Access Denied
・AWS CLIで署名付きURL生成、ローカルでダウンロード →OK
・AWS Lambdaで署名付きURL生成、ローカルからcurl実行 →Access Denied
・バケットはパブリックアクセスを許可していない状態にしています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

生成された署名付きURLをシングルクォーテーションで囲む必要がありました。
下記で、うまくアップロードできました。

https://code.i-harness.com/en/q/9a1de1

sh

1$ curl -v -D - -X PUT --upload-file test.txt '[生成された署名付きURL]'

投稿2018/12/19 00:55

aaaaakiyama

総合スコア29

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問