1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

SSO(IAM Identity Center)でTerraform実行環境を作り、VPC/EC2まで構築する

Posted at

今回は「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ロール)」まで作成できる

作成したインフラの構成図は以下です。
test.drawio.png

成果物は以下になります。

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からのリモート編集など
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?