悲しいことに未成年はアプリのリリースができない
悲しいことにGooglePlayは18歳、AppleStoreは20歳じゃないとアプリが出せません。
自分は普段UnrealEngineでアプリを開発しているのですがリリースできないのは悲しいです。
そこでAndroidでは野良アプリのダウンロードができるため、自分のwebサイト(AWS)でapkを配布することにしますた。
見よう見まねでAWSは構築しているためセキュリティなどで不備がある場合は優しく教えて頂けると幸いです。
S3+Lambda+API Gateway +reCAPTCHAで実装する
reCAPTCHAをweb側に搭載し、API Gatewayを通じてAWS Lambdaで認証をしS3の署名付きurl(時間制限付き)を生成し、クライアント側に返す形です。クライアント側からはobject key(apkファイル)を指定します。
以下がガバガバ構成図です(厳密には多分違う)
サーバー側のコード
AWS Lambda.py
import json
import urllib
import boto3
import os
def lambda_handler(event, context):
recaptcha_secret = os.environ['RECAPTCHA_SECRET']
bucket_name = os.environ['bucket_name']
body = json.loads(event['body'])
response = body['g-recaptcha-response']
object_key = body['object_key']
url = "https://www.google.com/recaptcha/api/siteverify"
values = {
'secret': recaptcha_secret,
'response': response
}
data = urllib.parse.urlencode(values).encode()
req = urllib.request.Request(url, data)
response = urllib.request.urlopen(req)
result = json.load(response)
common_headers = {
'Access-Control-Allow-Origin': 'https://aoharu.works',
'Access-Control-Allow-Methods': 'POST',
'Access-Control-Allow-Headers': 'Content-Type'
}
if result['success']:
s3_client = boto3.client('s3')
url_expiration_seconds = 4
signed_url = s3_client.generate_presigned_url('get_object',
Params={'Bucket': bucket_name, 'Key': object_key},
ExpiresIn=url_expiration_seconds)
return {
'statusCode': 200,
'headers': common_headers,
'body': json.dumps({'message': 'Success', 'link': signed_url})
}
else:
return {
'statusCode': 400,
'headers': common_headers,
'body': json.dumps({'message': 'reCAPTCHA validation failed'})
}
多分本当はobject keyにバリデーションを付けるべきなんだと思います
最後に
何かご指摘があれば優しく教えて頂けると嬉しいです