12
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AWS CLIのloginコマンドで別のAWSアカウントにアクセスする

12
Last updated at Posted at 2026-01-14

概要

2025年末、AWS CLIがアップデートして、loginコマンドを使ってAWSのログインを行うことができるようになった。
https://dev.classmethod.jp/articles/aws-cli-aws-login/

この結果、ブラウザによる認証を経由することでAWS CLI実行時にアクセスキーを設定することなく、コマンドが実行できるようになった。

環境

  • MacOS 15.4.1
  • AWS CLI Version 2.32.1
  • AWS SSOは未使用
  • AWSアカウントを個人で払い出ししており、MFAを設定している
  • 個人AWSアカウントを使って、別のAWSアカウントへ接続することがある

AWS Loginのメリット

まず何が嬉しいのかを記載する。

  1. 無期限なアクセスキーが不要になる
  2. サードパーティのツールが不要になる

手元からAWS CLIを実行するにあたり、最も簡単な方法はIAMユーザーに紐つくアクセスキーを発行してそのアクセスキーを~/.aws/credentialsに記載して、AWS CLIを実行することである。
これがまず不要になる。
また、aws-vaultなどを使って、踏み台などを行っている場合もあるかもしれないが、そういったことも不要になる。

AWS SSOの場合

企業などでAWS SSOなどをすでに使っていればこのような作業は元々不要ではある。
AWS SSOを使っている場合 aws sso login コマンドを使って、SAML認証などで期限付きアクセスキーを払い出すことになる。
GoogleWorkspaceやOkta、EntraIDでSSOを行っている場合などは殆どがこのパターンだと思われる。

個人アカウントの場合

個人アカウントなどでAWS SSO環境を使用していないことが殆どだと思われる。
その場合、どうしてもアクセスキーを使うことになるが、アクセスキーは期限を設定せずに永的に使用できてしまう。
これは本当は望ましくない。
Administrator権限を持つIAMユーザーのアクセスキーなので、なにかの原因で漏洩してしまうと、個人のAWSアカウントが乗っ取られたら勝手にAWSアカウントが使われて気がついたら請求額がX百万円なんてことになりかねない。

そこでaws loginを使うと、デフォルトでは15分しか使えない期限付きのアクセスキーが払い出されてそれを使うことになる。
この結果、万が一なにかしらの理由でPCが乗っ取られても、AWSアカウントへログインする認証情報がわからなければ、AWSへアクセスすることができず被害を防ぐことができる。

  1. アクセスキーを取得するのに、AWSへログインが必要(IAMのメールアドレスとパスワード)
  2. MFAの一時トークンが必要
  3. aws loginを使って上記を取得する必要がある(期限付き)

となり、アクセスキーがもし漏れたとしても、期限までしか使用できない。

AWS Loginの使い方

まず、~/.aws/credentialsは記載が不要となるので、他に使用していなければファイルごと消してしまう。※不安であればまずはコメントアウトでも良い。

$ cat ~/.aws/credentials
cat: /Users/XXXXX/.aws/credentials: No such file or directory

この状態で、下記を実行する

aws login

そうすると、AWSのログインが必要になるのでログインする。
30b43e58-442b-42ad-a4aa-a6d3127f4e23.png

通常通り、IAMユーザーとMFAでログインすると、~/.aws/configが書き換えられて下記のようになる。

$ cat ~/.aws/config
[default]
output=json
region=ap-northeast-1
login_session = arn:aws:iam::{AWSアカウントID}:user/IAMユーザー名

権限を確認すると下記のようになり、AWS CLIが実行できるようになったことがわかる。

$ aws sts get-caller-identity --no-cli-pager
{
    "UserId": "ABCDEFGTZ123ABC4ABCD5",
    "Account": "{AWSアカウントID}",
    "Arn": "arn:aws:iam::{AWSアカウントID}:user/{IAMユーザー}"
}

これでアクセスができたらIAMユーザーのアクセスキーをコンソールから削除して、~/.aws/credentials にアクセスキーを書いている場合はこちらも削除してしまおう。

