前提・実現したいこと
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
・バケットはパブリックアクセスを許可していない状態にしています。

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。