VPCエンドポイント経由のアクセスのみSecrets Managerへのリクエストを受け付けるようにリソースのアクセス許可設定をする
Secrets Managerの「リソースのアクセス許可」を設定することによって、VPCエンドポイント経由していないリクエストをアクセス拒否するような設定にすることができます。
例えばサーバレスLambdaからのアクセスを拒否し、VPC Lambdaからのアクセスを許可するようなことが可能です。
VPCエンドポイント
Secrets ManagerのVPCエンドポイントが以下とします。
Secrets Manager
リソースのアクセス許可を、以下のように設定します。
{ "Version":"2012-10-17", "Statement": [ { "Sid": "RestrictGetSecretValueoperation", "Effect": "Deny", "Principal": "*", "Action": "secretsmanager:GetSecretValue", "Resource": "*", "Condition": { "StringNotEquals": { "aws:sourceVpce": "vpce-03cc67177ae485e10" ★ Secrets ManagerのVPCエンドポイントID } } } ] }
Lambda or VPC Lambda(node.js v16)
Lambdaソースです。
import { SecretsManager } from '@aws-sdk/client-secrets-manager' const client = new SecretsManager({ region: 'ap-northeast-1' }); const params = { SecretId:'secretmanager' // シークレット名 }; const data = await client.getSecretValue(params) export async function handler() { const {username,password,engine,port,host,dbClusterIdentifier} = JSON.parse(data.SecretString) console.log(`username:${username}`) console.log(`password:${password}`) console.log(`engine:${engine}`) console.log(`port:${port}`) console.log(`host:${host}`) console.log(`dbClusterIdentifier:${dbClusterIdentifier}`) const response = { statusCode: 200, body: data.SecretString } return response };
サーバレスLambdaで実行するとAccessDeniedExceptionが発生します。
VPC Lambda(エンドポイントと同一のVPC上)にして実行するとシークレット値を取得することができるようになります。
参考サイト
アクセス許可ポリシーの例 - AWS Secrets Manager
アクセス許可ポリシーは JSON 構造化テキストです。 JSON ポリシードキュメント構造 を参照してください。


KHI入社して退社。今はCONFRAGEで正社員です。関西で140-170/80~120万から受け付けております^^
得意技はJS(ES6),Java,AWSの大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^
資格:少額短期保険募集人,FP3級
コメント