Contents

Introduction

Prerequisites

Requirements

Components Used

Configure

High Level Flow Diagram

Configurations

Step 1. Configure Endpoint Custom Attributes on ISE

Step 2. Configure Profiler Policy using Custom Attributes

Step 3. Enable Custom Attributes for Profiling Enforcement

Step 4. Export IND identity certificate

Step 5. Upload IND identity certificate to ISE Trusted Store

Step 6. Generate Certificate for IND

Step 7. Download certificate chain in PKCS12 format

Step 8. Upload certificate chain on IND

Step 9. Configure Policy Server on IND

Step 10. Configure pxGrid integration on IND

Step 11. Approve IND on ISE

Step 12. Activate pxGrid Service on IND

Verify

ISE Verification

IND Verification

Troubleshoot

Sync Status stuck in Out of Sync on IND

Not all endpoints are shared with ISE

assetTag and AssetGroup are not available on ISE

Introduction

This document describes how to configure and troubleshoot Identity Services Engine (ISE) 2.4 and Industrial Network Director 1.6.1-4 integration over pxGrid (Platform Exchange Grid). Cisco IND is registered with pxGrid as a publisher and publishes information on endpoint attributes to ISE for IOTASSET Dictionary.

Prerequisites

Requirements

Cisco recommends that you have basic knowledge of these topics:

- Cisco Identity Service Engine

- Cisco Industrial Network Director

Components Used

The information in this document is based on these software and hardware versions:

- Cisco Identity Service Engine version 2.4 p6

- Industrial Network Director 1.6.1-4

Configure

High Level Flow Diagram

1. IND registers with ISE via pxGrid version 2 on ISE pxGrid node. Corresponding logs from IND (application.log):

2019-05-22 14:31:17,770:INFO:qtp281049997-52711:PxgridPublisher:: Connect start

2019-05-22 14:31:17,770:INFO:qtp281049997-52711:PxgridPublisher:: Hostname:WIN2012-AAA IpAddress:10.62.145.130

2019-05-22 14:31:17,770:INFO:qtp281049997-52711:PxgridPublisher:: pxGrid RestBaseUrl:https://WIN2012-AAA:8910/pxgrid/ind/asset/

2019-05-22 14:31:17,770:INFO:qtp281049997-52711:PxgridController:: Send Request ServiceRegister invoked with pxGridServer(s) [ISE24-1ek.example.com]

2019-05-22 14:31:17,770:INFO:qtp281049997-52711:PxgridController:: Sending ServiceRegister request to pxGridServer ISE24-1ek.example.com

2019-05-22 14:31:17,786:INFO:qtp281049997-52711:PxgridController:: Request={"name":"com.cisco.endpoint.asset","properties":{"wsPubsubService":"com.cisco.ise.pubsub","restBaseUrl":"https://WIN2012-AAA:8910/pxgrid/ind/asset/","assetTopic":"/topic/com.cisco.endpoint.asset"}}

2019-05-22 14:31:17,911:INFO:qtp281049997-52711:PxgridController:: Response={"id":"76d4abaf-9efd-4c68-a046-79e049564902","reregisterTimeMillis":"300000"}

2019-05-22 14:31:17,911:INFO:qtp281049997-52711:PxgridController:: Send Request ServiceLookup invoked with pxGridServer(s) [ISE24-1ek.example.com]

2019-05-22 14:31:17,911:INFO:qtp281049997-52711:PxgridController:: Sending ServiceLookup request to pxGridServer ISE24-1ek.example.com

2019-05-22 14:31:17,911:INFO:qtp281049997-52711:PxgridController:: Request={"name":"com.cisco.ise.pubsub"}

2019-05-22 14:31:17,911:INFO:qtp281049997-52711:PxgridController:: Response={"services":[{"name":"com.cisco.ise.pubsub","nodeName":"ise-pubsub-ise24-1ek","properties":{"wsUrl":"wss://ISE24-1ek.example.com:8910/pxgrid/ise/pubsub"}}]}

