Amazon Managed Grafanaでワークスペースの管理者の割り当てをオプトアウトにする

2022.10.12

こんにちは。CX事業本部Delivery部のakkyです。

Amazon Managed GrafanaでSAML認証を行うとき、「管理者ロールの値」を入力せず、「ワークスペースへの管理者の割り当てをオプトアウトしたいと考えています。」(I want to opt-out of assigning admins to my workspace.)にチェックを入れると、SAML IdPから来る値で管理者を設定せず、Amazon managed Grafana側で管理者を設定することができます。

ただし、管理者を設定する作業はWebコンソールからは行えず、AWS CLIとGrafana HTTP APIを使用する必要があります。 今回は、この手順をご紹介します。

API Keyの取得

まず、Grafana HTTP APIを使用するためにAPI Keyを取得します。この作業にはAWS CLIが必要です。

  • key-nameはAWS CLIでAPI Keyを区別するためだけに使用する名前です。
  • key-rokeは、他のユーザーの権限を設定するため、ADMINにします。
  • seconds-to-liveはAPI Keyの有効期限ですので、なるべく短くします。
  • workspace-idはワークスペースIDです。GrafanaのURLがhttps://g-XXXXXXX.grafana-workspace.ap-northeast-1.amazonaws.com/の場合、g-XXXXXXXの部分を指定してください。
aws grafana create-workspace-api-key --key-name "adminkey" --key-role "ADMIN" --seconds-to-live 3600 --workspace-id "g-XXXXXXX"

以下のような応答が返ります。このうち、keyがAPI Keyです。

{
    "key": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
    "keyName": "adminkey",
    "workspaceId": "g-XXXXXXX"
}

ユーザーロールの設定

では実際にGrafana HTTP APIでユーザーロールを設定します。 まずはユーザーIDを取得するため、ユーザーの一覧を表示します。Authorizationヘッダに先ほど取得したAPI Keyを設定して呼び出します。 応答はjsonなので、jqで成形しています。

curl -X GET -H "Content-Type: application/json" -H "Authorization: Bearer XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" https://g-XXXXXXX.grafana-workspace.ap-northeast-1.amazonaws.com/api/org/users/ | jq

以下のような応答が返ります。このうち、設定に使うのはuserIdの番号となりますので、設定を変えたいユーザーの情報を探しておきます。今回はa-sanを管理者にしたいので、2ということになります。

[
  {
    "orgId": 1,
    "userId": 2,
    "email": "a@example.jp",
    "name": "a-san",
    "avatarUrl": "/public/img/user_profile.png",
    "login": "a@example.jp",
    "role": "Editor",
    "lastSeenAt": "2022-10-11T08:44:04Z",
    "lastSeenAtAge": "2 minutes"
  },
  {
    "orgId": 1,
    "userId": 4,
    "email": "b@example.jp",
    "name": "b-san",
    "avatarUrl": "/public/img/user_profile.png",
    "login": "b@example.jp",
    "role": "Viewer",
    "lastSeenAt": "2022-10-11T07:45:14Z",
    "lastSeenAtAge": "1 hour"
  }
]

次に実際にロールを変更するコマンドを送信します。API Keyを同様に指定し、ユーザーIDをURLの最後(/api/org/users/ユーザーID)に指定し、ロールはペイロードにjsonで指定します。Admin, Editor, Viewerが設定できます。このとき、値はケースセンシティブなので注意してください。(先頭を大文字にしないエラーになってしまいます。)

curl -X PATCH -H "Content-Type: application/json" -H "Authorization: Bearer XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" -d '{"role":"Editor"}' https://g-XXXXXXX.grafana-workspace.ap-northeast-1.amazonaws.com/api/org/users/2 | jq

次のような応答が得られれば成功です。

{
  "message": "Organization user updated"
}