プロビジョニングツールとかで機密情報を管理する方法もあるが、
AMIからポンッとインスタンス立てて機密情報だけ入れれば動かせるという状況で
S3から機密情報を取ってくるようにすれば運用が楽になるんじゃないかという話。
前提条件
- 本番環境用のVPCがある
VPCエンドポイントの作成
AWSのサービス一覧からVPCを開き、エンドポイントをクリック
VPCとサービスを選択
基本的にフルアクセスでいいが、必要に応じてポリシーを設定。
ルートテーブルを選択
S3バケットポリシーの設定
S3ではバケットごとにアクセスを制限するためのポリシーを設定することができるので、上で作ったVPCエンドポイントからのみアクセスを許可するようにする。
S3でバケットのプロパティを開き、「バケットポリシーの追加」をクリック。
ポリシー編集ダイアログが出るので、以下を入力
バケットポリシー
{
"Version": "2012-10-17",
"Id": "PolicyForCredentials",
"Statement": [
{
"Sid": "Allow-production-VPC-to-getObject",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:getObject",
"Resource": "arn:aws:s3:::<bucket name>/*",
"Condition": {
"StringEquals": {
"aws:sourceVpce": "上で作ったVPCエンドポイントID"
}
}
}
]
}
以上でVPCに属するインスタンスからはバケット内のファイルが見えるようになったので、あとは
curl https://s3-ap-northeast-1.amazonaws.com/bucket/credentials.txt > /path/to/credentials.txt
みたいな感じで取ってくる。