インフラ初心者がつまづいたアカウント運用管理入門

## 前置き
私は24卒として今年春に入社し、7月からインフラエンジニアとしてキャリアをスタートいたしました。

今回は世界的に使用されているAWSの、特にアカウント管理について、案件に参加させていただく中で自分が学んだことを整理し、皆さんと共有するためにこの記事を書かせていただきます。
またアカウント管理の概要については紹介いたしますが、具体的な実装方法のような実践的内容はこの記事に含んでいないので、その点ご了承ください。

また、入門・発展と2段階に分けてアカウント運用管理の手法・サービスを投稿予定なので、次の記事もぜひ読んでいただけたら嬉しいです。

## 前提
### AWSアカウントとは何なのか？
アカウントはアカウントでしょ？となっている方こそ、ここを勘違いすると後々つまづいてしまうと思うので、念のため確認しておきましょう。
『AWSアカウント』は、「Xのアカウント」や「LINEのアカウント」のような一般的に呼ばれる「アカウント」とは異なる概念です。

一般的な「アカウント」は、個人の情報と1対1で結び付けられています。AWSアカウント作成時には、個人情報をいくつか登録することや、AWS『アカウント』という名前のため、初心者の方は一般的なアカウントと同じものだと勘違いしがちだと思っています。（まさに私ですが...）

では『AWSアカウント』とは何かというと、個人のアカウントというよりも、一つの部屋と結び付けられている環境に似たものです。
![アカウント管理入門- 1.drawio.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3836775/e9c67520-0d2b-2643-2ab2-cab776a12263.png)


AWSでは、個人用のアカウントに相当するものがIAMユーザーです。そのIAMユーザーが作業する環境、部屋となっているのが『AWSアカウント』となっているのです。


### アカウント運用管理の重要性
ここでアカウント運用管理の重要性について、先ほどの項「AWSアカウントとは何なのか？」を踏まえて確認します。

1つのAWSアカウントは1つの環境であると、先ほどお伝えしました。
それを踏まえ、システムごと、環境ごとにアカウントを運用管理することで、下記のメリットが考えられます。
- 運用上の優秀性
    - アカウント分離による環境の整頓
- セキュリティ
    - セキュリティ境界の明確化
    - セキュリティポリシーの適用
- コスト最適化
    - 各アカウントごとのコスト明確化
    - 予算管理とアラート

これらはAWS Well-Architectedフレームワークを元に、特にクリティカルだと思われるものを抜粋したものになります。より細かなユースケースを考えれば、さらにメリットは出てくるとは思いますが、まずは以上の三要素を押さえておけば良いでしょう。

ではこれから、アカウント運用管理入門として、アカウント運用管理の超基本的サービス、AWS IAMについて解説します。

## AWS Identity and Access Management（IAM）
アカウント管理を語るにおいて、切っても切り離せないのはこのサービスです。
先ほどの章で、AWSアカウントは「一つの環境・部屋」であると説明しました。その部屋の中には様々なリソースが存在し、それらを利用するためのユーザー・権限を管理するのがIAMです。

IAMが管理できる要素は以下の通りです。
- IAMユーザ
- IAMグループ
- IAMポリシー
- IAMロール


それぞれの要素の中身を見ていきます。

### IAM ユーザ
普段私たちのイメージするアカウントは、このユーザーに近いです。
通常私たちは、IAMユーザーとしてログインし、作業を行います。
<img width="30%" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3836775/c91071dd-5e48-6e83-36f3-517346da2591.png">

画像にもあるとおり、サインイン時の画面には<INS>IAM ユーザーとして</INS>サインインと書いてあるので、一般的なアカウント=IAM ユーザーというイメージはしやすいと思います。

### IAM グループ
IAMユーザをまとめてグループとして扱うために使用します。
後述のポリシー（ルール）をまとめて複数ユーザーにアタッチしたいなど、グループとしてIAMユーザを管理することができます。
![アカウント管理入門-2.drawio.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3836775/317e0850-b159-b7ba-9bc2-755d871a6ae2.png)


上記の図であれば、Admin、Billing、Developers、DevOps、ReadOnlyUsersの5つのグループがあります。

### IAM ポリシー
「EC2の操作権限を全て持たせる」「RDSへは読み取りのみ権限を与える」のような、特定のリソースに対する決められた権限の一つ一つのことをIAM ポリシーと呼びます。
権限管理の最小単位とも呼ばれています。

AWS管理ポリシーとして、アカウント作成時からすぐに使用できるIAM ポリシーが多くあります。また、カスタム管理ポリシーという、権限をきめ細かく設定することができるIAM ポリシーも存在します。

IAMポリシーは、IAM ユーザーやIAM グループなどのIAMエンティティ（権限を与える対象）へアタッチすることで、はじめて利用することができます。

### IAM ロール
あるAWSリソースから他のAWSリソースへの操作権限の認可を管理するための仕組みです。

「EC2の操作権限を全て持たせる」「RDSへは読み取りのみ権限を与える」といったIAM ポリシーを複数当てたい時に、まとめてポリシーを当てることができます。
![アカウント管理入門-3.drawio.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3836775/55b7acde-491a-7f4b-db30-dd095b428e65.png)


## スイッチロール
ここからはアカウント運用管理手法の1つ、スイッチロールを紹介いたします。

ここまでのIAMの説明では、単一のアカウント内でのユーザー管理方法に焦点を当てていました。

しかし現場を想定した場合、複数のアカウントが利用されている可能性が高いと思います。その時にアカウント管理（ユーザー管理）を楽にするために利用するのがスイッチロールとなります。

今回はとあるシステムにおいて、開発環境、検証環境、本番環境の3つの環境が存在する場合のスイッチロールについて解説いたします。

ある管理者Aさんがいます。
Aさんはそれぞれの環境の管理者として、下図のように毎回ログインとログアウトを繰り返して、環境へアクセスをしています。
![アカウント管理入門-4.drawio.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3836775/85959ceb-e644-8a9c-ebc6-f4454b0abe8e.png)


それを解決する手法の1つがスイッチロールです。

スイッチロールを利用すると、下図のようにアカウント間を移動することができます。
![アカウント管理入門-5.drawio.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3836775/0b665c37-a229-8889-6de6-e90810293945.png)


スイッチロールを導入することで、ログインとログアウトの回数が減るため、切り替えが簡単になり、作業効率が大幅に向上します。
他の環境へ移動したい場合は、「ロールの切り替え」を選択して、任意のロールに選択することで、移動することができるようになります。

## まとめ
以上がAWS、アカウント管理入門となります。
私としてはAWSアカウントとは何か？という基本も基本のところにつまづいていた部分がありますので、その確認をできたいい機会でした。

次回のAWSアカウント管理発展では、IAM OrganizationsとIAM Identity Centerを利用した、たくさんのアカウントを管理する場合のお話をする予定です。

そこに興味がある方は、ぜひまた次回の記事も読んでいただけると嬉しいです。

## 今回登場したAWS用語
- AWSアカウント
- AWS IAM
    - IAMユーザ
    - IAMグループ
    - IAMロール
    - IAMポリシー
- スイッチロール

## 参考書籍
- [AWS運用入門 押さえておきたいAWSの基本と運用ノウハウ](https://amzn.asia/d/cxpzmjl)