最終更新日: 2026-08-02
TOP(About this memo)) > 一覧(AWS) > AWS CLI・CloudFormation
aws loginコマンド(後述)という選択肢もある。新しく作成したAWSアカウントでAWS CLIを使う場合、ルートユーザーの認証情報を直接使うのではなく、IAMユーザーを作成してアクセスキーを発行し、aws configureに設定する方法が一般的。
AWS CLIの認証方法は以下のいずれかを選べる。
| 方法 | 利用可否 | 推奨度 |
|---|---|---|
| ルートユーザーのアクセスキー | 可能 | 非推奨 |
| IAMユーザーのアクセスキー | 可能 | 一般的 |
aws login(root/IAMユーザーの一時クレデンシャル、後述) |
可能(CLI 2.32.0以降) | 個人開発では有力な選択肢 |
| IAM Identity Center(SSO) | 可能 | 推奨(組織・複数アカウント運用向け) |
ルートユーザーのアクセスキーでもCLIは利用できるが、ルートユーザーは全権限を持ち誤操作時の影響が最大になるうえ、アクセスキー漏洩時のリスクも大きいため非推奨。以下の構成が現実的。
ルートユーザー
↓
IAMユーザー作成
↓
アクセスキー発行
↓
aws configure
IAM → Users → Create user
terraform-admin)。Attach policies directlyを選択し、AdministratorAccessをアタッチする。
Name: terraform-user)。IAM → Users → 対象ユーザー → Security credentials → Create access key
用途はCommand Line Interface (CLI)を選択する。発行された「Access Key ID」と「Secret Access Key」はaws configureで使うため保存しておく。
2025年11月に追加された、比較的新しいコマンド。IAM Identity Centerを使わずに、既存のAWS Management Consoleのサインイン情報(ルートユーザー/IAMユーザー/フェデレーションID)をそのまま使って一時的なクレデンシャルを取得できる。長期間有効なアクセスキーを発行・管理する必要がなくなる点が最大のメリット。
SignInLocalDevelopmentAccessをアタッチしておく必要がある。ルートユーザーで使う場合は追加の権限設定は不要。aws loginではなくaws configure sso/aws sso login(前述)を使う。aws login
--profile <name>でプロファイルを指定/新規作成できる(未指定時はdefault)。aws login --remoteを使うと、別デバイスで開くURLと認証コードが表示され、コードを手動で貼り付ける形で認証できる。書き込まれる設定はアクセスキーではなく、対象IAMプリンシパルのARNのみ。
[default]
login_session = arn:aws:iam::111122223333:user/terraform-admin
region = ap-northeast-1
~/.aws/login/cacheにキャッシュされる(SSOの~/.aws/sso/cacheとは別ディレクトリ)。aws loginをやり直す。aws logout(--profile指定可、--allで全プロファイル一括)。IAM Identity Centerのような複数アカウント横断の一元管理はできないが、個人開発で「IAMユーザーは使いたいが長期アクセスキーは避けたい」という場合に、Identity Center/Organizationsを構築するほどではない規模でも使える手軽な選択肢(IMO)。
(出典: Login for AWS local development using console credentials、Simplified developer access to AWS with ‘aws login’)
curl "https://awscli.amazonaws.com/AWSCLIV2.pkg" -o "AWSCLIV2.pkg"
sudo installer -pkg AWSCLIV2.pkg -target /
which aws
aws --version
brew install awscliでインストールする方法もある。AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEYAWS_DEFAULT_REGIONAWS_DEFAULT_OUTPUTAWS_DEFAULT_PROFILE$ aws configure
AWS Access Key ID [None]: {アクセスキー(各自)}
AWS Secret Access Key [None]: {シークレットアクセスキー(各自)}
Default region name [None]: (リージョンを指定)
Default output format [None]: json
確認: aws configure list
ap-northeast-1を指定することが多い。jsonが無難(Terraformとの相性がよく、スクリプトでも処理しやすい)。他にtable(人間には見やすい)、text(簡易表示)がある。アカウントを取り違えていないかは以下でも確認できる。
aws sts get-caller-identity
{
"UserId": "AIDAxxxxxxxx",
"Account": "123456789012",
"Arn": "arn:aws:iam::123456789012:user/terraform-admin"
}
Accountが意図したAWSアカウントIDになっていることを確認する。
$ aws configure --profile user1
すでに作成済みのプロファイルを指定すると編集モードになる。
確認: aws configure list --profile user1
~/.aws/credentials、~/.aws/configに保存されている。専用の確認コマンドは無いため、以下で直接確認する。cat ~/.aws/credentials
cat ~/.aws/config
export AWS_DEFAULT_PROFILE=user1
aws configure list # 確認
aws configureで設定する。export AWS_DEFAULT_PROFILE=default
aws configure list # 確認
AWS_PROFILEとの関係(?): AWS_DEFAULT_PROFILEが設定されていない場合はAWS_PROFILEが優先されるらしい。両方設定されている場合はAWS_DEFAULT_PROFILEが優先される。プロファイルを使い分けるのではなく、古いAWSアカウントの設定自体を削除して新しいアカウントに一本化したい場合は、~/.aws/credentials・~/.aws/configを削除すればよい。
削除前に念のためバックアップを取っておく。
mkdir -p ~/.aws-backup
cp ~/.aws/credentials ~/.aws-backup/credentials.bak 2>/dev/null
cp ~/.aws/config ~/.aws-backup/config.bak 2>/dev/null
ファイル単位で削除:
rm -f ~/.aws/credentials
rm -f ~/.aws/config
またはAWS CLIの設定ディレクトリごと削除:
rm -rf ~/.aws
削除後にaws configureで新しいアカウントのIAMユーザーのアクセスキーを設定し直す。
--profileで指定すればよい。(例) aws s3 ls --profile user1aws iam list-users # IAMユーザー確認
aws iam list-groups # IAMグループを確認
aws ec2 describe-instances
アクセスキーを長期間発行し続ける運用はキー漏洩のリスクがあるため、避けられるなら避けたい(IMO)。選択肢は主に2つ。
aws login: 既存のIAMユーザー/ルートユーザーのサインイン情報はそのまま使い、アクセスキーの代わりに一時クレデンシャルを使う。Identity Centerを構築するほどではない個人開発規模で手軽に導入できる。個人開発やTerraform学習用途で、複数アカウントを横断する予定が無いなら、IAMユーザー+アクセスキー方式のままでも実用上困らないが、aws loginに切り替えるだけでアクセスキーを持たずに済むため、乗り換えの手間は小さい(IMO)。
aws configure sso〜aws sso login/logoutの具体的な使い方はOrganizations・IAM Identity Centerを参照。(例) YAML形式の場合(JSONやYAMLで書ける)
AWSTemplateFormatVersion: '2010-09-09'
Description: 〜〜
Parameters: # 実行時(スタック作成/更新)にユーザー入力を求めるパラメータ(KeyPairの名前や、DBのユーザー名など)
...
Resources: # Amazon EC2など、スタックを構成するリソースとプロパティ
myVPC: # <Logical ID> テンプレート内で一意なID。テンプレート内で他のリソースを参照する際にこのIDを利用
Type: AWS::EC2::VPC
Properties: # 各リソースの作成時に指定するプロパティ。リソースタイプによって利用できるプロパティは異なるため、公式ドキュメントを確認しながら指定する
CidrBlock: 10.0.0.0/16
Tags:
- Key: Name
Value: first-VPC
Outputs: # スタック構築後にAWS CloudFormationから出力される値(DNSやEIPの値など)
...
aws cloudformationのような形でCLIから実行できる。WEBコンソールから実施すると再現性がイマイチになるため、CLIに統一するほうが無難(IMO)。以下のようなシェルファイルを用意しておくと便利。
#!/bin/bash
CFN_TEMPLATE=vpc.yml
CFN_STACK_NAME=vpc
aws cloudformation deploy --stack-name ${CFN_STACK_NAME} --template-file ${CFN_TEMPLATE} \
--parameter-overrides \
NameTagPrefix=prd \
VPCCIDR=10.70