踏み台の個人のAWSアカウントから別のAWSアカウントへアクセスする(AWS CLIのみ)

もともとアクセスキーなしにaws-vaultなどサードパーティのツールを使ってログインしていた人もいるかもしれない。
しかし、aws loginを使うことで、aws-vaultなどを使わなくても、セキュアなアクセスキーで余計なコマンドを使わなくても良くなる。
イメージ的には下記のようになる。

アクセス先AWSアカウントの準備

事前にアクセス先のAWSアカウントではAssumeRoleするためのIAMロールを用意しておく。

IAMロール名は適当にexample_AssumeRoleのようなものにする。
信頼関係を下記のようにする。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam:{AWSアカウントID}:user/{IAMユーザー名}" # 踏み台AWSアカウントのIAMユーザーのARN
            },
            "Action": "sts:AssumeRole",
            "Condition": {  # MFAを有効化しているならいれておく
                "Bool": {
                    "aws:MultiFactorAuthPresent": "true"
                }
            }
        }
    ]
}

IAMポリシーは付与したい権限とする。Terraformで使うなら必然的にAdministratorAccessにせざるをえないと思われる。そうでないなら適切なポリシーとする。

aws config 記載内容

AWS CLIだけであればPCの ~/.aws/configに下記を記載する

$ cat ~/.aws/config
[default]
output=json
region=ap-northeast-1

### わかりやすい名前を書いておく
[profile exampleB]
region=ap-northeast-1
source_profile=default
mfa_serial=arn:aws:iam::{AWSアカウントID}:mfa/{IAMユーザー名} #踏み台用のIAMユーザーのARN

なお、aws loginを実行すると、logion_sessionという項目が自動的に追記される。

$ cat ~/.aws/config
[default]
output=json
region=ap-northeast-1
login_session = arn:aws:iam::{AWSアカウントID}:user/{IAMユーザー名} <- 自動的に追記されるので書かなくてもOK

この状態で、aws login --profile exampleB を実行する。
そうするとAssumeRoleするIAMロールが表示されるのでそれを選択する。

70a39be7-4ac9-4038-bdfc-8ab1a5d31e03.png

そうするとexampleBアカウントへAWS CLI使ってアクセスができるようになる。

$ aws sts get-caller-identity --no-cli-pager --profile exampleB
{
    "UserId": "ABCDEFG123445:xxxx",
    "Account": "{AWSアカウントID}",
    "Arn": "arn:aws:sts::{AWSアカウントID}:assumed-role/example_AssumeRole/{IAMユーザー名}"
}

踏み台のAWSアカウントから別のAWSアカウントへアクセスする(Terraform編)

terraformでも下記のようにすることで、踏み台経由でAssumeRoleしてterraformが実行できるようになる。

$ cat ~/.aws/config
[default]
output=json
region=ap-northeast-1
login_session = arn:aws:iam::{AWSアカウントID}:user/{IAMユーザー名}

### exampleB
[profile exampleB]
region=ap-northeast-1
source_profile=default
role_arn=arn:aws:iam::{AWSアカウントID}:role/exampleB_AssumeRole/{IAMユーザー名}

[profile exampleB-terraform] <-- これを追記する
credential_process = aws configure export-credentials --profile exampleB <-- profileは上と同じ名前のexampleBとする

terraformのbackend.tfは下記のように、exampleB-terraformを指定する。

$ cat backend.tf
provider "aws" {
  region  = "ap-northeast-1"
  profile = "exampleB-terraform"
  default_tags {
    tags = {
      Name = "exampleB"
    }
  }
}

terraform {
  required_version = "~> 1.14.0"
  backend "s3" {
    bucket  = "exampleB-terraform"
    key     = "terraform.tfstate"
    region  = "ap-northeast-1"
    profile = "exampleB-terraform"
  }
}

このようにすることで、Terraformを実行する際も踏み台のAWSアカウントに対して、aws loginを行うことでログインができるようになる。

12
3
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
12
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?