Skip to content

docs(infra): 踏み台越し migration の手順を実地に合わせる - #111

Closed
yook11 wants to merge 1 commit into
mainfrom
docs/aws-readme-migration-procedure
Closed

docs(infra): 踏み台越し migration の手順を実地に合わせる#111
yook11 wants to merge 1 commit into
mainfrom
docs/aws-readme-migration-procedure

Conversation

@yook11

@yook11 yook11 commented Aug 4, 2026

Copy link
Copy Markdown
Owner

背景

本番へ z10 / z11 を適用する作業で、infra/aws/README.md の記述が現状と 2 点ズレていることが分かった。どちらも RDS 移行後に生じたもので、実際に手が止まった箇所。

1. TLS の指定

手順 4 / 5 の URL が host=127.0.0.1 になっていた。この形は 2 つの経路のどちらも塞がっている。

  • sslmode を省く → asyncpg 既定の prefer に落ちる。prefercheck_hostname=False / verify_mode=CERT_NONE なので、検証なしの TLS で接続が成立する。rds.force_ssl=1 は満たすため気づけない
  • sslmode=require を付けるdb_ssl.py が require を verify-full に格上げするため、CN 不一致で落ちる

db_ssl.py は「検証なし TLS というモードは持たない」と宣言している (sslmode 抜きの ssl 系 param を ValueError で弾く設計) ので、その抜け道を手順書に残さない。hosts で RDS のホスト名を 127.0.0.1 へ向け、名前解決で解く形に直した。

足す: echo "127.0.0.1 <RDS endpoint>" | sudo tee -a /etc/hosts
消す: sudo sed -i '' '/<RDS endpoint>/d' /etc/hosts   (作業後に必ず)

あわせて「libpq は host / hostaddr の分離指定で保てるが、asyncpg / pg にその分離は無い」を明記した。psql と backend で解き方が違うことが読み取れなかったのが元の混乱の原因。

2. 踏み台に使う権限

「生やす / 繋ぐ / 消す」の 3 つはいずれも admin が要るが、手順書に profile の記載が無かった。deploy 用の profile で試して 3 回失敗した。

理由は bastion.tf の注記のとおりで、

  • 踏み台の role は Session Manager を使うため permissions boundary を付けられない (boundary が ssmmessages:* を Deny)
  • boundary 無しの role 作成は terraform-apply 側の DenyRoleCreationWithoutBoundary が拒否する
  • ssm:StartSessionterraform-apply は持たない

踏み台が admin 専用なのは設計であって権限不足ではない、と読める形で手順書側にも書いた。

公開範囲

実 endpoint 名は <RDS endpoint> の placeholder のまま。アカウント ID・ホスト名・実 profile 値は含まない。

🤖 Generated with Claude Code

RDS 移行後に 2 点ズレていた。

TLS: 手順 4/5 の URL が host=127.0.0.1 だった。sslmode を省くと asyncpg 既定の
prefer に落ち、検証なしの TLS で繋がる (rds.force_ssl は満たすので気づけない)。
sslmode=require を付けると db_ssl が verify-full に格上げするため CN 不一致で
落ちる。hosts で RDS のホスト名を 127.0.0.1 へ向け、名前解決で解く形に直す。
db_ssl が「検証なし TLS は持たない」と宣言している以上、抜け道は手順書に残さない。

profile: 踏み台の生成・接続・撤去はいずれも admin が要る。role に boundary を
付けられず (boundary が ssmmessages:* を Deny)、boundary 無しの role 作成は
terraform-apply が拒否する。ssm:StartSession も持たない。bastion.tf の注記には
あるが手順書側に無く、deploy 用 profile で試して 3 回失敗した。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@yook11

yook11 commented Aug 4, 2026

Copy link
Copy Markdown
Owner Author

運用手順を公開 README に厚く書き足す方向だったため取り下げる。Public Repository Hygiene に沿って private runbook へ移す形に作り直した (後継 PR)。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant