SAML Group Mappingを使ったEntra ID+Datadogのロール自動割り当て

プラットフォームチームの菅原です。

カンムではサービスのモニタリングにDatadogを利用しており、その管理はプラットフォームチームが担っています。

DatadogへのログインはMicrosoft Entra ID(旧AzureAD)を使ったシングルサインオンで行うため、DatadogのアカウントはEntra IDで一元管理されているのですが、Datadogのロールの割り当ては自動化されておらず、引き続き依頼を受けてプラットフォームチームが割り当てを行う状態でした。

カンムで使っているDatadogのロールはEntra IDのグループから一意に割り当てられるため、機械的マッピングすることができます。 調べたところ、サインオン時に任意のSAML属性からロールを割り当てるSAML Group Mappingという機能が提供されていたので設定してみました。

docs.datadoghq.com

Entra IDの設定

SAML Group Mappingを利用するにはユーザーが所属するグループに応じてSAML属性(クレーム)の値を動的に変更する必要があります。

最初、user.assignedrolesというソース属性を使ってエンタープライズアプリケーションのグループに割り当てられたロールでクレームの値を変更することを想定していたのですが、user.assignedrolesからはユーザーに割り当てられたロールを取得することができても、グループに割り当てられたロールを取得することができなかったため、「グループごとにクレームの値を変える」という要件を満たすことができず、また、設定も煩雑になってしまうためこちらを使うことができませんでした。

代わりに「条件に基づいてクレームを出力する」機能で要求条件(Claim conditions)で、グループごとの値を設定することでクレームの値を動的に変更することができました。以下はその設定画面です。

要求条件では、最終的に条件にマッチした値がクレームの値になります。

上記の例の場合、プラットフォームグループにマッチした場合、DatadogRoleクレームの値は adminに、開発者グループにマッチした場合はstandardに、どちらにもマッチしなかった場合はreadonlyになります。

(残念ながらterraformのazureadプロバイダでterraformingすることはできなかったため、手動で設定を行いました)

Datadogの設定

Datadog側の設定はterraformで行いました。 DatadogRoleクレームの値に応じて、ロールが設定されるようになっています。

data "datadog_role" "admin" {
  filter = "Datadog Admin Role"
}

data "datadog_role" "standard" {
  filter = "Datadog Standard Role"
}

data "datadog_role" "readonly" {
  filter = "Datadog Read Only Role"
}

# NOTE: Enable Mappings manually
# cf. https://my-org.datadoghq.com/organization-settings/mappings/role-mappings
resource "datadog_authn_mapping" "admin" {
  key   = "DatadogRole"
  value = "admin"
  role  = data.datadog_role.admin.id
}

resource "datadog_authn_mapping" "standard" {
  key   = "DatadogRole"
  value = "standard"
  role  = data.datadog_role.standard.id
}

resource "datadog_authn_mapping" "readonly" {
  key   = "DatadogRole"
  value = "readonly"
  role  = data.datadog_role.readonly.id
}

# NOTE: Entra ID SAML Mapping config
# https://portal.azure.com/#view/Microsoft_AAD_IAM/SamlClaimsEditClaimBladeV2/federatedSsoConfigurationIdentifier/...

まとめ

SAML Group Mappingを使うことでDatadogのアカウントの管理を完全にEntra IDで一元化することができました。

この手の基盤チームありがちな「○○の権限をください」というタスクは一つ一つはたいしたことはないのですが、積み重なると地味に作業の時間を奪われるので、なるべく自動化を進めていきたいところです。