踏み台サーバの入れ替え
プライベートネットワークへの唯一の入口を、運用担当が自分で新しくできるようにする。AWSに接続しないモックで、値はすべて架空。
引き金の値を書き換えて構成を適用すると、鍵と OS が同時に新しくなる。
書き換えと適用を、1 つの操作にまとめている
値だけを書き換えて放置すると、別の目的で構成を適用したときに、意図しない時刻でインスタンスが作り直される。押した時点で最後まで進む形にして、その状態を作らないようにしている。
パラメータストアに置いた値。構成のコードは、この値を読むだけの形にしてある。
今の値: ―
記録に残す。あとから経緯をたどるために選ぶ。
入れ替えの理由
連鎖する段階
実行すると、この順で作り直しが連鎖する。
- 引き金の値を書き換える人がパラメータの値を変える。構成のコードは変えない。
- 構成を適用する書き換えた値を読み込んで、構成の適用を実行する。
- 鍵素材を作り直す引き金の値が変わったことで、鍵素材が作り直される。
- EC2 Key Pair を差し替える新しい公開鍵で Key Pair が置き換わる。
- 秘密鍵をパラメータストアに保存する新しい秘密鍵が、暗号化したパラメータとして保存される。
- EC2 インスタンスを作り直す鍵が変わったインスタンスは作り直される。作り直しのときだけ、最新の OS イメージが使われる。
- 接続を確認する新しいインスタンスへ、セッション管理の経路で接続できることを確かめる。
いつ・なぜ・何が新しくなったか
開始 | 結果 | 理由 | 引き金の値 | 鍵の世代 | OS イメージ | 実行者 |
|---|---|---|---|---|---|---|
読み込み中 | ||||||
接続は、セッション管理の経路に寄せる。インターネット側に SSH の入口を作らない。
- EC2 Key Pair
- ―
- 秘密鍵の置き場所
- ―
構成
この画面が前提にしている、構成の書き方。
引き金になるのは、パラメータストアに置いた 1 つの値です。構成のコードはその値を読むだけで、値そのものは管理の外に置きます。値を書き換えて適用すると作り直しが起き、作り直しのときだけ最新の OS イメージが使われます。
構成の書き方(考え方の例)
# 1. 引き金の値を置くパラメータ。値は構成の管理外にして、人が書き換えられるようにする
|
module "key_rotation" {
|
store_type = "ssm"
|
secret_name = "bastion-key-rotation-id"
|
manage_value_flg = false # 値は管理外
|
secret_value = "initial"
|
}
|
|
# 2. 人が書き換えたあとの、実際の値を読む
|
data "aws_ssm_parameter" "key_rotation" {
|
name = module.key_rotation.ssm_parameter_name
|
depends_on = [module.key_rotation]
|
}
|
|
# 3. 踏み台に、その値を引き金として渡す
|
module "bastion" {
|
bastion = {
|
subnet_id = var.private_subnet_id
|
security_group_ids = [var.bastion_sg_id]
|
key_rotation_id = data.aws_ssm_parameter.key_rotation.value
|
}
|
} |
値を管理の外に置くため、実際の値は読み取りの参照で取り直します。構成に記録されるのは作成したときの初期値であり、人が書き換えたあとの値ではないためです。
