Security Controls
Classificationβ
For clarity the primary definition resource for classification in these standards is HISO 10029:2022 Health Information Security Framework (HISF). In HSIF the scope is defined as follows: "This framework covers the security of all health information that is collected and used within New Zealand; and wherever it is stored. All personal health information is treated as MEDICAL IN CONFIDENCE and given an equal level of protection unless otherwise classified."
Where there is NOT an appropriate representation in HSIF regarding classification the New Zealand Government Protective Security Requirements (PSR) guidance is used
Endorsementsβ
PSR classification guidelines include the use of Endorsements. As per HSIF the primary classification for information covered by these API standards is IN-CONFIDENCE with the endorsement MEDICAL.
API providers MUST use the correct endorsement, following the guidelines in PSR, when undertaking classification analysis.
π‘Depending on the classification of the information that is presented in the APIs and the Risk Framework applied, different access controls will need to be applied. This section provides a summary of the controls that SHOULD be implemented when protecting Health APIs. The five areas that MUST be considered are:
-
Confidentiality
-
Integrity
-
Availability
-
Threat Protection
-
Monitoring, Logging and Auditing
Using the Resource Type definition detailed in FHIR, the controls above will be mapped to the different resources:
Resource Type | Data Type | Classification |
---|---|---|
Anonymous Read Access | UNCLASSIFIED | |
Business | MEDICAL IN-CONFIDENCE | |
Individual | MEDICAL IN-CONFIDENCE | |
Patient | MEDICAL IN-CONFIDENCE |
The following controls are recommended by the FHIR specification and MUST be implemented by the API provider:
Resource Type | Control Required |
---|---|
Anonymous Read Access |
|
Business |
|
Individual |
|
Patient |
|
API Provider controls for all APIsβ
The following is a list of controls and their applicability for all API Providers:
-
MUST enforce access controls at the API provider edgeπ‘
- Throttling to address Distributed Denial of Service (DDoS) attacksπ‘
- Message analysis to block HTTP attacks; parameter attacks such as cross-site scripting (XSS), SQL injection, command injection and cross-site request forgery (XSRF)π‘
- MUST use short-lived Access Tokensπ‘
- SHOULD use JWT Access and Refresh Tokensπ‘
- The Authorisation Server MUST provide a Token Revocation endpointπ‘
- The Authorisation Server MUST provide a Token Introspection endpointπ‘
- Token Signing MUST use EdDSA or ECDSA when protecting sensitive informationπ‘
- Token Encryption MUST use RSA-OAEPπ‘
- Supported hashing algorithms MUST be applied as per the NZISMπ‘
-
All communications to or from an API MUST utilise Transport Layer Security (TLS) 1.3 or higher.π‘ Other versions of TLS and SSL SHOULD be disabled. π‘ This provides a recognised level of confidentiality that covers all communications between all components. Also see NZISM
- API consumer applications MUST validate TLS certificate chains when making requests to protected resources, including checking the Certificate Revocation List (CRL).π‘
Confidentiality and Integrityβ
Confidentiality and integrity cover the handling of request and response data, both in transit and at rest. The aim is to protect the payload content from unauthorised access (eavesdropping), manipulation or faking of content. An API request needs to be received intact by the API, with validation as to the source of the request. Untampered API responses need to be received by the consuming application, with confirmation that they are legitimately from the API.
Data Classification | Control |
---|---|
UNCLASSIFIED |
|
MEDICAL IN-CONFIDENCE |
|
The following table details the data classification application for API Security using OAuth 2.0 and OpenID Connect:
Data Classification | API Security Control (Grant Flows) |
---|---|
UNCLASSIFIED | |
MEDICAL IN-CONFIDENCE |
Grant Type | Control Required | Status |
---|---|---|
Client Credentials with Scopes | client_secret_post token endpoint authorisation SHOULD be applied π‘ | Supported β |
Implicit grant | openid scope in the authentication requestπ‘client_secret_post or client_secret_jwt or private_key_jwt token endpoint authorisation SHOULD be appliedπ‘response_type SHOULD be id_token tokenπ‘state parameter MUST be used in the authorisation request and the API consumer MUST validate it in the responseπ‘nonce parameter MUST be used in the authorisation request and the API consumer MUST validate it in the id_token π‘ | Deprecated β οΈ |
Authorisation Code grant with PKCE | openid scope in the authentication requestπ‘private_key_jwt token endpoint authorisation MUST be appliedπ‘response_type MUST be code id_token π‘state parameter MUST be used in the authorisation request and the API consumer MUST validate it in the responseπ‘nonce parameter MUST be used in the authorisation request and the API consumer MUST validate it in the id_token |