AWSのS3には署名付きURLという機能があります。
認証つきのURLを生成して、バケットポリシーがないユーザーでもアクセスができるようになります。
こちらを使って「有効期限付き」のWebアクセスの設定を行ってみます。
尚、CloudFrontを使って署名を行う場合はこちらの記事での設定となります。
S3の設定
Webでの利用が可能なように「プロパティ」タブでは「静的ウェブサイトホスティング」を有効にします。
アクセス許可の「パブリックアクセスをすべて ブロック」が「オン」になっていても構いません。
バケットポリシーの設定がしていなくても構いません。
むしろバケットポリシーは全公開をしてしまいますと署名付きの意味がなくなってしまいますのでチェックを外します。
ここでは署名付きのアクセス可能なHTMLとして「index.html」をアップしました。
pythonのboto3を使って署名付きURLの発行
今回はpythonのboto3を使って署名付きURLの発行を行います。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
import boto3 bucket_name = "XXX" bucket_file = "index.html" s3 = boto3.client('s3') presigned_url = s3.generate_presigned_url( ClientMethod='get_object', Params={'Bucket': bucket_name, 'Key': bucket_file}, ExpiresIn=360, HttpMethod='GET') print(presigned_url) |
こちらで「ExpiresIn」の秒数有効なHTMLホスティングが実施できるようになりました。
index.htmlにS3のWebホスティングとして接続するとアクセス権限で以下のようになります。
署名付きURLで制限時間内に接続すると以下のようになります。
また、制限時間を過ぎてしまうと以下のようになります。
こちらで署名付きURLのみアクセス可能なWebホスティングの設定が完了しました。
S3だけでも利用できるので利用シーンは高くなります。
このブログは株式会社CoLabMixによる技術ブログです。
GCP、AWSなどでのインフラ構築・運用や、クローリング・分析・検索などを主体とした開発を行なっています。
Ruby on RailsやDjango、Pythonなどの開発依頼などお気軽にお声がけください。
開発パートナーを増やしたいという企業と積極的に繋がっていきたいです。
お問い合わせやご依頼・ご相談など