コラム

LambdaからRdsProxy経由でのRDSへのアクセス制御

構成

下記の様な構成のVPCを作成して、RDSProxy経由でLambdaからのアクセスをしてみます。
LambdaにはVPCとの関連設定をしてあるものと、してないものそれぞれ用意しアクセス可否を確かめてみます。

調査手順

  • VPCを作成する。
  • VPC内には1つのAZにつきパブリック、プライベートを用意する。
  • もう1つのAZのサブネットはサブネットグループ作成に必要なので用意する。
  • 作成したVPCと関連付けをしてあるLambdaを用意する。
  • VPCと関連付けしてないLamabdaを用意する。
  • RDSや各セキュリティ条件を変更し、各Lambdaからのアクセス可否を調査する。

アクセス可否一覧

OK:疎通可に設定
NG:疎通不可に設定
両方:OK、NG両方

  • サブネットネットワークACL
    • サブネットのネットワークACLの設定がRDSポートでアクセス可能に設定してあるかを指定
  • RDSパブリックアクセス
    • RDSのパブリックアクセスの設定がありの設定になっているかを指定
  • VPCセキュリティグループ
    • RDSへ設定したVPCセキュリティグループがRDSポートでアクセス可能に設定してあるかを指定
  • サブネット
    • パブリックサブネットのRDSへのアクセスかプライベートサブネットのRDSへのアクセスかを指定
  • LambdaVPC設定
    • VPC設定のしてあるLambdaからのアクセスか、してないLambdaからにアクセスかを指定
  • アクセス可否
    • アクセスが出来たかの結果

Lambdaコード・使用ライブラリ

使用したLambdaのコードを載せておきます。
尚、このコード実行にはpymysqlというライブラリをレイヤーで登録して使用しています。

import sys
import os
import boto3
import pymysql
import json

db_name = 'test' # testというDBを作成しました
db_password = 'xxxxxxxxxxxxxxxxxx' # SecretManagerで設定してあるパスワードを指定
end_point = 'mysqlproxy.proxy-xxxxxxxxx.ap-northeast-1.rds.amazonaws.com' # RdsProxyのarnを指定
port = 3306
db_user = 'admin'
region = 'ap-northeast-1'

def lambda_handler(event, context):
    try:
        connection = pymysql.connect(
            host=end_point,
            user=db_user,
            passwd=db_password,
            port=port,
            database=db_name
        )
        print("connect")
        # sampleというテーブルを作成し、データを入れそのデータを全て取得します。
        with connection.cursor() as cursor:
            cursor.execute("SELECT * FROM sample") 
            query_results=cursor.fetchall()
            for result in query_results:
                print(result)
        
    except Exception as e:
        print(e)
        statusCode = 500
    finally:
        if connection is not None:
            connection.close()
                
    return {
        'statusCode': 200,
        'body': "finish"
    }

使用ライブラリは此方から取得可能です。これをレイヤーとして登録しLambdaで使用します。

この記事をシェアする
  • Facebookアイコン
  • Twitterアイコン
  • LINEアイコン

お問い合わせ ITに関するお悩み不安が少しでもありましたら、
ぜひお気軽にお問い合わせください

お客様のお悩みや不安、課題などを丁寧に、そして誠実にお伺いいたします。

お問い合わせはこちら
お電話でのお問い合わせ 03-5820-1777(平日10:00〜18:00)
よくあるご質問