🍥

AWS Managed Service for Prometheus / Grafana で雑に SAML 認証を通す

2023/04/07に公開

モチベーション

  • 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 を使います。

https://www.npmjs.com/package/saml-idp

https://qiita.com/murasuke/items/f7cb7fd68cd1bf8ec74e

動かし方は他記事に譲ります。

以下、 IdP/SP 双方の設定を行います。

IdP 側の設定

SP (Grafana) 側の情報を取得します。

SAML の設定

IDP を設定する

  • サービスプロバイダー識別子 (エンティティ 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) に設定します。

SAML の設定

メタデータをインポートする

アサーション属性をマッピングする

「あなたが誰かはわかりました。で、あなたは何をしていい人です」という設定 (認可)

http://localhost:7000 を見てみると:

Saml Jackson

デフォルトで User Type が Admin である Saml Jackson さんとしてログインするようになっているので、彼で認可が通るように設定します:

SAML の設定

アサーション属性をマッピングする

※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"/>
...

ログイン

Grafana SSO

Sign in with SAML を押下するとローカル IdP にリダイレクトされます。
(もちろん saml-idp をローカルで動かしておく必要があります)

Sign In を押下

ログインできました。めでたし

Discussion