アクセスキーを使ったaws-cliはもうやめよう！

## はじめに

### アクセスキー発行するのって非推奨なの？
 
普段、CLI操作はCloudShellや、Cloud9上で行うようにしているのですが（環境構築
したくない。）、デスクトップ上で操作したい時があります。

そこで、一番簡単な方法であるアクセスキーを発行しようとすると、こんな代替案を提案されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3894042/8fccda1e-c57a-3a7f-5e3b-bd7346b266d8.png)

この警告にモヤモヤしていたので、今回は「IAM Identity Center」を使ってみた。っていう記事です。

### 実は、アクセスキーは丸見えだったり。

最近、職場の本番リリース中に気づいたのですが、AWS CLIに保存したアクセスキーや、シークレットアクセスキーは丸見えだったりします。
(↓は既に削除しているキーたちです。)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3894042/e0b244a5-65aa-47e3-e89d-af30d286ebce.png)

### アクセスキーの何がいけないのか？

おおむね以下の理由から、非推奨の模様。

1. 永続的な認証情報だから。
    1. キーが流出すると、攻撃者がリソースにアクセスし放題。
1. キーの管理が面倒。
    1. 複数IDを発行して使い分け等をし始めると、キーを管理する必要が出てくる。
1. キーをチームで共有したりすると、問題発生時に誰が実施したか追えなくなる。
1. アプリケーションに組み込んだりすると、流出等のセキュリティ上の脆弱性になる。
    1. で、誰でも見れるGit等で公開してしまう。
1. 無効化/削除時にシステムに影響でちゃう。

こういった面倒ごとを無くすためにも、必要最低限の権限を、都度、一時的な形で付与するとったことが大切なんだろうな、理解しています。

## IAM Identity Centerを早速設定してみよう！

### IAM Identity Centerって？

https://docs.aws.amazon.com/ja_jp/singlesignon/latest/userguide/what-is.html

私も全体を知らないので、AIに概要を箇条書きさせてみました！

    ・以前はAWS Single Sign-On（SSO）として知られていた
    ・複数のAWSアカウントとアプリケーションへのアクセスを一元管理

    主な特徴：
    
    ・シングルサインオン（SSO）機能を提供
    ・ユーザーとグループの中央管理
    ・多要素認証（MFA）のサポート
    ・きめ細かなアクセス制御
    ・クラウドアプリケーションとの統合
    
    メリット：
    
    ・セキュリティの向上
    ・管理の簡素化
    ・ユーザー体験の改善
    ・コンプライアンス要件への対応を支援

・・・なるほど、雰囲気だけはわかった！

### Organizetionsの設定や、ルートアカウントの設定は必要なのか？

IAM Identity Centerを設定している記事を見させていただくと、
Organizetionsの設定やルートアカウントで実施する必要があるといった記事を見かけましたので、少し試してみました。

https://docs.aws.amazon.com/singlesignon/latest/userguide/prereq-orgs.html

実際に、IAM Identity Centerをルートアカウント、IAMアカウントで試してみましたが、以下のような結果でした。

### ルートアカウント

だめ？

![スクリーンショット 2024-09-26 4.49.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3894042/69b0cf3f-b5d5-a46e-ce1c-c612cab251a2.png)

### IAMユーザ

こっちは、こんな選択肢が出た。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3894042/dfc680e4-6c3c-8c83-74a0-37dc87408141.png)

今回はIAMユーザをOrganizetionsを有効にして対応しています。

## IAM Identity Centerを早速設定。

したことの概要は、以下。

1. MFA認証の有効化
1. グループ、ユーザの作成
1. 権限セットの作成
1. IAMアカウントとIAM Identity Centerのユーザまたはグループの紐付け

### MFA認証の有効化

左メニュー「設定」から遷移する画面の、「認証」のところから、MFAの設定ができます。
これは必要に応じて、、ですね。

