セキュリティ・アスペクトの設定¶
Keyrockを開始する¶
Keyrockは、Tour Guide Applicationに統合されたGeneric Enablerで、ユーザプロフィールの管理、認可、および認証を意識しています。
テスト目的のために、Keyrockに自動的にロードされるユーザ、組織、アプリケーション、ロール、および権限のセットを生成しました。これらをロードするには、以下を実行するだけです:
$ ./tour-guide configure keyrock
これにより、Keyrockにすべての情報がロードされ、XACMLポリシーの格納を認識しているGeneric EnablerのAuthzforceと自動的に同期します。
情報がロードされたら、KeyrockからOauth資格情報を取得し、それらをTour Guide Applicationの設定に追加する必要があります:
$ ./tour-guide configure oauth
このステップは、手動でも行うことができます。 Keyrockのインターフェースで行います:
http://keyrock:8000
また、アプリケーション・プロバイダのロール provider
を持つユーザ(このアプリケーション例では、以下にリストされているユーザ pepproxy@test.com
)で認証します。 ここで既に登録されているTourGuide
アプリケーションを選択すると、Oauthの資格情報(client ID
と client SECRET
)が表示されます。
一度取得すると、tourguide
コンテナ内のconfig.js
ファイルを変更する必要があります。
最も簡単な方法はコンテナにアクセスすることです:
docker exec -it tourguide /bin/bash
And there, modify the parameters config.clientId
and config.clientSecret
:
次に、そこで、config.clientId
と config.clientSecret
のパラメータを変更してください:
vi tutorials.TourGuide-App/server/config.js
最後に、Apacheサーバーをリロードする必要があります:
service apache2 reload
IdMユーザ、組織、アプリケーション、ロール、権限¶
ユーザ、組織、アプリケーション、ロール、および権限のセットに関連するすべての情報を含むファイルがここにあります。
注: 次の項目は、テストの目的のためだけのものです。 ここでKeyrock APIの全説明を確認してください。
ユーザ¶
提供されるデフォルトのユーザのセットは、以下で説明しています。
Role | Username | Password |
---|---|---|
Admin | idm | idm |
Provider | pepproxy@test.com | test |
Owner | user0@test.com | test |
Owner | user1@test.com | test |
Owner | user2@test.com | test |
Owner | user3@test.com | test |
Owner | user4@test.com | test |
Owner | user5@test.com | test |
Owner | user6@test.com | test |
Owner | user7@test.com | test |
Owner | user8@test.com | test |
Owner | user9@test.com | test |
生成されたら、Keyrock SCIM 2.0 REST APIを使用してリスト全体を取得できます:
curl -X GET -H "Content-Type: application/json" -H "X-auth-token: ADMIN" "http://keyrock:5000/v3/OS-SCIM/v2/Users/"
そして次のような出力が表示されます:
{
"totalResults": 13,
"Resources": [
{
"userName": "idm",
"urn:scim:schemas:extension:keystone:2.0": {
"domain_id": "default"
},
"active": true,
"id": "idm_user"
},
{
"userName": "user0@test.com",
"urn:scim:schemas:extension:keystone:2.0": {
"domain_id": "default"
},
"active": true,
"id": "user0"
},
{
"userName": "user1@test.com",
"urn:scim:schemas:extension:keystone:2.0": {
"domain_id": "default"
},
"active": true,
"id": "user1"
},
{
"userName": "user2@test.com",
"urn:scim:schemas:extension:keystone:2.0": {
"domain_id": "default"
},
"active": true,
"id": "user2"
}
...
],
"schemas": [
"urn:scim:schemas:core:2.0",
"urn:scim:schemas:extension:keystone:2.0"
]
}
または、ここで説明するように、ユーザを自分で生成します。
組織 (または プロジェクト Identity APIを使用している場合)¶
Keyrockが自動的に作成する組織の他に、4つの組織をフランチャイズとして提供しています。
Organization name | Description | Users |
---|---|---|
Franchise1 | Franchise1 | user0@test.com (owner) |
Franchise2 | Franchise2 | user0@test.com (owner) |
Franchise3 | Franchise3 | user0@test.com (owner) |
Franchise4 | Franchise4 | user0@test.com (owner) |
以下を使用して、すべての組織を一覧表示できます:
curl -X GET -H "Content-Type: application/json" -H "X-auth-token: ADMIN" "http://keyrock:5000/v3/OS-SCIM/v2/Organizations/"
これは生成された組織が表示されます:
{
"totalResults": 27,
"Resources": [
…
{
"active": true,
"urn:scim:schemas:extension:keystone:2.0": {
"domain_id": "default"
},
"description": "Test Franchise1",
"name": "Franchise1",
"id": "f3aa9a45d1174b32a178dd281e801fd8"
},
...
{
"active": true,
"urn:scim:schemas:extension:keystone:2.0": {
"domain_id": "default"
},
"description": "Test Franchise4",
"name": "Franchise4",
"id": "06a127d2a7534500bb5fb17b5d54d308"
}
],
"schemas": [
"urn:scim:schemas:core:2.0",
"urn:scim:schemas:extension:keystone:2.0"
]
}
組織の作成はこちらをご覧ください。
アプリ¶
Keyrock に Consumer または App を登録しました。
Application name | Description | URL | Redirect URI |
---|---|---|---|
FIWARE TourGuide | Fiware TourGuide Test Application | http://tourguide | http://tourguide/login |
次のコマンドを実行すると、それらをすべて一覧表示できます:
curl -X GET -H "Content-Type: application/json" -H "X-auth-token: ADMIN" "http://keyrock:5000/v3/OS-OAUTH2/consumers/"
そして出力:
{
"links": {
"self": "http://keyrock:5000/v3/OS-OAUTH2/consumers",
"previous": null,
"next": null
},
"consumers": [
{
"scopes": [],
"redirect_uris": [],
"description": "Application that acts as the IdM itself. To see the administration section of the web portal grant provider to a user in this application.",
"links": {
"self": "http://keyrock:5000/v3/OS-OAUTH2/consumers/idm_admin_app"
},
"extra": {
"is_default": true
},
"is_default": true,
"client_type": "confidential",
"response_type": "code",
"grant_type": "authorization_code",
"id": "idm_admin_app",
"name": "idm_admin_app"
},
{
"scopes": [
"all_info"
],
"pep_proxy_name": "pep_proxy_7479c6d8886a4b1db211bd76fda1c1f6",
"redirect_uris": [
"http://tourguide/login"
],
"name": "TourGuide",
"img": "/static/dashboard/img/logos/small/app.png",
"extra": {
"url": "http://tourguide",
"pep_proxy_name": "pep_proxy_7479c6d8886a4b1db211bd76fda1c1f6",
"iot_sensors": [],
"ac_domain": "zgUcVoWDEea5lAJCrBEABw",
"img": "/static/dashboard/img/logos/small/app.png"
},
"url": "http://tourguide",
"ac_domain": "zgUcVoWDEea5lAJCrBEABw",
"links": {
"self": "http://keyrock:5000/v3/OS-OAUTH2/consumers/36b34b9f2a3048c58c0a2763b5a3df0c"
},
"iot_sensors": [],
"response_type": "code",
"client_type": "confidential",
"grant_type": "authorization_code",
"id": "36b34b9f2a3048c58c0a2763b5a3df0c",
"description": "Fiware TourGuide Application"
}
]
}
または、ここで説明するように、独自のもので生成します。
ロール¶
次のリストは生成されるロールです:
Role name | Granted to user |
---|---|
Provider | pepproxy@test.com |
End user | All |
Franchise Manager | user0@test.com (Franchise1) |
Franchise Manager | user1@test.com (Franchise2) |
Franchise Manager | user2@test.com (Franchise3) |
Franchise Manager | user3@test.com (Franchise4) |
Global Manager | user0@test.com |
次のクエリを実行すると、それらを取得できます:
curl -X GET -H "Content-Type: application/json" -H "X-auth-token: ADMIN" "http://keyrock:5000/v3/OS-ROLES/roles/"
次の出力を生成します:
{
"links": {
"self": "http://keyrock:5000/v3/OS-ROLES/roles",
"previous": null,
"next": null
},
"roles": [
{
"is_internal": true,
"application_id": "idm_admin_app",
"id": "provider",
"links": {
"self": "http://keyrock:5000/v3/OS-ROLES/roles/provider"
},
"name": "Provider"
},
{
"is_internal": true,
"application_id": "idm_admin_app",
"id": "purchaser",
"links": {
"self": "http://keyrock:5000/v3/OS-ROLES/roles/purchaser"
},
"name": "Purchaser"
},
{
"is_internal": false,
"application_id": "36b34b9f2a3048c58c0a2763b5a3df0c",
"id": "17d245ab695847f1800df8f85b360df9",
"links": {
"self": "http://keyrock:5000/v3/OS-ROLES/roles/17d245ab695847f1800df8f85b360df9"
},
"name": "End user"
},
{
"is_internal": false,
"application_id": "36b34b9f2a3048c58c0a2763b5a3df0c",
"id": "a5b6a9daa0594f8d818e3a83da5a498e",
"links": {
"self": "http://keyrock:5000/v3/OS-ROLES/roles/a5b6a9daa0594f8d818e3a83da5a498e"
},
"name": "Franchise manager"
},
{
"is_internal": false,
"application_id": "36b34b9f2a3048c58c0a2763b5a3df0c",
"id": "0efd09a12f074f63abe53ee943cfa6f5",
"links": {
"self": "http://keyrock:5000/v3/OS-ROLES/roles/0efd09a12f074f63abe53ee943cfa6f5"
},
"name": "Global manager"
}
]
}
または、ここで説明するように、いくつか生成してください。
アクセス許可¶
パーミッションは以下のようにしてリストすることができます:
curl -X GET -H "Content-Type: application/json" -H "X-auth-token: ADMIN" "http://keyrock:5000/v3/OS-ROLES/permissions/"
以下の出力を得ます:
{
"links": {
"self": "http://keyrock:5000/v3/OS-ROLES/permissions",
"previous": null,
"next": null
},
"permissions": [
{
"xml": null,
"resource": null,
"name": "Manage the application",
"links": {
"self": "http://keyrock:5000/v3/OS-ROLES/permissions/manage-application"
},
"is_internal": true,
"action": null,
"application_id": "idm_admin_app",
"id": "manage-application"
},
{
"xml": null,
"resource": null,
"name": "Manage roles",
"links": {
"self": "http://keyrock:5000/v3/OS-ROLES/permissions/manage-roles"
},
"is_internal": true,
"action": null,
"application_id": "idm_admin_app",
"id": "manage-roles"
},
{
"xml": null,
"resource": null,
"name": "Get and assign all public application roles",
"links": {
"self": "http://keyrock:5000/v3/OS-ROLES/permissions/get-assign-public-roles"
},
"is_internal": true,
"action": null,
"application_id": "idm_admin_app",
"id": "get-assign-public-roles"
},
{
"xml": null,
"resource": null,
"name": "Manage Authorizations",
"links": {
"self": "http://keyrock:5000/v3/OS-ROLES/permissions/manage-authorizations"
},
"is_internal": true,
"action": null,
"application_id": "idm_admin_app",
"id": "manage-authorizations"
},
{
"xml": null,
"resource": null,
"name": "Get and assign only public owned roles",
"links": {
"self": "http://keyrock:5000/v3/OS-ROLES/permissions/get-assign-public-owned-roles"
},
"is_internal": true,
"action": null,
"application_id": "idm_admin_app",
"id": "get-assign-public-owned-roles"
},
{
"xml": null,
"resource": null,
"name": "Get and assign all internal application roles",
"links": {
"self": "http://keyrock:5000/v3/OS-ROLES/permissions/get-assign-internal-roles"
},
"is_internal": true,
"action": null,
"application_id": "idm_admin_app",
"id": "get-assign-internal-roles"
},
{
"xml": null,
"resource": "NGSI10/queryContext?limit=1000&entity_type=reservation",
"name": "reservations",
"links": {
"self": "http://keyrock:5000/v3/OS-ROLES/permissions/1c9af9da448a41f1ae5682930d2f59c0"
},
"is_internal": false,
"action": "POST",
"application_id": "36b34b9f2a3048c58c0a2763b5a3df0c",
"id": "1c9af9da448a41f1ae5682930d2f59c0"
},
{
"xml": null,
"resource": "NGSI10/queryContext?limit=1000&entity_type=review",
"name": "reviews",
"links": {
"self": "http://keyrock:5000/v3/OS-ROLES/permissions/7a26fd22c9ba4495802c7cf6683e4cdd"
},
"is_internal": false,
"action": "POST",
"application_id": "36b34b9f2a3048c58c0a2763b5a3df0c",
"id": "7a26fd22c9ba4495802c7cf6683e4cdd"
},
{
"xml": null,
"resource": "NGSI10/queryContext?limit=1000&entity_type=restaurant",
"name": "restaurants",
"links": {
"self": "http://keyrock:5000/v3/OS-ROLES/permissions/ea915f7a7e654536aa3c587f58ce83df"
},
"is_internal": false,
"action": "POST",
"application_id": "36b34b9f2a3048c58c0a2763b5a3df0c",
"id": "ea915f7a7e654536aa3c587f58ce83df"
}
]
}
または、ここで説明するように、自分で生成することもできます。
Authzforceを開始する¶
Authzforceポリシーは、 default provision fileに基づいてKeyrockによって自動的に生成されます。
以下を実行することによって:
$ ./tour-guide configure keyrock
ポリシーが生成され、Authzforceと同期されます。 Authzforceコンテナに問い合わせするには、コンテナのIPアドレスをhostfileに追加する必要があります。 これは(sudoが必要)以下を行うことで実現できます:
sudo ./tour-guide configure hosts -m
その後、生成されたポリシーを確認するためにAuthzforceコンテナに問い合わせることができます。
まず、ポリシーが格納されているドメインを取得します:
curl -s --request GET http://authzforce:8080/authzforce-ce/domains | awk '/href/{print $NF}' | cut -d '"' -f2
次のような値が返されます:
_lczKYmCEeaNFgJCrBEACA
次に、IDの格納されているポリシーのリストを取得します:
curl -s --request GET http://authzforce:8080/authzforce-ce/domains/{$DOMAIN}/pap/policies | xmllint --format -
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<resources xmlns="http://authzforce.github.io/rest-api-model/xmlns/authz/5" xmlns:ns2="urn:oasis:names:tc:xacml:3.0:core:schema:wd-17" xmlns:ns3="http://authzforce.github.io/core/xmlns/pdp/3.6" xmlns:ns4="http://www.w3.org/2005/Atom" xmlns:ns5="http://authzforce.github.io/pap-dao-flat-file/xmlns/properties/3.6">
<ns4:link rel="item" href="b0654ddd-e74a-4f4f-8f91-d81470af70a1"/>
<ns4:link rel="item" href="root"/>
</resources>
そして、ポリシーの1つを選択すると、このポリシーに格納されているバージョンを取得できます:
curl -s --request GET http://authzforce:8080/authzforce-ce/domains/{$DOMAIN}/pap/policies/{$POLICY_ID} | xmllint --format -
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<resources xmlns="http://authzforce.github.io/rest-api-model/xmlns/authz/5" xmlns:ns2="urn:oasis:names:tc:xacml:3.0:core:schema:wd-17" xmlns:ns3="http://authzforce.github.io/core/xmlns/pdp/3.6" xmlns:ns4="http://www.w3.org/2005/Atom" xmlns:ns5="http://authzforce.github.io/pap-dao-flat-file/xmlns/properties/3.6">
<ns4:link rel="item" href="1.0"/>
</resources>
最後に、バージョンの1つを選択すると、完全なポリシーセットを取得できます:
curl -s --request GET http://authzforce:8080/authzforce-ce/domains/{$DOMAIN}/pap/policies/{$POLICY_ID}/{$VERSION} | xmllint --format -