🍥
AWS Managed Service for Prometheus / Grafana で雑に SAML 認証を通す
モチベーション
- AWS Managed Service for Prometheus の動作確認をしたい
- ので AWS Managed Service for Grafana を動かしたい
- AWS Managed Service for Grafana の認証認可には以下の方式がある
- AWS IAM Identity Center (旧 SSO)
- 任意の SAML IdP
- でも権限がないので AWS IAM Identity Center を構成できない
ローカルで SAML IdP を立てて雑に認証を通す
npm の saml-idp を使います。
動かし方は他記事に譲ります。
以下、 IdP/SP 双方の設定を行います。
IdP 側の設定
SP (Grafana) 側の情報を取得します。
- サービスプロバイダー識別子 (エンティティ ID)
- サービスプロバイダーの応答 URL (Assertion Consumer Service URL)
これらを saml-idp の起動時パラメータに渡します。
package.json
{
...
"scripts": {
"saml-idp": "saml-idp --acs https://************.grafana-workspace.ap-northeast-1.amazonaws.com/saml/acs --aud https://************.grafana-workspace.ap-northeast-1.amazonaws.com/saml/metadata",
...
}
SP 側の設定
メタデータをインポートする
「この IdP の Identity でログインしていいですよ」という設定 (認証)
http://localhost:7000/metadata にアクセスして IdP からメタデータを取得し、SP (Grafana) に設定します。
アサーション属性をマッピングする
「あなたが誰かはわかりました。で、あなたは何をしていい人です」という設定 (認可)
http://localhost:7000 を見てみると:
デフォルトで User Type が Admin
である Saml Jackson さんとしてログインするようになっているので、彼で認可が通るように設定します:
※SAML アサーション上の属性名 (userType
とか) については「メタデータをインポートする」でコピペしたメタデータに書いてあります:
...
<Attribute xmlns="urn:oasis:names:tc:SAML:2.0:assertion" Name="firstName" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri" FriendlyName="First Name"/>
<Attribute xmlns="urn:oasis:names:tc:SAML:2.0:assertion" Name="lastName" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri" FriendlyName="Last Name"/>
<Attribute xmlns="urn:oasis:names:tc:SAML:2.0:assertion" Name="displayName" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri" FriendlyName="Display Name"/>
<Attribute xmlns="urn:oasis:names:tc:SAML:2.0:assertion" Name="email" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri" FriendlyName="E-Mail Address"/>
<Attribute xmlns="urn:oasis:names:tc:SAML:2.0:assertion" Name="mobilePhone" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri" FriendlyName="Mobile Phone"/>
<Attribute xmlns="urn:oasis:names:tc:SAML:2.0:assertion" Name="groups" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri" FriendlyName="Groups"/>
<Attribute xmlns="urn:oasis:names:tc:SAML:2.0:assertion" Name="userType" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri" FriendlyName="User Type"/>
...
ログイン
Sign in with SAML を押下するとローカル IdP にリダイレクトされます。
(もちろん saml-idp をローカルで動かしておく必要があります)
Sign In を押下
ログインできました。めでたし
Discussion