手順
- VPCを作成
- プライベートサブネットを1つ作成
- (↑Lambdaを入れる)
- Lambdaを作成
- Lambdaのロールを編集
- LambdaをVPCに入れるためのポリシーをアタッチ
- SecretsMangerを読むためのポリシーをアタッチ
- LambdaをVPCに入れる
- SecretsMangerでシークレット作成
- VPCエンドポイントを作成
- Lambdaを編集
- Lambdaでシークレットが取得出来る事を確認
VPCを作成
お試しなので下図の最小限の設定で作ります。
Lambdaを作成
ランタイムはNode.js。関数名のみ入力したらデフォルトのままで「関数の作成」します。
Lambdaのロールを編集
「設定」タブの「アクセス権限」に表示された実行ロールのリンクをクリックします。
IAMロールの画面に飛びます。「許可を追加」をクリックすると現れる「ポリシーをアタッチ」をクリックします。下記2つのポリシーをアタッチします。
- AWSLambdaVPCAccessExecutionRole
- SecretsManagerReadWrite
LambdaをVPCに入れる
Lambdaの画面に戻る。
「設定」タブを開いて「VPC」を選択して「編集」する。
- どのVPCに入れるか選択
- どのサブネットに入れるか選択
- どのセキュリティグループ(SG)を割り当てるか選択
- VPC作成時に自動で作られたdefaultと表示されているものでOK
SecretsMangerでシークレット作成
SecretsManagerのページへ移動します。「新しいシークレットを保存」します。
!さっきまで作業していたリージョンのままであることを確認してください。移動したタイミングで切り替わってしまう事があります。
- シークレットのタイプ
- その他のシークレットのタイプ
- キー/値のペア
- password
- hogehoge
- 暗号化キー
- aws/secretsmanager
- シークレットの名前
- mypassword
ローテーションを設定(オプション)
デフォルトのまま。
レビュー
問題無ければ「保存」します。
VPCエンドポイントを作成
VPCのページに移動します。
「エンドポイント」を選択して「エンドポイントを作成」をクリックします。
- 名前タグ
- myendpoint
- サービスカテゴリー
- AWSのサービス
- サービス
- 下記を検索窓に入力して選択する
- com.amazonaws.ap-northeast-1.secretsmanager
- VPC
- 上記で作成したものを選択
- サブネット
- 上記で作成したものを選択
- セキュリティーグループ
- LambdaをVPCに入れる際に割り当てたセキュリティーグループを選択
- ↑これを間違うとLambdaからシークレットの取得が出来ないので注意
Lambdaを編集
import {
SecretsManagerClient,
GetSecretValueCommand,
} from '@aws-sdk/client-secrets-manager';
const secret_name = 'mypassword';
const client = new SecretsManagerClient({
region: 'ap-northeast-1',
});
export const handler = async (event) => {
let mypasword;
try {
const secretObject = await client.send(
new GetSecretValueCommand({
SecretId: secret_name,
VersionStage: 'AWSCURRENT', // VersionStage defaults to AWSCURRENT if unspecified
})
);
mypasword = JSON.parse(secretObject.SecretString);
} catch (e) {
console.error(e);
return null;
}
return {
statusCode: 200,
body: JSON.stringify( mypasword.password ),
};
};
Lambdaでシークレットが取得出来る事を確認
「Deploy」して「Test」します。シークレットに登録した hogehoge が現れたら成功です。
失敗してしまう場合は
私が失敗したパターンは以下のどちらかでした。
- VPCエンドポイントのサブネットやセキュリティグループがLambdaに割り当てているものと違う
- シークレットを他のリージョンで作成してしまっている、あたりを確認してみて下さい。