![スクリーンショット 2024-09-26 5.00.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3894042/be4e14eb-b56f-328d-b463-fa80b0e85c2f.png)


### グループ、ユーザの作成

IAM側のグループ・ユーザと違って、この時点では権限等はなし。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3894042/bbf8efec-9443-4fb8-6376-19e0f326f115.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3894042/4aa5634a-1db3-8c38-fbcf-77583c79d4d3.png)


### 権限セットの作成

許可セットもロールと似ていて、事前定義されたマネージドのものを利用するか、自身で細かく作ることも可能。

今回はマネージドな、AdministerAccessを使います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3894042/16dd5cc3-39b9-ab3a-5e15-01ee5a6f816b.png)

### IAMアカウントとIAM Identity Centerのユーザまたはグループの紐付け

ここが大切なところだと思うのですが、
既存のOrganizetion上のIAMアカウントに対し、どのグループ、またはどのユーザをどの権限セットで付与するかというところを設定する模様。

![スクリーンショット 2024-09-28 4.28.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3894042/57553257-d9c4-e6ed-8ddc-34b3a73065a0.png)

このサイトのご説明がとても分かりやすいのですが、動き的にはスイッチロールをするための設定をしているみたい。

https://tech.nri-net.com/entry/2021/03/26/104118

実際に対象のIAMアカウントにログインし、ロールを見てみると、`AWSReservedSSO_AdministratorAccess_316b483c70a4dc98`みたいなロールができてました。

![スクリーンショット 2024-09-28 4.39.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3894042/a7a5fb91-208f-d0f6-6a81-1da60f7c2a71.png)

### ユーザ側の設定。

あとは、ユーザのメアドに招待メールが届くので、案内の通りに必要な設定をすれば、AWS access portalが表示され、紐付けした通りのアカウント、権限でマネコンにログインできます！

![スクリーンショット 2024-09-26 5.10.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3894042/88fa726c-bb2c-f6e5-cd9b-a1da8f9c1e84.png)
![スクリーンショット 2024-09-26 5.12.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3894042/05070cb9-c914-1f7d-38e3-c97109abdf76.png)
スクリーンショット 2024-09-26 5.12.14
![スクリーンショット 2024-09-26 5.18.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3894042/f5a4c548-3c81-2b28-ef81-351a678bc053.png)

## 最後にCLI側の設定

CLIの設定は、このサイトの通り。
`aws configure sso`で、初期設定するだけ。

https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/cli-configure-sso.html

```console
$ aws configure sso
SSO session name (Recommended): [任意な名前]<ENTER>
SSO start URL [None]: [招待メールやAWS access portalで確認できるstart URL]<ENTER>
SSO region [None]: ap-northeast-1<ENTER>
SSO registration scopes [None]: sso:account:access(固定)<ENTER>
```
ここまで入れたタイミングで、ブラウザにリダイレクトしログイン操作を行うことで、認証キーが自動入力されます。

```console
CLI default client Region [None]: ap-northeast-1<ENTER>
CLI default output format [None]: json<ENTER>
CLI profile name [123456789011_ReadOnly]: [任意の名前]<ENTER>
```
profile名は長いと都度`--profile`で入力するのが面倒なんで、シンプルな名前がいいかも。
あるいは、環境変数でデフォルト指定しておくのも良いかも。
（業務では誤操作の可能性が出てくるのでやめておいたほうがいいかも。）

```console
$export AWS_PROFILE=your-sso-profile-name
```

### ログアウト

以下コマンド

```console
$aws sso logout
```

### 初回以降のログイン

```console
$aws sso login --profile xxx
```
### まとめ

これで都度の認証情報でCLIを扱うことができるようになりました！

CloudShellを基本的には使いつつ、IAM Identity Centerを使ったCLIを使えば安全なのかなと思います！

初の技術系記事で、出来が悪いと思いますが、最後まで読んでいただきありがとうございました！！