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
IAM ポリシー (アイデンティティベースのポリシー) を使用してアクセス許可を指定し、 のシークレットへのアクセスを制御します AWS Secrets Manager。

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




コメント