はじめに
Amazon Managed GrafanaでAD FSをIdPとしてSAML認証する際、GrafanaのTeamsとADグループを関連づける方法について、
あまり関連したドキュメントもないため、手順化して残そうと思い寄稿しました。
アーキテクチャ
以下のリンクの通り、弊社鈴木さんが提案したDirectory Service(AWS Managed Microsoft AD)をセットアップし、
AD FSサーバを構築しIdPとして、Amazon Managed GrafanaをSPとするSAML認証基盤を構築します。
Amazon Managed Grafanaへのログイン手段を考える 〜IAM Identity Center以外のSAML認証の選択肢〜
どのようにADグループをGrafana Teamsに関連づけるのか
サービスプロバイダー(SP)側が、アイデンティティプロバイダー(IdP)側から送信されるSAMLアサーション内の属性の中に、GrafanaのTeamsに関する属性を受け取れるようにすればADグループとGrafanaのTeamsを紐付けることができます。
各プロバイダー側で実施される内容は以下のとおりです。
- IdP側 … ADユーザーに関する属性情報(名前、メールアドレス、ADグループなど)をSAMLアサーションに含めてSPに送信。
- SP側 … IdP側で送信されたSAMLアサーションの属性情報の中で、どの属性がグループに関する情報なのかを「アサーション属性グループ」で定義。Grafana Teamsで、External group syncを設定してADグループ名と関連づける。
設定
上記を基に、以下のようにADグループとGrafana Teamsを関連付けます。
ADグループ名 | Grafana Teams名 | 用途 |
---|---|---|
Grafana-Editor | hoge-editor | Grafanaダッシュボードに対するEditor権限を付与する |
Grafana-ReadOnly | hoge-ro | Grafanaダッシュボードに対するRead権限を付与する |
幾つか設定する内容があるので以下のような手順で設定。
1. Windows Server ADグループの作成
Active Directory Users and Computers を開き、GrafanaへのEditorとReadOnly用のADグループを作成し、各ユーザーに所属させます。
2. Windows Server 要求規則の追加
ADグループのグループ名情報を、SAMLアサーションに含めるためのカスタム規則を追加します。
今回グループ用に追加するルールは ①「Get AD Group」と②「Group Name」の2つになります。
「Get AD Group」は以下のように定義します。内容としては、http://temp/variableにADグループ名を定義します。
c:[Type == "http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname", Issuer == "AD AUTHORITY"] => add(store = "Active Directory", types = ("http://temp/variable"), query = ";tokenGroups;{0}", param = c.Value);
「Group Name」は以下のように定義します。内容としては、http://temp/variableから、正規表現により先頭「Grafana-」から始まるADグループを「groupnm」属性としてSAMLアサーションに含めます。
これのメリットとしては、正規表現にマッチしないADグループはSAMLアサーションとしてSP側に送信しないため、Grafana以外のSPもADグループで問題なく定義することができます。
c:[Type == "http://temp/variable", Value =~ "(?i)^Grafana-"] => issue(Type = "groupnm", Value = c.Value);
これでWindows Server側の設定は完了です。
3. Amazon Managed Grafana側でグループに対しての属性を定義
Grafanaコンソールにアクセスして、 アサーション属性グループ に対して属性groupnm
を追加することで、IdP側からのSAMLアサーションから、該当する属性をグループとしてマッピングされます。
Grafanaコンソール
Grafana管理ユーザーでログインし、Administration > Teams と遷移し、External group sync タブで同期させる外部グループ名を記載します。先ほど設定したアサーショングループ属性groupnm
で出力されるADグループ名を選択します。
External group syncに関する詳細な手順はこちらを参照するようにお願いします。
ReadOnlyのグループに対しても同じように設定します。
設定内容は以上になります。
動作確認
各ブラウザの開発者ツール上でSAMLレスポンスの中身を確認することができるので、SAMLレスポンスを確認します。
https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/troubleshoot_saml_view-saml-response.html
acsファイルの中にSAMLResponseのデータが確認できるので、SAMLデコードしてXMLファイルの中身を確認して属性groupnm
とADグループ名が連携されていることが確認できれば成功です。
: <Attribute Name="groupnm"> <AttributeValue>Grafana-ReadOnly</AttributeValue> </Attribute> :
Grafanaコンソール上でもADグループで「Grafana-ReadOnly」に所属するユーザーが、Grafana Teamsの「hoge-ro」に所属していることが確認できれば成功です。