前回の記事まででアプリケーション構築の全体を紹介しました。
第5回はTerraformとあまり関係ないですが、AWS開発で推奨されている開発方法なので、その辺りの設定を整備していきたいと思います。
目次
- 環境構築
- Terraformでインフラ構築.ver1
- Terraformでインフラ構築.ver2
- Terraformでインフラ構築.ver3
- おまけ ←ココ
5. おまけ
このセクションでは以下を行います。
- MFA設定
- SwitchRole設定
5-1. MFA設定
前回までAWS CLI,Terraformコマンドを叩いてきました。
MFA認証を追加することで、発行されたIAMユーザーに対して、APIの実行や後述のSwtichRoleを制限できます。
仮にIAMユーザーのクレデンシャルな情報が漏れた場合でも、MFAによる認証通過を突破しなければならないようになります。AWSを扱う上でよりセキュアな開発が実現できます。
MFAデバイスの割り当て
AWSのマネコンにログインします。
[1] IAMに移動し、セキュリティ認証情報タブをクリック
[2] 多要素認証 (MFA) セクションから「MFA デバイスの割り当て」をクリック
[3] 「デバイス名」を入力、「認証アプリケーション」を選択
[4] 認証アプリをデバイスにインストール
Chrome拡張機能: Authenticator for Google Authenticator
iOS/Androidアプリ「Google Authenticator」
[5] アプリインストール後にQRコードを表示し、QRコードをスキャン
(Chrome拡張機能は右上にスキャンボタンを押してスキャン)
[6] 2回連続表示されたMFAコードを入力し「MFAを追加」をクリック
正常に設定が完了すればOKです。
[7] IAMから「アクセスキーの作成」を発行
cli mfa認証に使うので「アクセスキー ID」と「シークレットアクセスキー」を控えておきます。
[8]aws-mfa のインストール
すでにAWS CLIのインストールが完了しているかと思います。
追加で、aws-mfaを簡単に操作できるツールがあるのでそれを利用します。
$ pip3 install aws-mfa --user
[9] mfaプロファイルの設定
aws-mfaと連携するために、プロファイル名は default-long-term
としてます。
$ aws configure --profile default-long-term
控えていた「アクセスキー ID」と「シークレットアクセスキー」を設定し、
Default region name: ap-northeast-1
Default output format: json
と設定します。
[10] aws-mfaコマンド実行
前述の作成したMFAのARNをコピーし、
$ aws-mfa --profile default --device [MFA ARN]
を実行します。
INFO - Validating credentials for profile: default
INFO - Your credentials have expired, renewing.
Enter AWS MFA code for device [MFA ARN] (renewing for 43200 seconds):
とデバイスのMFAコードを要求されるので、設定したデバイスのMFAコードをコピペし認証完了させます。
無事認証が通過すると
INFO - Fetching Credentials - Profile: default, Duration: 43200
INFO - Success! Your credentials will expire in 43200 seconds at: 2025-06-xx 00:37:24+00:00
これでMFA認証は完了です。
疎通確認用に以下のコマンドを打てば、 AWS CLI での実行ができていることが確認できます。
$ rm -rf ~/.aws/cli/cache && aws sts get-caller-identity --profile default
{
"UserId": "ABCDEFGHIGKLMN",
"Account": "6613987654321",
"Arn": "arn:aws:iam::6613987654321":user/account"
}
なおこの設定以降は、MFA認証を通していなければ、トークンの期限が切れた後に上記のsts get-caller-identity
を実行しても認証エラーになるので注意してください。
5-2. SwitchRole設定
別のアカウントのロールに切り替えてAWSにアクセスする方法です。
例えば、ロール単位でservice-deployer
などがあればそれに切り替えて操作できますし、sandbox1``sandbox2``service-prod
などをAWS Organizationsからアカウント設定することで、それぞれのアカウント環境にリソースを展開することができます。
これを実現するのは簡単で、切り替え先のロールやアカウント情報が必要になります。
ロールであれば自身のアカウントからロール情報を取得します。
AWSアカウントであれば、AWS Organizationsから「招待」に移動し、「AWSアカウントの作成」を選択し、アカウントを作成します。
あとはそれぞれの情報をプロファイルに設定すれば完了です。
# sandbox1アカウントを作成した場合、以下のコマンドを実行
aws configure set profile.sandbox1.role_arn arn:aws:iam::03387654321:role/SwitchRole
aws configure set profile.sandbox1.source_profile default
CLI操作
$ aws sts get-caller-identity --profile sandbox1
ブラウザ操作
以下の拡張機能をインストールし、切り替えたいロールを設定することでマネコン上からすぐにアカウントを切り替えることができます。
[1] 拡張機能をインストールした後に、「configuration」を選択
[2] 切り替えたい情報を設定して保存
# ロール
[service-deployer]
aws_account_id = 6613987654321
role_name = switchrole-test
region = ap-northeast-1
color = ccccdd
# AWSアカウント
[sandbox1]
aws_account_id = 03387654321
role_name = OrganizationAccountAccessRole
region = ap-northeast-1
color = eac98f
[3] マネコンを表示させて拡張機能をクリック
ロールやアカウントが表示されクリックで切り替えることができます。
最後に
ここまで5回にわたってアプリケーション構築を紹介しました。
これからTerraformを始められる方、IaCに興味がある方の参考になればと思います。
他の記事