旧バージョンのドキュメントを参照しています。 最新のドキュメントはこちらをご参照ください。
Kong ManagerのOIDCを有効にする
Kong Gateway は、OpenID Connect プラグインを使用して、Kong Manager 管理者の認証を組織の OpenID Connect Identity プロバイダにバインドする機能を提供します。
注 :以下の設定を使用することで、OpenID Connect認証は Kong Managerで有効になります。Admin APIまたはKong Manager経由でOpenID Connectプラグインを手動で有効にする必要はありません。
OIDC を使用して RBAC を設定
以下は、Google を IdP として使用し、
デフォルトの URL http://127.0.0.1:8002
から Kong Manager を扱う例です。
重要 :以前のバージョンの構成を使用している場合は、移行ガイドを使って構成を確認および更新してください。
admin_gui_auth_config
値は有効なJSONである必要があります。以下は構成の例です。
enforce_rbac = on
admin_gui_auth=openid-connect # specify the plugin
admin_gui_auth_conf={ \
"issuer": "https://dev-xxxx.okta.com/oauth2/default", \
"client_id": ["<enter_your_client_id id="sl-md0000000">"], \
"client_secret": ["<enter_your_client_secret_here id="sl-md0000000">"], \
"redirect_uri": ["http://localhost:8001/auth"], \
"scopes": ["openid","email","offline_access"], # "email" is for the admin_claim, may vary in different IdPs \
"login_redirect_uri": ["http://localhost:8002"], \
"logout_redirect_uri": ["http://localhost:8002"], \
"admin_claim": "email", \
"authenticated_groups_claim": ["groups"], \
}
OpenID Connect を使用してKong Managerを認証する際は、IdPがauthorization_code
グラントタイプをサポートしており、関連付けられているクライアントに対して有効になっていることを確認してください。
OpenID ConnectでKong Managerを認証する際、 admin_gui_auth_conf
が
OIDC プラグイン構成に使用されます。共通パラメータの他に、Kong Manager で OIDC を使用する場合、重要かつ特定のパラメータがいくつかあります。
パラメータ | データタイプ | デフォルト値 | ノート |
---|---|---|---|
issuer 必須 |
文字列 | – | IdP(IDプロバイダー)に関するメタデータを解決するベースURL。例:"https://dev-xxxx.okta.com/oauth2/default"
|
client_id 必須 |
Array | – | プラグインがIdPとの通信中に使用するクライアントID。 |
client_secret 必須 |
Array | – | クライアントシークレット。 |
redirect_uri 必須 |
Array | – | IdPでの認証後にリダイレクトするURI。通常、Admin APIの/auth エンドポイントを指します。例:"http://localhost:8001/auth"
|
login_redirect_uri 必須 |
Array | – | Admin APIでの認証後にリダイレクトするURI。Kong Managerのエンドポイントを指す必要があります。例:"http://localhost:8002"
|
logout_redirect_uri 必須 |
Array | – | IdP からログアウトした後にリダイレクトする URI。Kong Manager のエンドポイントを指す必要があります。以下に例を示します。"http://localhost:8002"
|
admin_auto_create オプション |
ブール | true |
このパラメータは、管理者の自動作成を有効にするために使用されます。 |
admin_claim オプション |
文字列 | "email" |
管理者のユーザー名を検索するときに使用するクレーム。 |
authenticated_groups_claim オプション |
Array | ["groups"] |
認証されたグループを検索するときに使用するクレーム。 |
scopes オプション |
Array | ["openid", "email", "offline_access"] |
IdP での認証中に使用するスコープ。"openid" と "offline_access" を含める必要があります。admin_claim が指定するクレームに必要なスコープも含める必要があります。 |
ssl_verify オプション |
ブール | false |
IDプロバイダーサーバー証明書を確認します。 |
プラグインのドキュメントも参照し、 要件に応じて構成を変更します。
Kong ManagerをOpenID Connectで認証する場合、認証状態を持続するためにプラグイン内部のセッションメカニズムが使用されます。詳細については、接頭辞がsession_
のパラメータ向けのドキュメントを参照してください。
セッションのセキュリティを強化するための推奨事項
-
session_secret
を設定することをお勧めします。指定されていない場合は、ランダムに生成されたシークレットが使用されます。 -
session_cookie_secure
(デフォルト値はfalse
)HTTPではなくHTTPSを使用する場合に有効にすることをおすすめします。 - Admin APIおよびKong Managerで同じドメインを使用している場合、
session_cookie_same_site
からStrict
へのアップグレードを検討してください。
これらの概念の詳細については、Kong ManagerのSessionセキュリティを参照してください。
<>
で囲まれたエントリを、IdP に有効な値に置き換えます。
たとえば、Google の認証情報はここにあります:
https://console.cloud.google.com/projectselector/apis/credentials
管理者の作成
IDプロバイダーがログイン成功時に返すメールとユーザー名が 一致する管理者を作成してください。
curl -i -X POST http://localhost:8001/admins \
--data username="<admin_email id="sl-md0000000">" \
--data email="<admin_email id="sl-md0000000">" \
--header Kong-Admin-Token:<rbac_token id="sl-md0000000">
たとえば、あるユーザーのメールアドレスがexample_user@example.com
の場合:
curl -i -X POST http://localhost:8001/admins \
--data username="example_user@example_com" \
--data email="example_user@example.com" \
--header Kong-Admin-Token:<rbac_token id="sl-md0000000">
注: リクエストに入力されるアドミンのメールアドレスは招待メールを確実に受信するために使用されます。一方ユーザー名はプラグインがIdPと併用する属性です。
ロールを管理者に割り当て
新しいアドミンに少なくとも1つのロールを割り当てて、Kongエンティティにログインしてアクセスできるようにします。
curl -i -X POST http://localhost:8001/admins/<admin_email id="sl-md0000000">/roles \
--data roles="<role-name id="sl-md0000000">" \
--header Kong-Admin-Token:<rbac_token id="sl-md0000000">
たとえば、以下の方法で、 example_user@example.com
にスーパー管理者ロールをグラントします。
curl -i -X POST http://localhost:8001/admins/example_user@example.com/roles \
--data roles="super-admin" \
--header Kong-Admin-Token:<rbac_token id="sl-md0000000">