lambdaからRDSにアクセスするときに注意すること

lambdaからRDSにアクセスするときに注意すること:


RDSの設定はKMSでEncryptして書く

Key Management Service (KMS) からEncrypt用のKeyを作成する (Consoleでできるので詳細割愛)


KMSのAccess権をLambdaのRoleに与える

KMSをLambdaが操作できるように、KMSを使ってDecryptできるPolicyを作成し、LambdaにつけるRoleに付与する

allow-lambda-to-decrypt-policy
{ 
    "Version": "2012-10-17", 
    "Statement": [ 
        { 
            "Sid": "VisualEditor0", 
            "Effect": "Allow", 
            "Action": "kms:Decrypt", 
            "Resource": "arn:aws:kms:<region>:<user_id>:key/<key_id> 
        } 
    ] 
} 


LambdaはRDSと同じVPCを指定する

LambdaにVPCが指定されると、NATを設定しない限り、Internetへ出れなくなるので、RDSがLambdaのVPCの外にあると、指定したRDSのEndpointからresolveした先はPublicのIpとなりInternet経由で接続しようとするので、特に理由がない場合は、同じVPCにして、内部ネットワークでのアクセスにする。

別のVPCである必要がある場合は、Peer Connectionを貼って、RDSに内部IPでアクセスで切るかと思ったが、うまくいかなかったので、なにか設定が必要かも。(特に調べてない)


LambdaにVPCAccessの権限をRoleに与える

VPCを設定すると、LambdaにVPCの権限が必要になる。

AWS managed AWSLambdaVPCAccessExecutionRole という名前のPolicyがあるので、これをLambdaのRoleに付与する(policyのくせに名前がRoleというなんとも分かりづらいもの)

内容は以下:

AWSLambdaVPCAccessExecutionRole
{ 
    "Version": "2012-10-17", 
    "Statement": [ 
        { 
            "Effect": "Allow", 
            "Action": [ 
                "logs:CreateLogGroup", 
                "logs:CreateLogStream", 
                "logs:PutLogEvents" 
            ], 
            "Resource": "*" 
        } 
    ] 
} 


Lambdaの設定

Credentialsを環境変数に書き、作成したKMSを指定。


image.png


Encryptボタンを押すと、Encryptされる

image.png

右側の Code をクリックするとLambdaの中でどう使えばいいのかが出てくる



image.png


これで、Lambda関数のConsole上で直接パスワードなどが見れなくなった。


まとめ

  1. KMSの作成
  2. Lambdaのロールには、VPCアクセス、KMS権限の付与をする
  3. Credentialsは環境変数にEncryptされたものを入れる
  4. Credentialsを実際に使用する部分は、Lambdaの関数内でKMSを使ってDecryptして使用する

コメント

このブログの人気の投稿

投稿時間:2021-06-17 22:08:45 RSSフィード2021-06-17 22:00 分まとめ(2089件)

投稿時間:2021-06-20 02:06:12 RSSフィード2021-06-20 02:00 分まとめ(3871件)

投稿時間:2021-06-17 05:05:34 RSSフィード2021-06-17 05:00 分まとめ(1274件)