このページは、まだ日本語ではご利用いただけません。翻訳中です。
古いプラグインバージョンのドキュメントを閲覧しています。
ACL configuration with Kong Gateway
This example covers a common use case: as an API owner, you want to regulate access based on the type of request methods and consumer groups. Specifically, the goal is to allow consumers in the dev group to perform GET, POST, and PUT requests on all routes, while reserving the DELETE request functionality exclusively for consumers in the admin group.
Create consumers
Using the API, create two consumers, admin
and dev
.
- Create consumer
admin
:
curl -i -X POST http://localhost:8001/consumers \
--data "username=admin"
- Create consumer
dev
:
curl -i -X POST http://localhost:8001/consumers \
--data "username=dev"
The response for each request contains a UUID in the id
field that you will need for the rest of the guide.
Create consumer groups
- Using the API, create a consumer group for
dev
:
curl -i -X POST http://localhost:8001/consumer_groups \
--data "name=dev"
-
Then create a consumer group for admin
:
curl -i -X POST http://localhost:8001/consumer_groups \
--data "name=admin"
-
Add a consumer to the admin
group by using the UUID of the specific consumer:
curl -i -X POST http://localhost:8001/consumer_groups/admin/consumers \
--data "consumer=8a4bba3c-7f82-45f0-8121-ed4d2847c4a4"
-
Add a different consumer to the dev
group:
curl -i -X POST http://localhost:8001/consumer_groups/dev/consumers \
--data "consumer=8a4bba3c-7f82-45f0-8121-ed4d2847c4a4"
Create routes
Using the Admin API and the expressions router, create two routes: one that matches GET
, POST
and PUT
, and one that only matches DELETE
.
-
Create a route that matches when the method is not DELETE
:
curl --request POST \
--url http://localhost:8001/services/example-service/routes \
--form-string name=devs-and-admins \
--form-string expression='http.path == "/example" && http.method != "DELETE"'
-
Create a route that matches when the method is DELETE:
curl --request POST \
--url http://localhost:8001/services/example-service/routes \
--form-string name=only-admins \
--form-string expression='http.path == "/example" && http.method == "DELETE"'
Set up the ACL plugin
Scope the plugin to each of these routes with the respective allow
configuration.
Enable the ACL plugin on the devs-and-admin
route, setting the allow
field to accept both groups:
Kong Admin API
Konnect API
Kubernetes
Declarative (YAML)
Konnect Terraform
次のリクエストを行います。
curl -X POST http://localhost:8001/routes/{routeName|Id}/plugins \
--header "accept: application/json" \
--header "Content-Type: application/json" \
--data '
{
"name": "acl",
"config": {
"include_consumer_groups": true,
"allow": [
"dev",
"admin"
]
}
}
'
ROUTE_NAME |
IDを、このプラグイン構成が対象とするルートのid またはnameに置き換えてください。 |
独自のアクセストークン、リージョン、コントロールプレーン(CP)ID、ルートIDを代入して、次のリクエストをしてください。
curl -X POST \
https://{us|eu}.api.konghq.com/v2/control-planes/{controlPlaneId}/core-entities/routes/{routeId}/plugins \
--header "accept: application/json" \
--header "Content-Type: application/json" \
--header "Authorization: Bearer TOKEN" \
--data '{"name":"acl","config":{"include_consumer_groups":true,"allow":["dev","admin"]}}'
地域固有のURLと個人アクセストークンの詳細については、 Konnect API referenceをご参照ください。
まず、KongPlugin
リソースを作成します:
echo "
apiVersion: configuration.konghq.com/v1
kind: KongPlugin
metadata:
name: acl-example
plugin: acl
config:
include_consumer_groups: true
allow:
- dev
- admin
" | kubectl apply -f -
次に、次のようにingressに注釈を付けて、KongPluginリソースをイングレスに適用します。
kubectl annotate ingress INGRESS_NAME konghq.com/plugins=acl-example
INGRESS_NAMEを、このプラグイン構成がターゲットとするイングレス名に置き換えます。
kubectl get ingressを実行すると、利用可能なイングレスを確認できます。
注:
KongPluginリソースは一度だけ定義するだけで、ネームスペース内の任意のサービス、コンシューマー、またはルートに適用できます。プラグインをクラスター全体で利用可能にしたい場合は、KongPlugin
の代わりにKongClusterPlugin
としてリソースを作成してください。
このセクションを宣言型構成ファイルに追加します。
plugins:
- name: acl
route: ROUTE_NAME|ID
config:
include_consumer_groups: true
allow:
- dev
- admin
ROUTE_NAME |
IDを、このプラグイン構成が対象とするルートのid またはnameに置き換えてください。 |
前提条件: パーソナルアクセストークンの設定
terraform {
required_providers {
konnect = {
source = "kong/konnect"
}
}
}
provider "konnect" {
personal_access_token = "kpat_YOUR_TOKEN"
server_url = "https://us.api.konghq.com/"
}
Kong Konnectゲートウェイプラグインを作成するには、Terraform 構成に以下を追加します。
resource "konnect_gateway_plugin_acl" "my_acl" {
enabled = true
config = {
include_consumer_groups = true
allow = ["dev", "admin"]
}
control_plane_id = konnect_gateway_control_plane.my_konnect_cp.id
route = {
id = konnect_gateway_route.my_route.id
}
}
Enable another ACL plugin instance on the only-admins
route, setting the allow
field set to only accept the admin
group:
Kong Admin API
Konnect API
Kubernetes
Declarative (YAML)
Konnect Terraform
次のリクエストを行います。
curl -X POST http://localhost:8001/routes/{routeName|Id}/plugins \
--header "accept: application/json" \
--header "Content-Type: application/json" \
--data '
{
"name": "acl",
"config": {
"include_consumer_groups": true,
"allow": [
"admin"
]
}
}
'
ROUTE_NAME |
IDを、このプラグイン構成が対象とするルートのid またはnameに置き換えてください。 |
独自のアクセストークン、リージョン、コントロールプレーン(CP)ID、ルートIDを代入して、次のリクエストをしてください。
curl -X POST \
https://{us|eu}.api.konghq.com/v2/control-planes/{controlPlaneId}/core-entities/routes/{routeId}/plugins \
--header "accept: application/json" \
--header "Content-Type: application/json" \
--header "Authorization: Bearer TOKEN" \
--data '{"name":"acl","config":{"include_consumer_groups":true,"allow":["admin"]}}'
地域固有のURLと個人アクセストークンの詳細については、 Konnect API referenceをご参照ください。
まず、KongPlugin
リソースを作成します:
echo "
apiVersion: configuration.konghq.com/v1
kind: KongPlugin
metadata:
name: acl-example
plugin: acl
config:
include_consumer_groups: true
allow:
- admin
" | kubectl apply -f -
次に、次のようにingressに注釈を付けて、KongPluginリソースをイングレスに適用します。
kubectl annotate ingress INGRESS_NAME konghq.com/plugins=acl-example
INGRESS_NAMEを、このプラグイン構成がターゲットとするイングレス名に置き換えます。
kubectl get ingressを実行すると、利用可能なイングレスを確認できます。
注:
KongPluginリソースは一度だけ定義するだけで、ネームスペース内の任意のサービス、コンシューマー、またはルートに適用できます。プラグインをクラスター全体で利用可能にしたい場合は、KongPlugin
の代わりにKongClusterPlugin
としてリソースを作成してください。
このセクションを宣言型構成ファイルに追加します。
plugins:
- name: acl
route: ROUTE_NAME|ID
config:
include_consumer_groups: true
allow:
- admin
ROUTE_NAME |
IDを、このプラグイン構成が対象とするルートのid またはnameに置き換えてください。 |
前提条件: パーソナルアクセストークンの設定
terraform {
required_providers {
konnect = {
source = "kong/konnect"
}
}
}
provider "konnect" {
personal_access_token = "kpat_YOUR_TOKEN"
server_url = "https://us.api.konghq.com/"
}
Kong Konnectゲートウェイプラグインを作成するには、Terraform 構成に以下を追加します。
resource "konnect_gateway_plugin_acl" "my_acl" {
enabled = true
config = {
include_consumer_groups = true
allow = ["admin"]
}
control_plane_id = konnect_gateway_control_plane.my_konnect_cp.id
route = {
id = konnect_gateway_route.my_route.id
}
}