セキュリティ・アスペクトの設定

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 IDclient SECRET)が表示されます。

oauth-credentials

一度取得すると、tourguideコンテナ内のconfig.jsファイルを変更する必要があります。

最も簡単な方法はコンテナにアクセスすることです:

docker exec -it tourguide /bin/bash

And there, modify the parameters config.clientId and config.clientSecret: 次に、そこで、config.clientIdconfig.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 -