BFT名古屋 TECH BLOG

日々の業務で得た知識を所属するエンジニアたちがアウトプットしていきます。

【AWS】AWS CLIのスイッチロールまとめ

コンニチハ、BFT名古屋支店のヤタテです。
今回は、AWS CLIのスイッチロールについてまとめてみたいと思います。
AWSのIAMユーザ複数をいちいちログイン、ログアウトして使うのは運用上手間がかかるし面倒な時があります。
そんな時の為にスイッチロールというものがあるのですが、今回はちょっとした運用上の要件の為に使用してみたいと思います。

AWSAWS CLIのスイッチロールについて

スイッチロールについて

スイッチロールは、以下参照。

参考URL
IAMのスイッチロールを理解したい
IAM ロールの PassRole と AssumeRole をもう二度と忘れないために絵を描いてみた

なぜスイッチロールを?

  • ログインするIAMユーザに、IPアドレス制限を付けたい
    • IPアドレス制限をつけると、一部サービスが利用できない場合がある
    • 利用できないサービスを利用するポリシーもあるが、正直面倒
  • ポリシーの付け替えができるので、サービスごとのアクセス制御が可能
    • ユーザ事にスイッチできるロールを絞ることで、管理しやすい (運用方法によるが…)

IPアドレス制限をすると利用できないサービス

IPアドレス制限をIAMユーザへ付けた場合、
AWSリソースが、他のAWSリソースへアクセスするような操作が、
IPアドレス制限に引っかかって、使用できない状態となる。

以下、筆者が過去経験した代表例を記載する。
※記憶誤りや仕様変更により、現在は可能となっている場合あり。

  • Lambdaの環境変数を復号できない //KMS-Lambda間のアクセスが弾かれるため
  • CloudFrontで新規にディストリビューションを作成できない //だいぶ前のため、うろ覚え
  • CloudFromationでEC2を操作できない //CFn-EC2間のアクセスが弾かれるため

参考URL マネージメントコンソールにIP制限をしつつ、一部利用できない機能も利用できるようにする

やってみた。

■やること

  • アクセスキー/シークレットキーの登録
  • credentialの確認
  • configの編集
  • ログイン確認
    ※今回は、Windowsで実施

1.アクセスキー/シークレットキーの登録

--コマンドプロンプト--
> aws configure
AWS Access Key ID [****************WXYZ]: <アクセスキー入力>
AWS Secret Access Key [****************DCBA]: <シークレットキー入力>
Default region name [ap-northeast-1]: <リージョン入力>
Default output format [json]: <出力形式入力>

※出力形式は、awsコマンド実行結果の出力を指定。
 json / table / text から選べる。

2.credentialの確認

~\.aws配下

  • credentials ←こちらを開く
  • config
---credentialsの中身---
[default]
aws_access_key_id = <アクセスキー>
aws_secret_access_key = <シークレットキー>

1.の手順で入力した通りに、
アクセスキーとシークレットキーが記載されていることを確認する。

3.configの編集

~\.aws配下

  • credentials
  • config ←こちらを開く
---configの中身---
[default]
region = ap-northeast-1
output = json

1.の手順で入力した通りに、
リージョンと出力形式が記載されていることを確認する。

↓ スイッチロール用に、新規のプロファイルを追加する
 ※[profile swrole]以下

---configの中身(追記後)---
[default]
region = ap-northeast-1
output = json

[profile swrole]
region = ap-northeast-1
role_arn = <スイッチするIAMロールのARN>
source_profile = default

4.ログイン確認

  • defaultプロファイルのIAMユーザでCLI実行 (スイッチ権限以外All Deny)
  • swroleプロファイルのIAMロールでCLI実行 (S3FullAccess)
>aws s3 ls
An error occurred (AccessDenied) when calling the ListBuckets operation: Access Denied

>aws s3 ls --profile swrol3
2021-03-15 13:21:46 s3yatate



// swrole指定でコマンド実施したときのみ、S3を閲覧できている。
// 以下、コマンド実行時のユーザ/ロール確認コマンド
// ※出力形式にテーブルを指定してみる

>aws sts get-caller-identity --output table
----------------------------------------------------------
|                    GetCallerIdentity                   |
+---------+----------------------------------------------+
|  Account|  111122223333                                |
|  Arn    |  arn:aws:iam::111122223333:user/yatate001    |
|  UserId |  Abcd1234efgh5678jklm9                       |
+---------+----------------------------------------------+
// ARNにて、IAMユーザが指定されている

>aws sts get-caller-identity --output table --profile swrole
----------------------------------------------------------------------------------------------
|                                      GetCallerIdentity                                     |
+---------+----------------------------------------------------------------------------------+
|  Account|  111122223333                                                                    |
|  Arn    |  arn:aws:sts::111122223333:assumed-role/SW-YatateRl/botocore-session-1234567891   |
|  UserId |  ABCD1234EFGH5678IJKL9:botocore-session-1234567891                               |
+---------+----------------------------------------------------------------------------------+
// ARNにて、assumeroleしていることが分かる

以上です。