2019-05-22 14:31:17,911:INFO:qtp281049997-52711:PxgridPublisher:: wsUrl=wss://ISE24-1ek.example.com:8910/pxgrid/ise/pubsub

2019-05-22 14:31:17,911:INFO:qtp281049997-52711:PxgridController:: Send Request AccessSecret invoked with pxGridServer(s) [ISE24-1ek.example.com]

2019-05-22 14:31:17,911:INFO:qtp281049997-52711:PxgridController:: Sending AccessSecret request to pxGridServer ISE24-1ek.example.com

2019-05-22 14:31:17,926:INFO:qtp281049997-52711:PxgridController:: Request={"peerNodeName":"ise-pubsub-ise24-1ek"}

2019-05-22 14:31:17,926:INFO:qtp281049997-52711:PxgridController:: Access Secret recieved

2019-05-22 14:31:17,926:INFO:qtp281049997-52711:PxgridPublisher:: Client created

As seen in the logs, IND has registered for the assetTopic

2. ISE PSN with pxgrid probe enabled does a bulk download of existing pxGrid Assets (profiler.log):

2019-05-22 14:39:25,817 INFO [ProfilerINDSubscriberPoller-56-thread-1][] cisco.profiler.infrastructure.probemgr.INDSubscriber -::- New services are: [Service [name=com.cisco.endpoint.asset, nodeName=ind2, properties={wsPubsubService=com.cisco.ise.pubsub, restBaseUrl=https://WIN2012-AAA:8910/pxgrid/ind/asset/, assetTopic=/topic/com.cisco.endpoint.asset}]]

2019-05-22 14:39:26,011 INFO [ProfilerINDSubscriberPoller-56-thread-1][] cisco.profiler.infrastructure.probemgr.INDSubscriber -::- NODENAME:ind2

2019-05-22 14:39:26,011 INFO [ProfilerINDSubscriberPoller-56-thread-1][] cisco.profiler.infrastructure.probemgr.INDSubscriber -::- REQUEST BODY{"offset":"0","limit":"500"}

2019-05-22 14:39:26,046 INFO [ProfilerINDSubscriberPoller-56-thread-1][] cisco.profiler.infrastructure.probemgr.INDSubscriber -::- Response status={}200

2019-05-22 14:39:26,046 INFO [ProfilerINDSubscriberPoller-56-thread-1][] cisco.profiler.infrastructure.probemgr.INDSubscriber -::- Content: "OUT_OF_SYNC"

2019-05-22 14:39:26,047 INFO [ProfilerINDSubscriberPoller-56-thread-1][] cisco.profiler.infrastructure.probemgr.INDSubscriber -::- Status is :"OUT_OF_SYNC"

2019-05-22 14:39:26,047 DEBUG [ProfilerINDSubscriberPoller-56-thread-1][] cisco.profiler.infrastructure.probemgr.INDSubscriber -::- Static set after adding new services: [Service [name=com.cisco.endpoint.asset, nodeName=ind, properties={wsPubsubService=com.cisco.ise.pubsub, restBaseUrl=https://WIN2012-AAA:8910/pxgrid/ind/asset/, assetTopic=/topic/com.cisco.endpoint.asset}], Service [name=com.cisco.endpoint.asset, nodeName=ind2, properties={wsPubsubService=com.cisco.ise.pubsub, restBaseUrl=https://WIN2012-AAA:8910/pxgrid/ind/asset/, assetTopic=/topic/com.cisco.endpoint.asset}]]

2019-05-22 14:39:26,052 INFO [ProfilerINDSubscriberBulkRequestPool-80-thread-1][] cisco.profiler.infrastructure.probemgr.INDSubscriber -::- NODENAME:ind2

2019-05-22 14:39:26,052 INFO [ProfilerINDSubscriberBulkRequestPool-80-thread-1][] cisco.profiler.infrastructure.probemgr.INDSubscriber -::- REQUEST BODY{"offset":"0","limit":"500"}

2019-05-22 14:39:26,111 INFO [ProfilerINDSubscriberBulkRequestPool-80-thread-1][] cisco.profiler.infrastructure.probemgr.INDSubscriber -::- Response status={}200

2019-05-22 14:39:26,111 INFO [ProfilerINDSubscriberBulkRequestPool-80-thread-1][] cisco.profiler.infrastructure.probemgr.INDSubscriber -::- Content: {"assets":[{"assetId":"100","assetName":"WIN2012-CHILD","assetIpAddress":"10.62.145.131","assetMacAddress":"00:50:56:b6:46:87","assetVendor":"VMware","assetProductId":"Unknown","assetSerialNumber":"","assetDeviceType":"Server","assetSwRevision":"","assetHwRevision":"","assetProtocol":"NetBIOS","assetConnectedLinks":[],"assetCustomAttributes":[{"key":"assetGroup","value":"Root"},{"key":"assetTag","value":"SEC_TAG2"}]},{"assetId":"101","assetName":"win2012.example.com","assetIpAddress":"10.62.145.72","assetMacAddress":"00:50:56:9c:3f:92","assetVendor":"VMware","assetProductId":"Unknown","assetSerialNumber":"","assetDeviceType":"Server","assetSwRevision":"","assetHwRevision":"","assetProtocol":"NetBIOS","assetConnectedLinks":[],"assetCustomAttributes":[{"key":"assetGroup","value":"Root"},{"key":"assetTag","value":""}]}]}

2019-05-22 14:39:26,111 DEBUG [ProfilerINDSubscriberBulkRequestPool-80-thread-1][] cisco.profiler.infrastructure.probemgr.INDSubscriber -::- Parsing bulk response {"assets":[{"assetId":"100","assetName":"WIN2012-CHILD","assetIpAddress":"10.62.145.131","assetMacAddress":"00:50:56:b6:46:87","assetVendor":"VMware","assetProductId":"Unknown","assetSerialNumber":"","assetDeviceType":"Server","assetSwRevision":"","assetHwRevision":"","assetProtocol":"NetBIOS","assetConnectedLinks":[],"assetCustomAttributes":[{"key":"assetGroup","value":"Root"},{"key":"assetTag","value":"SEC_TAG2"}]},{"assetId":"101","assetName":"win2012.example.com","assetIpAddress":"10.62.145.72","assetMacAddress":"00:50:56:9c:3f:92","assetVendor":"VMware","assetProductId":"Unknown","assetSerialNumber":"","assetDeviceType":"Server","assetSwRevision":"","assetHwRevision":"","assetProtocol":"NetBIOS","assetConnectedLinks":[],"assetCustomAttributes":[{"key":"assetGroup","value":"Root"},{"key":"assetTag","value":""}]}]}

3. New endpoint is discovered on IND (endpoint needs to be discovered with a protocol, otherwise endpoint is not identified as a pxGrid Asset and is not shared via pxGrid with ISE).

4. IND publishes this information to ISE pxGrid node

5. PSN via pxGrid probe receives this data (profiler.log):

2019-05-22 15:20:40,616 DEBUG [Grizzly(2)][] cisco.profiler.infrastructure.probemgr.INDSubscriber -::- Parsing push notification response: {"asset":{"assetId":"101","assetName":"win2012.example.com","assetIpAddress":"10.62.145.72","assetMacAddress":"00:50:56:9c:3f:92","assetVendor":"VMware","assetProductId":"Unknown","assetSerialNumber":"","assetDeviceType":"Server","assetSwRevision":"","assetHwRevision":"","assetProtocol":"NetBIOS","assetConnectedLinks":[],"assetCustomAttributes":[{"key":"assetGroup","value":"Root"},{"key":"assetTag","value":"SEC_TAG2"}]},"opType":"UPDATE"}

2019-05-22 15:20:40,616 DEBUG [Grizzly(2)][] cisco.profiler.infrastructure.probemgr.INDSubscriber -::- sending endpoint to forwarder{"assetId":"101","assetName":"win2012.example.com","assetIpAddress":"10.62.145.72","assetMacAddress":"00:50:56:9c:3f:92","assetVendor":"VMware","assetProductId":"Unknown","assetSerialNumber":"","assetDeviceType":"Server","assetSwRevision":"","assetHwRevision":"","assetProtocol":"NetBIOS","assetConnectedLinks":[],"assetCustomAttributes":[{"key":"assetGroup","value":"Root"},{"key":"assetTag","value":"SEC_TAG2"}]}

2019-05-22 15:20:40,617 INFO [Grizzly(2)][] cisco.profiler.infrastructure.probemgr.Forwarder -::- Forwarder Mac 00:50:56:9C:3F:92 MessageCode null epSource PXGRIDPROBE

2019-05-22 15:20:40,617 DEBUG [forwarder-2][] cisco.profiler.infrastructure.probemgr.ForwarderHelper -:ProfilerCollection:- sequencing Radius message for mac = 00:50:56:9C:3F:92

2019-05-22 15:20:40,617 DEBUG [forwarder-2][] cisco.profiler.infrastructure.probemgr.Forwarder -:ProfilerCollection:- Processing endpoint:00:50:56:9C:3F:92

2019-05-22 15:20:40,618 DEBUG [forwarder-2][] com.cisco.profiler.im.EndPoint -:ProfilerCollection:- filtered custom attributes are:{assetGroup=Root, assetTag=SEC_TAG2}

2019-05-22 15:20:40,618 DEBUG [forwarder-2][] cisco.profiler.infrastructure.probemgr.Forwarder -:ProfilerCollection:- Filtering:00:50:56:9C:3F:92

2019-05-22 15:20:40,618 DEBUG [forwarder-2][] cisco.profiler.infrastructure.probemgr.Forwarder -:ProfilerCollection:- Endpoint Attributes:EndPoint[id=<null>,name=<null>]

MAC: 00:50:56:9C:3F:92

Attribute:BYODRegistration value:Unknown

Attribute:DeviceRegistrationStatus value:NotRegistered

Attribute:EndPointProfilerServer value:ISE24-1ek.example.com

Attribute:EndPointSource value:PXGRIDPROBE

Attribute:MACAddress value:00:50:56:9C:3F:92

Attribute:NmapSubnetScanID value:0

Attribute:OUI value:VMware, Inc.

Attribute:PolicyVersion value:0

Attribute:PortalUser value:

Attribute:PostureApplicable value:Yes

Attribute:assetDeviceType value:Server

Attribute:assetGroup value:Root

Attribute:assetHwRevision value:

Attribute:assetId value:101

Attribute:assetIpAddress value:10.62.145.72

Attribute:assetMacAddress value:00:50:56:9c:3f:92

Attribute:assetName value:win2012.example.com

Attribute:assetProductId value:Unknown

Attribute:assetProtocol value:NetBIOS

Attribute:assetSerialNumber value:

Attribute:assetSwRevision value:

Attribute:assetTag value:SEC_TAG2

Attribute:assetVendor value:VMware

Attribute:b310a420-78a5-11e9-a189-9ac8f4107843 value:Root

Attribute:b8e73d50-78a5-11e9-a189-9ac8f4107843 value:SEC_TAG2

Attribute:ip value:10.62.145.72

Attribute:SkipProfiling value:false

6. Context Visibility is updated with correct data

Configurations

Note: Steps 1 - 3 are required even if you wish to have just visibility of assetGroup and assetTag in Context Visibility

Step 1. Configure Endpoint Custom Attributes on ISE

Navigate to Administration > Identity Management > Settings > Endpoint Custom Attributes. Configure Custom Attributes (assetGroup and assetTag) according to the image below.

Step 2. Configure Profiler Policy using Custom Attributes

Navigate to Work Centers > Profiler > Profiling Policies. Click on Add. Configure Profiler Policy similar to the image below.

Step 3. Enable Custom Attributes for Profiling Enforcement

Navigate to Work Centers > Profiler > Settings > Profiler Settings. Ensure Enable Custom Attribute for Profiling Enforcement checkbox is checked.

Step 4. Export IND identity certificate

Navigate to Settings > pxGrid. Click on Download .pem IND certificate. This certificate is used during pxGrid registration, so ISE should trust it.

Step 5. Upload IND identity certificate to ISE Trusted Store

Navigate to Administration > Certificates > Certificate Management > Trusted Certificates. Click on Import. Click on Browse and select IND certificate from Step 3. Click Submit.

Step 6. Generate Certificate for IND

IND does not use client certificate which ISE CA issues. Instead the goal is to populate IND trusted store, so when ISE sends it's pxGrid certificate (during TLS exchange), it is trusted by IND.

Navigate to Administration > pxGrid Services > Certificates. Populate fields according to the image below. CN field is mandatory since the goal of ISE CA is to issue identity certificate. Ideally you should enter the FQDN of IND, but since identity certificate is not used by IND, CN field value is not critical.

Step 7. Download certificate chain in PKCS12 format

Step 8. Upload certificate chain on IND

Navigate to Settings > pxGrid > Trusted Certificates. Click on New. Enter the Name (chain will be seen with this name on IND). Password is the one from Step 1.

Step 9. Configure Policy Server on IND

Navigate to Settings > Policy Servers, click on New. Enter ISE FQDN and ip address of ISE pxGrid Node.

Step 10. Configure pxGrid integration on IND

Navigate to Settings > pxGrid and enable pxGrid integration. Click on toggle button. Enter the Node Name, this Host Name is the name of pxGrid client on ISE. Select the ISE configured earlier from the drop down menu in Server 1 field. Click on Register.

Note: Steps 11 - 12 might be ignored if Automatically approve new certificate-based accounts setting is enabled on ISE.

The following message is displayed on IND upon successful Registration:

Step 11. Approve IND on ISE

Navigate to Administration > pxGrid Services > All Clients. Open Total Pending Approval(1) drop down menu. Click Approve All.

Step 12. Activate pxGrid Service on IND

Navigate to Settings > pxGrid. Click on Activate.

The following message is displayed on IND upon successful Activation:

Verify

ISE Verification

Navigate to Administration > pxGrid Services > All Clients. It is expected to see IND client as Offline (XMPP) in All Clients, IND uses pxGrid version 2.

Click on Web Clients, confirm that IND client has a status ON, and that /topic/com.cisco.endoint.asset is part of Subscriptions.

IND Verification

IND should transition to In Sync status. It is done if bulk download is successful on ISE, if it is not the case IND will stuck in Out of Sync state.

Troubleshoot

Sync Status stuck in Out of Sync on IND

Transition from Out of Sync to In Sync happends if bulk download is successful on ISE. IND application.log below.

2019-05-22 22:09:06,902:INFO:qtp281049997-53444:PxgridConfigMgr:: Pxgrid Statistics Start:: Bulk Request : bulkReqAssetCount:2 add: false

2019-05-22 22:09:06,902:INFO:qtp281049997-53444:PxgridConfigMgr:: Pxgrid Statistics updated:: Bulk Request : AssetCount:2

2019-05-22 22:09:06,902:INFO:qtp281049997-53444:PxgridConfigMgr:: Sync Status transition to IN_SYNC

2019-05-22 22:09:06,918:INFO:qtp281049997-53444:PxGridServiceRestController:: getAssets Completed

It is critical for ISE to be able to resolve IND hostname which is shared by IND. Otherwise ISE can't do bulk download and IND will never transition to In Sync state. You can see the following exception in profiler.log if bulk download fails (WIN2012-AAA was not resolvable by ISE). To trigger bulk download you can uncheck and check the pxGrid probe on PSN.

2019-04-30 13:59:50,708 INFO [ProfilerINDSubscriberPoller-60-thread-1][] cisco.profiler.infrastructure.probemgr.INDSubscriber -::- New services are: []

2019-04-30 13:59:50,714 INFO [ProfilerINDSubscriberPoller-60-thread-1][] cisco.profiler.infrastructure.probemgr.INDSubscriber -::- NODENAME:ind

2019-04-30 13:59:50,714 INFO [ProfilerINDSubscriberPoller-60-thread-1][] cisco.profiler.infrastructure.probemgr.INDSubscriber -::- REQUEST BODY{"offset":"0","limit":"500"}

2019-04-30 13:59:50,716 ERROR [ProfilerINDSubscriberPoller-60-thread-1][] cisco.profiler.infrastructure.probemgr.INDSubscriber -::- Unable to get sync statusWIN2012-AAA:WIN2012-AAA

java.net.UnknownHostException: WIN2012-AAA

at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:184)

at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)

at java.net.Socket.connect(Socket.java:589)

at sun.security.ssl.SSLSocketImpl.connect(SSLSocketImpl.java:673)

at sun.security.ssl.BaseSSLSocketImpl.connect(BaseSSLSocketImpl.java:173)

at sun.net.NetworkClient.doConnect(NetworkClient.java:180)

at sun.net.www.http.HttpClient.openServer(HttpClient.java:463)

at sun.net.www.http.HttpClient.openServer(HttpClient.java:558)

at sun.net.www.protocol.https.HttpsClient.<init>(HttpsClient.java:264)

at sun.net.www.protocol.https.HttpsClient.New(HttpsClient.java:367)

at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.getNewHttpClient(AbstractDelegateHttpsURLConnection.java:191)

at sun.net.www.protocol.http.HttpURLConnection.plainConnect0(HttpURLConnection.java:1156)

at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:1050)

at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:177)

at sun.net.www.protocol.http.HttpURLConnection.getOutputStream0(HttpURLConnection.java:1334)

at sun.net.www.protocol.http.HttpURLConnection.getOutputStream(HttpURLConnection.java:1309)

at sun.net.www.protocol.https.HttpsURLConnectionImpl.getOutputStream(HttpsURLConnectionImpl.java:259)

at com.cisco.profiler.infrastructure.probemgr.INDSubscriber.getRequest(INDSubscriber.java:362)

at com.cisco.profiler.infrastructure.probemgr.INDSubscriber.isInSync(INDSubscriber.java:500)

at com.cisco.profiler.infrastructure.probemgr.INDSubscriber.populateIOTServiceList(INDSubscriber.java:462)

at com.cisco.profiler.infrastructure.probemgr.INDSubscriber$WorkerThread.run(INDSubscriber.java:441)

at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)

at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308)

at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180)

at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294)

at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)

at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)

at java.lang.Thread.run(Thread.java:748)

Not all endpoints are shared with ISE

Endpoints on IND are shared with ISE only if pxGrid Asset flag is Yes, MAC address should be also available, otherwise ISE has not enough data to create an endpoint.

assetTag and AssetGroup are not available on ISE

If assetTag only is not available it can be the case when wrong TAG type used. You need to use Security Tag (not Regular Tag) when you update the endpoint.

If both AssetTag and AssetGroup are not available, there can be multiple reasons behind

1. Profiling policy is not configured using Custom Attributes (See Step 1-3 in Configurations part of the document)

2. Due to defect CSCvn66106 EndPoint Attribute Filter: should be disabled. Otherwise it filters custom attributes from the classifier. The following log can be seen in profiler.log.

2019-05-22 11:20:11,796 DEBUG [PersistentWorker-8-18-thread-1][] com.cisco.profiler.im.EndPoint -:Profiling:- filtered custom attributes are:{assetGroup=Root, assetTag=SEC_TAG2, b310a420-78a5-11e9-a189-9ac8f4107843=Root, b8e73d50-78a5-11e9-a189-9ac8f4107843=SEC_TAG2}