VPC LambdaからNAT Gateway経由でSecrets Managerにアクセスする方法

VPC LambdaからNAT Gateway経由でSecrets Managerにアクセスする方法

VPCエンドポイント経由でSecrets Managerへのアクセスは「VPC LambdaからVPCエンドポイント経由でSecrets Managerにアクセスする方法」を参照ください。

シークレット作成

ここでは適当なシークレットを作成します。

VPC LambdaからNAT Gateway経由でSecrets Managerにアクセスする方法

シークレットキーシークレットの値
useradmin
password12345678

NATゲートウェイ作成

プライベートサブネット上にVPCLambdaを配置します。

NATゲートウェイは同一VPCのパブリックサブネット上に作成します。

VPC Lambda(node.js)からS3のオブジェクトをNAT Gateway経由で取得する – AWS SDK for JavaScript v3

ルートテーブルのルール追加

プライベートサブネットに関連付けたルートテーブルのルールを追加します。

VPC Lambda(node.js)からS3のオブジェクトをNAT Gateway経由で取得する – AWS SDK for JavaScript v3

宛先ターゲット
0.0.0.0/0NATゲートウェイID

これでVPCエンドポイントを作成せずにVPCLambdaからシークレットマネージャへ接続することが可能です。

VPC Lambda→NATゲートウェイ→IGW→シークレットマネージャ

プロジェクト作成

プロジェクト作成します。

npm init -y
npm i @aws-sdk/client-secrets-manager
touch index.js

package.json編集

{
  "name": "vpclambda-secretsmanager-v3",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "type": "module", // ★この1行追加
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "@aws-sdk/client-secrets-manager": "^3.181.0""
  }
}

Lambda(node.js v16)

ソースは以下の通りです。

import { SecretsManager } from '@aws-sdk/client-secrets-manager'
const client = new SecretsManager({
  region: 'ap-northeast-1'
});

const params = {
  SecretId:'secret-test'
};
const data = await client.getSecretValue(params) // top level await
console.log(data.SecretString)

export async function handler() {
  const response = {
    statusCode: 200,
    body: data.SecretString
  }
  return response
};

VPC LambdaからNAT Gateway経由でSecrets Managerにアクセスする方法

参考サイト

VPC の Lambda 関数へのインターネットアクセスを許可する

コメント

タイトルとURLをコピーしました