どーも!shihopowerです!
AWSのSAP(Solutions Architect Professional)対策をしていると、IAM DB認証・Secrets Manager・Parameter Store・Cognito・IAM Identity Center…と認証系のサービスが次々と登場します。
「結局どれをどの場面で使えばいいの??」状態になったので、公式ドキュメントをもとに体系的に整理してみました。
忙しい人向け要約
AWS認証系サービスは「誰を認証するか」で3つに分類できます。
| カテゴリ | サービス | 一言まとめ |
|---|---|---|
| AWSリソースの制御 | IAM | 全ての基盤。ロールとポリシーで権限管理 |
| AWSリソースの制御 | IAM Identity Center | 社員向けSSO。Active Directory連携も可 |
| アプリユーザーの認証 | Cognito ユーザープール | アプリの会員登録・ログイン機能 |
| アプリユーザーの認証 | Cognito IDプール | アプリユーザーへの一時的AWS認証情報の付与 |
| シークレット管理 | Secrets Manager | DBパスワード等の自動ローテーション管理 |
| シークレット管理 | Parameter Store | 設定値・シークレットの低コスト管理 |
1. 全体像:「誰を」認証するかで3分類
AWS の認証系サービスが多い理由は、認証の対象がそもそも異なるからです。
① AWS リソースにアクセスする「AWSユーザー・サービス」を管理したい
→ IAM / IAM Identity Center
② アプリを使う「一般ユーザー(エンドユーザー)」を管理したい
→ Amazon Cognito
③ アプリが使う「パスワードやAPIキー(シークレット)」を管理したい
→ Secrets Manager / Parameter Store
この3分類を頭に入れておくと、サービス選択で迷わなくなります。
2. ① AWSリソースのアクセス制御
AWS IAM(Identity and Access Management)
IAMは、AWSリソースへのアクセスを安全に制御するためのサービスです。「認証(サインイン)」と「認可(リソースへのアクセス許可)」の両方を制御します。
主な機能
- ユーザー・グループ・ロールの作成と管理
- ポリシー(JSON)で細かな権限を設定
- IAM DB認証でデータベースへのパスワードレスアクセスが可能
- 追加コストなし
使う場面
- Lambda関数にS3やRDSへのアクセス権を与えたいとき
- EC2インスタンスが他のAWSサービスを呼び出すとき
- すべての認証系サービスの土台として常に関わってくる
IAMはすべてのAWSサービスの権限管理の基盤です。他の認証系サービスを使う場合も、必ずIAMと組み合わせて利用します。
AWS IAM Identity Center(旧:AWS Single Sign-On)
IAM Identity Centerは、従業員(ワークフォース)向けのSSOサービスです。複数のAWSアカウントやアプリケーションへのアクセスを一元管理できます。
主な機能
- 1回のログインで複数のAWSアカウントにアクセス(SSO)
- Active DirectoryやOktaなどの既存IDプロバイダーと連携
- 一時的な認証情報を自動発行
- AWS Organizationsと連携して組織全体を管理
使う場面
- 社員が複数のAWSアカウント(開発・本番など)を使い分けるとき
- 既存のActive Directoryを活用してAWSアクセスを管理したいとき
- 大規模な組織でAWSアカウントを一元管理したいとき
3. ② アプリのエンドユーザー認証
Amazon Cognito — ユーザープール(User Pools)
ユーザープールは、Webアプリやモバイルアプリのユーザーにサインアップとサインインの機能を提供するユーザーディレクトリです。
主な機能
- メール・パスワードによるユーザー登録とログイン
- Google・Facebook・Appleなどのソーシャルログイン連携
- MFA(多要素認証)対応
- 数百万ユーザーまでスケール可能
使う場面
- スマホアプリに「会員登録・ログイン画面」を実装したいとき
- ユーザー管理の仕組みをゼロから作りたくないとき
- ソーシャルログインと自社ユーザー管理を統合したいとき
Amazon Cognito — IDプール(Identity Pools)
IDプールは、認証済みユーザーや未認証(ゲスト)ユーザーに対して、一時的なAWS認証情報を発行するサービスです。
主な機能
- 認証済みユーザーへの一時的なAWSクレデンシャル発行
- 未認証(ゲスト)ユーザーへの限定的なアクセス許可
- ユーザープールと組み合わせた利用が一般的
使う場面
- モバイルアプリのユーザーがS3に直接ファイルをアップロードするとき
- ゲストユーザーにも一部のAWSリソースにアクセスさせたいとき
ユーザープールとIDプールの違いをひと言でいうと…
- ユーザープール → 「誰?」を確認する(認証)
- IDプール → 「何ができる?」のAWS権限を渡す(認可)
4. ③ シークレット・設定値の管理
AWS Secrets Manager
Secrets Managerは、データベース認証情報・APIキー・OAuthトークンなどのシークレットをライフサイクル全体を通じて管理するサービスです。
主な機能
- シークレットの安全な保存(KMSで暗号化)
- 自動ローテーション(RDS・Redshift・DocumentDB対応)
- IAMポリシーによるアクセス制御
- クロスアカウントでの共有
使う場面
- RDSのパスワードを定期的に自動更新したいとき
- APIキーをコードにハードコードせず安全に管理したいとき
- コンプライアンス要件でシークレットのローテーションが義務付けられているとき
Secrets Managerは有料サービスです(シークレットごとの月額料金+APIコール料金)。コストが気になる場合はParameter Storeも検討しましょう。
AWS Systems Manager Parameter Store
Parameter Storeは、設定値とシークレットの両方を階層的に管理できるキーバリューストアです。
主な機能
- 文字列・暗号化文字列(SecureString)・文字列リストの保存
- KMSによる暗号化(SecureString)
- バージョン管理とアクセス履歴
- Lambda・EC2・ECSなどとのシームレスな統合
使う場面
- 環境変数(APIエンドポイント、フラグ等)をコードから切り離したいとき
- シークレットの自動ローテーションが不要で、コストを抑えたいとき
- 設定値とシークレットを1つのサービスでまとめて管理したいとき
Secrets ManagerとParameter Storeの使い分け
| Secrets Manager | Parameter Store | |
|---|---|---|
| 自動ローテーション | ✅ あり | ❌ なし |
| クロスアカウント共有 | ✅ あり | ❌ なし |
| コスト | 有料 | 無料〜(高スループットは有料) |
| 用途 | シークレット専用 | 設定値+シークレット |
5. サービス選択ガイド
「どのサービスを使えばいい?」と迷ったときのフローです。
認証したいのは誰?
│
├─ AWSサービス同士・社内エンジニア
│ ├─ 個人やサービスの権限管理 → IAM
│ └─ 社員が複数アカウントにSSO → IAM Identity Center
│
├─ アプリの一般ユーザー
│ ├─ ログイン・会員管理 → Cognito ユーザープール
│ └─ AWSリソースへのアクセス権付与 → Cognito IDプール
│
└─ アプリが使うパスワード・キー
├─ 自動ローテーションが必要 → Secrets Manager
└─ 設定値も含めて管理したい・コストを抑えたい → Parameter Store
6. 実践例で理解する選択の考え方
実際にどのサービスを選ぶか、具体的なシナリオで考えてみます。
シナリオ
以下のような構成のシステムがあります。
- Lambda関数の上でアプリが動作し、同一VPC内のAurora DBからデータを取得する
- LambdaはデータをS3バケット(SSE-KMS)に書き込む
- 要件① DBの認証情報が漏洩した場合の影響を最小化したい
- 要件② データはインターネットを経由せずに転送したい
選択肢の検討
要件①への対応
| 案 | 方法 | 問題点 |
|---|---|---|
| A | IAM DB認証を使う | パスワード自体が存在しない → 漏洩リスクがゼロ ✅ |
| B | Secrets Managerで管理 | パスワードは存在するため漏洩リスクは残る |
| C | Parameter Storeで管理 | 同上 |
IAM DB認証では、パスワードの代わりに有効期間15分の認証トークンを使います。トークンはIAMが生成し、DBへの認証情報をアプリが持つ必要がありません。IAMロールが侵害された場合もロールを無効化するだけで被害を封じられます。
要件②への対応
| 案 | 方法 | 問題点 |
|---|---|---|
| A | S3ゲートウェイVPCエンドポイントを使う | VPC内部のネットワークのみでS3と通信できる ✅ |
| B | HTTPS強制 | 通信は暗号化されるが、インターネットは経由する |
正解の組み合わせ
IAM DB認証 + S3ゲートウェイVPCエンドポイント
- 要件①:IAM DB認証でパスワード自体をなくす
- 要件②:VPCエンドポイントでインターネットを経由しない
この問題のポイントは「静的なパスワードをそもそも持たない設計」にできるかどうかです。Secrets ManagerやParameter Storeは「パスワードを安全に管理する」サービスですが、IAM DB認証は「パスワード自体を不要にする」という発想の転換が求められます。
まとめ
AWS認証系サービスを「誰を認証するか」で整理するとスッキリします。
- IAM:全ての基盤。AWSサービス同士の権限管理
- IAM Identity Center:社員向けSSO
- Cognito ユーザープール:アプリユーザーのログイン管理
- Cognito IDプール:アプリユーザーへのAWS権限付与
- Secrets Manager:シークレットの自動ローテーション管理
- Parameter Store:設定値+シークレットの低コスト管理
そして、最もセキュアな選択肢は「シークレットをそもそも持たない設計(IAM DB認証など)」です。SAPの試験でも実務でも、この視点を持っておくと判断が速くなります!
最後まで読んでいただきありがとうございました!
参考:公式ドキュメント