本記事は
わた推し～AWSアワードエンジニア編～
1日目の記事です。
💻 イベント告知 ▶▶ 本記事 ▶▶ 2日目 💻
こんにちは、上野です。
NRIネットコム、2022 Japan APN Ambassadors / Top Engineers / ALL Certificate Engineers による推しテクシリーズです。
私が紹介するのはAWS Single Sign-On (AWS SSO)です。最高のサービスです。
# AWS SSOの概要
AWS SSOを有効にすると、一元管理された（一つの）ユーザー名/パスワードでログインすることにより、複数のAWSアカウントへログインできるようになります。
↓はログイン画面です。
ログインすると・・権限があるAWSアカウントが一覧で表示され、各AWSアカウントへログインできます。
便利ですね。
# AWS SSOの仕組み
AWS SSOで重要となってくるのが
ユーザー、グループ、権限セットという要素です。 ユーザー、グループはわかりやすいと思います。AWS SSO上にユーザー、パスワードの情報を作成して管理します。ユーザーの情報はAzure Active Directory(Azure AD)等外部のIdP(Identify Provider)を利用することも可能です。
権限セットは、その名のとおり、ユーザーまたはグループに付与したいアクセス権限の集まりです。AWSアカウント内で使用するIAMロールに近いです。IAMのマネージドポリシーやカスタムポリシーを組み合わせて、権限セットを作成して管理します。権限セットには、最大10個のマネージドポリシーと、最大1個のカスタムポリシー（JSONで記載）を含むができます。
ユーザーと権限セットを作成しただけでは、どのユーザーもAWSアカウントへはログインできません。
ユーザーorグループ、権限セット、AWSアカウントの3点を紐づけることによって、初めて設定したAWSアカウントへログインできるようになります。
たとえば以下の設定では、
グループαに所属する2名が、権限セット1の権限で、アカウントSys01へ、
ユーザーCが、権限セット2の権限で、アカウントSys02へアクセスできます。
権限セットとアカウントを紐づけて設定した時点で、各アカウントにIAMロールが作成され、そのIAMロールをSSOのユーザーが引き受ける仕組みとなっています。
# AWS SSOの推しポイント
私の推しポイントをいくつか紹介します。
## 認証情報を一元管理できる
AWS Well-Architected フレームワークのセキュリティの柱、ベストプラクティスにもあるとおり、「一元化された ID プロバイダーを利用する」ほうが安全です。ユーザー/パスワードの情報を1箇所で管理できるので、MFAの設定、棚卸などユーザー削除の運用、パスワードポリシーも1箇所で済みます。
## 外部のIdPと連携できる
Azure ADやGoogle WorkSpace等、AWS外部のIDを業務で使用している場合、そういった外部IdPと統合できるので、より安全になり、パスワードやMFA操作が共通となり、ログインプロセスも楽になります。
## 一時アクセスキーを簡単に発行できる
ローカルPC環境でAWSのSDKを使用して開発したり、CloudFormationやCDKのIacツールを実行する場合、IAMユーザーの永続的なアクセスキーを使うこともありますが、AWS SSOでは一時的なアクセスキーを簡単に発行できるので、より安全にAWS開発ができます。
aws configure ssoを使用したプロファイルの設定も可能です。
AWS Single Sign-On を使用するための AWS CLI の設定 - AWS Command Line Interface
## AWS SSOの管理を別アカウントへ委任できる
2022年5月に出たアップデートによって、AWS SSOの管理をManagementアカウント以外でもできるようになりました。
アップデート前はManagementアカウントでのみAWS SSOの設定が可能でした。最近のベストプラクティスでは、1アカウント1用途とすることが多いです。Managementアカウントは請求情報やアカウント作成の管理を行うのですが、こういった管理とユーザー・各アカウントの権限管理は用途も異なり管理者が異なることもあります。
AWS SSOの管理を、独立したAWSアカウントでできるようになったのは嬉しいアップデートです。
# 大規模組織におけるAWS SSOの課題
便利なAWS SSOですが、AWSアカウント数が100を超えるような大規模な構成な場合、権限セットやアカウントとの紐づけ管理も複雑になり難しくなってきます。ユーザーに渡す権限は、基本的にAWSアカウントやワークロード単位で設定することが多いため、それらの管理をAWS SSOの画面上だけで管理するのはなかなか大変というのが私の感想です。大規模な利用を想定する場合は、IaC等のツールを使用した管理も検討したほうが良いでしょう。
Organizationsを分ければ、AWS SSOの管理も分けることができるのですが、コストの管理は、権限の管理よりも大きな範囲で行いたいパターンも多いです。従量制割引や、リザーブドインスタンス・SavingsPlansの購入、サポート料金はOrganizations単位で適用されるので、多くのアカウントをまとめたほうがお得になります。
以下の図は一例です。
大規模なOrganizationsでもうまく権限を管理できると良いのですが、ズバリコレ！みたいな方法は私も見つかっていない状況です。「管理者が申請ベースでSSOの権限セットを適切に管理する」、利用者に権限管理を任せたい場合は「AWS SSOを諦めて踏み台アカウント＋IAMロールへスイッチ」という案があるかと思います。組織によって利用方法も大きく異なるので使い方に合わせて管理方法も考える必要がありますね。
# まとめ
推しサービスとしてAWS SSOを紹介しました。最後に課題も書きましたが、基本的にはめちゃくちゃ便利なサービスなので、これからAWSを始める方も是非AWS SSOの利用を検討してもらえると嬉しいです。