🔒

個人利用のAWSアカウントでSSOログインしてawscliを利用できるようにする

2024/08/03に公開

背景

個人利用だとめんどくて、ローカルにAWS_ACCESS_KEYを保管して、MFAをcliからでも必須にするくらいの対策してた
SSOログイン使う方式を仕事で試して、安全だなと思ったので個人利用でも設定を行う

参考手順

手順

rootユーザーでログインして、IAM Identity Centerの有効化

rootユーザーでログイン後、下記で

https://ap-northeast-1.console.aws.amazon.com/singlesignon/home?region=ap-northeast-1#!/

有効にするを選択します

個人利用なので、このAWSアカウントでのみ有効にするにしようとしたのですが後続のアカウントへのアクセス権限を付与するところで詰んだのでOrgnaizationsにします。。。

IAM Identity Centerダッシュボードでの設定

前のステップが終わると、そのままダッシュボードに飛ばされます
ダッシュボード上でいくつか設定を行います

多要素認証の設定

MFAを必須にしたいです。デフォルトで下記のように

  • MFA設定済みユーザーにはサインイン時に要求
  • 未設定ユーザーはMFAデバイス登録を促す

となってるので特に変更しませんでした

ユーザーの作成

左のサイドバーからユーザーを選び、ユーザーを追加を選びます

プライマリ情報にユーザー名やメールアドレスを入力し、任意欄は未記入で次へ
グループ追加もなしで次へ
確認画面で、ユーザーを追加を選ぶ

ユーザーのアクティベート

登録したメールアドレスに、招待メールが届いてるのでそちらを開いて,パスワードを設定する
(Cookieとかあるので、別ブラウザで開くと良いかと思います)

設定後、ユーザー名と設定したパスワードでログインするとMFAの設定が求めらえる

今回はAuthenticator appを選びます

QRコードが表示されるので、対応するアプリで設定します
自分はGoogle Authenticatorを利用しました

https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2&hl=en

ユーザーがアクセスできるAWSアカウントと権限の設定を行う

現状作成したユーザーに権限を付与してないため、特にアクセスできません
以下の作業を行う必要があります

  • アクセスできるAWSアカウントへの紐付け
  • そのAWSアカウントで操作できる許可設定

許可セットの作成

まずAWS上で操作できる許可のセットを作成します
のちのAWSアカウントへの紐付け時にこちらを利用する形となります
今回は強いですがAdministratorAccessを使います

まずダッシュボードの左のサイドバーから 許可セット を選びます
そして、許可セットの作成を選び

  • 許可セットのタイプ: 事前定義された許可セット
  • 事前定義された許可セットのポリシー: AdministratorAccess

を選び、次へを選びます

許可セットの詳細でセッション期間がデフォルトだと1時間のため
微妙であれば8hあたりに伸ばすと良いかもしれません

そのまま次へで、作成を押します

ユーザーとAWSアカウントの紐付け

ダッシュボードの左のサイドバーから AWSアカウント を選びます

tree構造で

  • root
    • 管理アカウント

のようになっていると思います。こちらの管理アカウントにチェックをつけ、右上のユーザーまたはグループを割り当てを押します

ユーザータブで作成したユーザーを選び次へ
許可セットで、先ほど作成したAdministratorAccessにチェックをつけ次へ

送信を押します。

確認

ダッシュボードで確認

ダッシュボードの左のサイドバーから ユーザー を選び、作成したユーザーを選択します
AWSアカウントタブで、アカウントが付与されていれば一旦OKです

AWS Access Portalで確認

先ほどアクティベートしたユーザーのAWS Access Portal画面をリフレッシュします
下記のようにAWS Accountsが付与されているはずです

そのままクリックして、AdministratorAccessをクリックするとマネコンにログインできます

awscliでの設定

~/.aws/config

[default]
region = ap-northeast-1
output = json

の状態で下記を実行

$ aws configure sso

  • SSO session name (Recommended): なんでも適当な値
  • SSO start URL [None]: IAM Identity Centerのダッシュボード右に記載されているAWS アクセスポータルの URL
  • SSO region [None]: ap-northeast-1
  • SSO registration scopes [sso:account:access]: 未記入でそのまま

これらを入れるとブラウザが開いて、ログイン要求されるのでログインする

Allow botocore-client-default to access your data?

という画面出るので、Allow Accessを選択

ターミナル戻ってくると、profileが使えるようになる

$ cat ~/.aws/config

[profile <Profile名>]というブロックが追加されていると思う

あとは、以下のようにprofileを指定すればこの権限でアクセスできる

$ aws s3 ls --profile <Profile名>

もしくは環境変数で

$ export AWS_PROFILE=<Profile名>
$ aws s3 ls

恒常対応

もし単一アカウントしか使わない場合

macであれば.zshrcに入れておき

$ echo 'export AWS_PROFILE=<Profile名>' >> ~/.zshrc

(fishなら下記)

$ echo 'export AWS_PROFILE=<Profile名>' >> ~/.config/fish/config.fish

これで以降は環境変数とか指定せずに済む

安全確認、セッション時間切れた時の対応

一度IAM Identity Centerを開き、ユーザー -> 作成したユーザー -> アクティブなセッションタブ を開き、セッションをすべて削除します

これでも1時間くらい最長アクセスが残るらしい


セッションが切れると、awsコマンドで権限エラーが出るようになる

$ aws s3 ls

Error loading SSO Token: Token for default does not exist

そしたら、再度ssoログインすればOK(configure済みなので、ブラウザで認証通すだけで良い

$ aws sso login

Discussion