IdP / SSO / SAML / 証明書 / AWS IAM の関係についてしっかりと把握できるよう詳しく解説します。試験にも結構出てきます。しかし一夜漬けの暗記だけでは、複雑に補完し合う認証周りの構成が把握できず何度も不明な状態になります。
目次
登場人物
登場人物を3つに分けると理解しやすいです。
- ユーザー … AWS にログインしたい人
- IdP … ユーザーを認証する場所
- AWS … IdP の認証結果を信じてログインを許可する場所
流れはこうです。
ユーザー<br> ↓<br>IdP にログインする<br> ↓<br>IdP が SAML 応答を作る<br> ↓<br>AWS に SAML 応答を渡す<br> ↓<br>AWS が署名を検証する<br> ↓<br>問題なければ AWS にログインできる
IdP とは何か?
IdP は Identity Provider の略です。ID プロバイダー と呼びます。簡単に言うと、ユーザーが本人であることを認証する側です。
たとえば以下が IdP になります。
- Microsoft Entra ID
- Okta
- OneLogin
- Google Workspace
- Ping Identity
- 社内認証基盤
ユーザーは AWS に直接ログインするのではなく、まず IdP にログインします。認証は以下のイメージになります。
ユーザー<br> ↓ ログイン<br>IdP(Okta / Entra ID など)<br> ↓ 認証結果を AWS に渡す<br>AWS<br> ↓<br>AWS マネジメントコンソールにログイン成功
AWS 側は、ユーザーのパスワードを直接知りません。しかし、AWS は IdP から渡された情報を見て、「この人は正しく認証された人だな」と判断します。
SAML とは何か
SAML は、SSO を実現するための認証連携の仕組みです。正式には、Security Assertion Markup Language と言います。難しく言うと、IdP と AWS の間で、認証情報を安全にやり取りするための標準規格です。簡単に言うと、IdP が「このユーザーは認証済みです」と AWS に伝えるためのルールです。
SAML 応答とは何か
SAML 認証では、IdP が AWS に対して、以下の情報を送ります。
- このユーザーは認証済みです
- このユーザーにはこの AWS ロールを使わせてよいです
この情報を SAML 応答 や SAML Assertion と呼びます。ただし、AWS はその情報をそのまま信じるわけではありません。なぜなら、誰かが偽の SAML 応答を作って「私は管理者です」と AWS に送ってきたら危険だからです。そこで使われるのが 署名 です。
署名とは何か
IdP は SAML 応答に デジタル署名 を付けます。イメージとしては、「この SAML 応答は確かに IdP が発行しました」「途中で改ざんされていません」という証明です。たとえるなら、会社の正式な書類に押す 社印 のようなものです。
IdP が SAML 応答を作る<br> ↓<br>IdP が秘密鍵で署名する<br> ↓<br>AWS が公開鍵で署名を検証する
ここで重要なのが、以下の鍵と証明書になります。
- 秘密鍵
- 公開鍵
- 証明書
秘密鍵と公開鍵の関係
SAML の署名検証では、ざっくり次の関係になります。
| 種類 | 持つ場所 | 用途 |
|---|---|---|
| 秘密鍵 | IdP 側だけが持つ | SAML 応答に署名する |
| 公開鍵 / 証明書 | AWS 側にも登録される | 署名を検証する |
重要なのは、AWS に秘密鍵をアップロードするわけではないという点です。AWS 側に必要なのは、IdP が付けた署名を検証するための 公開鍵情報 です。この公開鍵情報は、通常 SAML メタデータファイル の中に含まれています。
なので、AWS にアップロードするのは秘密鍵ではなく、最新の SAML メタデータになります。
SAML メタデータファイルとは何か
SAML メタデータファイルとは、IdP の設定情報が入った XML ファイルです。中には、たとえば以下のような情報が入っています。
- IdP の識別子
- SSO 用のエンドポイント URL
- ログイン先 URL
- 署名検証に使う証明書
- 公開鍵情報
つまり、AWS 側はこのメタデータファイルを見ることで、「この IdP から来た SAML 応答は、この証明書で検証すればよいのだな」と分かります。
IdP 側で証明書が変わった場合の運用
IdP 側で証明書が変わった場合、AWS 側の SAML プロバイダー設定も更新する必要があります。以下のような運用になります。
IdP 側で証明書更新<br> ↓<br>IdP から最新のメタデータを取得<br> ↓<br>AWS IAM の SAML プロバイダーを更新
コメント