どのようにあなたのサイトにプレミアム/プライベートコンテンツを提供するには?
15635 ワード
多くのオンライン企業(例えば:Netflix、UDEMYなど)は、サイトのメンバーだけにアクセス可能であるか、予約をしたか、プレミアムを支払ったインターネット上で内容を分配します.今日このポストでは、Amazon Webサービスを使用してあなたのウェブサイトのためにこれを達成する方法を参照してください.私たちはどのように安全にあなたのユーザーにAWS
プリサインされたURLは、要求をするために限られた許可と時間を提供するURLです.予め署名されたURLを受け取る誰でも、それからオブジェクトにアクセスすることができます.たとえば、あなたのバケツでファイルを持っていて、両方のバケツとオブジェクトがプライベートであるならば、あなたはプリサインされたURLを生成することによって、他とファイルを共有することができます.
プリサインされたURLの作成者は、働くためにURLのためにオブジェクトにアクセスしなければなりません. あなたは使用できないか、動作しないプリサインされたURLを作成できます. それは、あらかじめ署名されたURLを作成する何かを要しません. は、URL の満了時間を設定することができます一時的なトークンを使ってプリサインされたURLを作成した場合、URLが期限切れになったときにURLが期限切れになります. URLを作成したユーザーからオブジェクトにアクセスするアクセス許可を削除することでURLを取り消すことができます.
オブジェクトのプリ署名されたURLを作成するときは、セキュリティ資格情報を提供し、バケット名、オブジェクトキー、指定メソッドおよび有効期限を指定する必要があります.
Pythonでは、BOTO 3を使用すると、GeneratorのPresignedCount URLメソッドを使用してURLを生成できます
我々は、前の2つのポストの上にこれを実装するつもりです、in the first post、我々はカスタムアイデンティティブローカー(サインアップ/ログイン)を実行しました.second postでは、我々はAWS STSをバケツファイル名を読むために仮定していました.Githubから2番目のポストのためのダウンロードコード.com/rajanpanchal/AWS KMS STSとそれを修正しました.
全体的なプロセスがどのように見えるかは、ここにあります
オープンファイルshowfiles.LamdbaフォルダからPyを押し、プリコードされたURLを生成する関数を追加できます.GetFileList関数からこの関数を呼び出します.
では、showfileを変更します.HTMLで、レスポンスを反復してファイルのリンクを作成する
変更ログイン.HTML、サインアップ.HTMLとshowfiles.HTMLはCloudFormationの出力からAPIのURLを更新します.
これらのファイルをバケットのstsExampleバケットまたは作成したバケットにアップロードします.これらのファイルをパブリック
ここでコードを見つけることができます.
https://github.com/rajanpanchal/aws-kms-sts-presigned-url
あなたが質問やコメントがあれば私に知らせてください!
プリサインされたURLは何ですか?
プリサインされたURLは、要求をするために限られた許可と時間を提供するURLです.予め署名されたURLを受け取る誰でも、それからオブジェクトにアクセスすることができます.たとえば、あなたのバケツでファイルを持っていて、両方のバケツとオブジェクトがプライベートであるならば、あなたはプリサインされたURLを生成することによって、他とファイルを共有することができます.
プリサインされたURLに関する重要なポイント
プリサインされたURLを作成する方法?
オブジェクトのプリ署名されたURLを作成するときは、セキュリティ資格情報を提供し、バケット名、オブジェクトキー、指定メソッドおよび有効期限を指定する必要があります.
Pythonでは、BOTO 3を使用すると、GeneratorのPresignedCount URLメソッドを使用してURLを生成できます
response = s3_client.generate_presigned_url('get_object',
Params={'Bucket': bucket_name,
'Key': object_name},
ExpiresIn=expiration)
レスポンスオブジェクトには、このように見えるURLが含まれますhttps://somebucketname-rep.s3.amazonaws.com/someFileName.txt?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=ASIAQS3IOUWUZF7YSXGA%2F20200821%2Fus-east-2%2Fs3%2Faws4_request&X-Amz-Date=20200821T051228Z&X-Amz-Expires=3600&X-Amz-SignedHeaders=host&X-Amz-Security-Token=FwoGZXIvYXdzEH8aDCfJDxO0y6xQxYmdGCK2AXe71W%2FgZEg%2FSnSWC%2Fw%2FaJHeZ20M7OI7AqMEum5c98Chl6pSNPwE5Awsc3ySwokDF6L8a9wP0ceXWAmxT3WXLSoFeNHDbbEHfUKWnvGL8yFzAxdmf%2Fmi%2B5Tnl62td8Nad%2F0Ct1Sx11Mip1h2qdYxw80OX5bCTq7cAHHjpmupvaDt%2BZ3qVyIA9WZmeS63dCPOlieE9IiBZf%2FjxF4Mcs5w4ZIHtZL%2F3LvqMXAy3XfzCgnlYVZeCNczKLuv%2FfkFMi0mStwkzyO%2BfMIxWJ82GJmyNi7LZuY5r0Hx0mE%2BxLnre8jp9%2FACoV%2FM92GnsR0%3D&X-Amz-Signature=17046b630ad4dede85af1cd57204bba8adc462a1825a35d93e81b656c683ad75
ブラウザでこのURLを使用し、オブジェクトにアクセスできます!シンプル..じゃない?アクションで見る
我々は、前の2つのポストの上にこれを実装するつもりです、in the first post、我々はカスタムアイデンティティブローカー(サインアップ/ログイン)を実行しました.second postでは、我々はAWS STSをバケツファイル名を読むために仮定していました.Githubから2番目のポストのためのダウンロードコード.com/rajanpanchal/AWS KMS STSとそれを修正しました.
全体的なプロセスがどのように見えるかは、ここにあります
オープンファイルshowfiles.LamdbaフォルダからPyを押し、プリコードされたURLを生成する関数を追加できます.GetFileList関数からこの関数を呼び出します.
def getSignedUrl(key,s3_client):
KeyUrl = {}
response = s3_client.generate_presigned_url('get_object',
Params={'Bucket': os.environ['filesBucket'],
'Key': key},
ExpiresIn=3600)
KeyUrl[key] = response
return KeyUrl
# Returns list of files from bucket using STS
def getFilesList():
sts_client = boto3.client('sts')
# Call the assume_role method of the STSConnection object and pass the role
# ARN and a role session name.
assumed_role_object=sts_client.assume_role(
RoleArn=os.environ['s3role'],
RoleSessionName="AssumeRoleSession1"
)
# From the response that contains the assumed role, get the temporary
# credentials that can be used to make subsequent API calls
credentials=assumed_role_object['Credentials']
# Use the temporary credentials that AssumeRole returns to make a
# connection to Amazon S3
s3_resource=boto3.resource(
's3',
aws_access_key_id=credentials['AccessKeyId'],
aws_secret_access_key=credentials['SecretAccessKey'],
aws_session_token=credentials['SessionToken'],
)
s3_client = boto3.client('s3',aws_access_key_id=credentials['AccessKeyId'],
aws_secret_access_key=credentials['SecretAccessKey'],
aws_session_token=credentials['SessionToken'])
bucket = s3_resource.Bucket(os.environ['filesBucket'])
files=[]
for obj in bucket.objects.all():
files.append(getSignedUrl(obj.key,s3_client))
return files
GetSigneDoll関数でプリコーディングされたURLを生成するために、前提条件から取得した一時的な資格情報を使用します.GetFileList関数はファイル名とプリサインされたURLのリストを返します.では、showfileを変更します.HTMLで、レスポンスを反復してファイルのリンクを作成する
<html>
<head>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/semantic-ui/2.4.1/semantic.min.css" integrity="sha512-8bHTC73gkZ7rZ7vpqUQThUDhqcNFyYi2xgDgPDHc+GXVGHXq+xPjynxIopALmOPqzo9JZj0k6OqqewdGO3EsrQ==" crossorigin="anonymous" />
<script
src="https://code.jquery.com/jquery-3.1.1.min.js"
integrity="sha256-hVVnYaiADRTO2PzUGmuLJr8BLUSjGIZsDYGmIJLv2b8="
crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/semantic-ui/2.4.1/semantic.min.js"></script>
</head>
<body>
<div class="ui raised very text container">
<h1 class="ui header">File Access System</h1>
<i class="folder open icon"></i></i><div class="ui label">Files</div>
<div id="files" >Loading..</div>
</div>
</body>
<script>
fetch(" https://g4m3zpzp95.execute-api.us-east-2.amazonaws.com/Prod/showFiles/", {
credentials: 'include'
})
.then(response => response.text())
.then((body) => {
var files="";
var obj = JSON.parse(body)
for (i = 0; i < obj.length; i++) {
var o = obj[i]
for(x in o){
files = files+ "<i class='file alternate outline icon'><a href='"+o[x]+"' target='_blank'> "+x+"</a>"
}
}
document.getElementById("files").innerHTML= files
})
.catch(function(error) {
console.log(error);
});
</script>
</html>
ここでSAMをビルドして展開します.変更ログイン.HTML、サインアップ.HTMLとshowfiles.HTMLはCloudFormationの出力からAPIのURLを更新します.
これらのファイルをバケットのstsExampleバケットまたは作成したバケットにアップロードします.これらのファイルをパブリック
ここでコードを見つけることができます.
https://github.com/rajanpanchal/aws-kms-sts-presigned-url
テスト
あなたが質問やコメントがあれば私に知らせてください!
Reference
この問題について(どのようにあなたのサイトにプレミアム/プライベートコンテンツを提供するには?), 我々は、より多くの情報をここで見つけました https://dev.to/rajanpanchal/how-to-serve-premium-private-content-on-your-site-41klテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol