今回は「SQLインジェクションを体験してみた」の準備記事です。
IAMユーザーとアクセスキーを作らずに、IAM Identity Center(SSO)でログインしてTerraformを実行する手順をまとめます。ゴールは、ローカルからSSOログイン → Terraform applyでVPC/EC2(Public/Private + NAT)まで作れる状態にすること。次の記事では、作ったEC2へSSM経由でVS Code接続して編集するところまで進めます。
この記事でやること(ゴール)
- IAMユーザーやアクセスキーを作らずに、SSOでログインしてTerraformを実行できる状態を作る
- Terraformで「VPC / Public+Private Subnet / IGW / NAT / SG / EC2 /(必要ならIAMロール)」まで作成できる
成果物は以下になります。
1. 前提
- AWSアカウント
- AWS CLI v2(必須)
- Terraform
- ローカル環境(macOS/Windows/Linux)
2. Identity Center(IAM Identity Center)の有効化と初期設定
2.1 Identity Centerを有効化
- AWSコンソール → IAM Identity Center(旧SSO)
- Enable(有効化)
- Identity Store:今回は “Identity Center directory”(内蔵)でOK
- Start URL と Region を控える(後で aws configure sso に使う)
2.2(任意)MFAやパスワードポリシー
- 個人検証なら最低限でもOK
- チーム運用ならMFA前提
3. ユーザー作成
- Identity Center → Users → Add user
- Username / Email を入力
- 招待メールで初回パスワード設定
4. 許可セット(Permission Set)作成
4.1 許可セットを作る
- 例:Terraform-EC2
- セッション期間(例:1h〜8h)
4.3 ポリシー付与(例:2段階で説明)
- Step1:AWSマネージドポリシーで
EC2FullAccessを付与 - Step2:インラインポリシーで以下を付与
json
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "CreateAndManageEc2SsmRoleOnly",
"Effect": "Allow",
"Action": [
"iam:CreateRole",
"iam:GetRole",
"iam:UpdateAssumeRolePolicy",
"iam:DeleteRole",
"iam:TagRole",
"iam:UntagRole",
"iam:ListRolePolicies",
"iam:ListAttachedRolePolicies",
"iam:ListInstanceProfilesForRole"
],
"Resource": "arn:aws:iam::<AWS_ACCOUNT_ID>:role/ec2-ssm-*"
},
{
"Sid": "AttachOnlyAmazonSSMManagedInstanceCore",
"Effect": "Allow",
"Action": [
"iam:AttachRolePolicy",
"iam:DetachRolePolicy",
"iam:ListAttachedRolePolicies"
],
"Resource": "arn:aws:iam::<AWS_ACCOUNT_ID>:role/ec2-ssm-*",
"Condition": {
"ArnEquals": {
"iam:PolicyARN": "arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore"
}
}
},
{
"Sid": "CreateAndManageInstanceProfileOnly",
"Effect": "Allow",
"Action": [
"iam:CreateInstanceProfile",
"iam:GetInstanceProfile",
"iam:AddRoleToInstanceProfile",
"iam:RemoveRoleFromInstanceProfile",
"iam:DeleteInstanceProfile"
],
"Resource": "arn:aws:iam::<AWS_ACCOUNT_ID>:instance-profile/ec2-ssm-*"
},
{
"Sid": "PassOnlyEc2SsmRoleToEC2",
"Effect": "Allow",
"Action": "iam:PassRole",
"Resource": "arn:aws:iam::<AWS_ACCOUNT_ID>:role/ec2-ssm-*",
"Condition": {
"StringEquals": {
"iam:PassedToService": "ec2.amazonaws.com"
}
}
}
上記インラインポリシーは、TerraformがEC2にSSMで接続できるようにするポリシーをアタッチしたロールを渡すために必要です。
5. アカウントへの割り当て
- User(またはGroup)に Permission Set を割り当て
- 対象AWSアカウントを選択
6. ローカルでAWS CLIのプロファイル作成(SSO)
6.1 aws configure sso
- SSO start URL:Identity CenterのStart URL
- SSO region:Identity Centerを有効化したリージョン
- Account:対象アカウント
- Role:Permission Setで作られたロール
- Profile name:Terraform-EC2
コマンド例:
bash
aws configure sso
6.2 ログイン aws sso login
bash
aws sso login --profile Terraform-EC2
7. TerraformでSSOプロファイルを使う
7.1 provider設定
hcl
provider "aws" {
region = "ap-northeast-1"
profile = "Terraform-EC2"
}
7.2 実行手順
hcl
terraform init // 初期化
terraform plan // 変更リソース確認
terraform apply // 変更適用
8. Terraformでインフラ作成
- VPC
- Public subnet + IGW + Route table
- NAT Gateway + EIP
- Private subnet + Route table(0.0.0.0/0 -> NAT)
- SG(アプリ用/DB用)
- EC2(public/app, private/db)
まとめ
- SSOでTerraformを安全に回す土台ができた
- 次回:SSMでの接続、VS Codeからのリモート編集など
