ガゲマックシャッフラーをセキュアにする
前回の投稿で「APIキーをヘッダに入れて叩きたいが,IFTTT側が未対応でできなかった。」という旨の投稿をした。
今回はカスタムオーソライザーを使ってAPIに認証機構をつける。
認証機構となるLambda関数を作る
認証機構となるLambda関数を作る。
コードは以下のような感じ。
# アクセストークンを適当に生成して貼り付ける
correct_access_token = '***'
def generate_policy(principalId, effect, resource):
authResponse = {}
authResponse['principalId'] = principalId
policyDocument = {};
policyDocument['Version'] = '2012-10-17'
policyDocument['Statement'] = []
statementOne = {}
statementOne['Action'] = 'execute-api:Invoke'
statementOne['Effect'] = effect
statementOne['Resource'] = resource
policyDocument['Statement'] = [statementOne]
authResponse['policyDocument'] = policyDocument
return authResponse
def lambda_handler(event, context):
# TODO implement
access_token = event['queryStringParameters']['access_token']
if access_token == correct_access_token:
authResponse = generate_policy('user', 'Allow', event['methodArn'])
else:
authResponse = generate_policy('user', 'Deny', event['methodArn'])
return authResponse
IAMロールの設定
ここで少し嵌ったのだが,ロールの「信頼関係」にAPI Gatewayが指定されていないとLambda関数が実行できないらしい。
IAMのロールから信頼関係タブを開き,信頼関係の編集を行う。
"Service"
へ"apigateway.amazonaws.com"
を追加する。
API Gatewayにオーソライザーを追加する
API Gatewayにオーソライザーを追加する。
タイプはLambda関数,IDソースにはクエリ文字列,"access_token"
などと追加する。
後はリソースタブからメソッドリクエスト画面で,認証に先程作ったカスタムオーソライザーを指定する。
IFTTT側の設定
エンドポイントのURLに"access_token=***"
を付けてアクセスするよう変更する。
結論
懸念事項だったセキュリティが少し堅牢になった(はず)。
セキュリティに配慮できる高度クラウド文字列シャッフル人材なので完全週休2日制,年収1千万円の職がほしい。
謝辞
本記事の一部はAmazon Web Serviceの無料利用枠で書かれた。
0 件のコメント:
コメントを投稿