Skip to content

Commit c3db2b2

Browse files
Add inter-boundary-component-has-direction constraint (GSA#930) (GSA#968)
1 parent 5d6710f commit c3db2b2

File tree

6 files changed

+59
-3
lines changed

6 files changed

+59
-3
lines changed

features/fedramp_extensions.feature

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,7 @@ Examples:
101101
| information-type-has-confidentiality-impact |
102102
| information-type-has-integrity-impact |
103103
| information-type-system |
104+
| inter-boundary-component-has-direction |
104105
| interconnection-direction |
105106
| interconnection-security |
106107
| inventory-item-allows-authenticated-scan |
@@ -312,6 +313,8 @@ Examples:
312313
| information-type-id-PASS.yaml |
313314
| information-type-system-FAIL.yaml |
314315
| information-type-system-PASS.yaml |
316+
| inter-boundary-component-has-direction-FAIL.yaml |
317+
| inter-boundary-component-has-direction-PASS.yaml |
315318
| interconnection-direction-FAIL.yaml |
316319
| interconnection-direction-PASS.yaml |
317320
| interconnection-security-FAIL.yaml |

src/content/rev5/examples/ssp/xml/fedramp-ssp-example.oscal.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1183,6 +1183,8 @@
11831183
<p>An external system to which this system shares an interconnection.</p>
11841184
</description>
11851185
<prop name="implementation-point" value="external"/>
1186+
<prop name="direction" value="incoming" ns="https://fedramp.gov/ns/oscal"/>
1187+
<prop name="direction" value="outgoing" ns="https://fedramp.gov/ns/oscal"/>
11861188
<prop name="connection-security" value="tls-1.3" ns="https://fedramp.gov/ns/oscal"/>
11871189
<prop name="asset-type" value="saas"/>
11881190
<prop ns="https://fedramp.gov/ns/oscal" name="authentication-method" value="yes">
@@ -1763,6 +1765,8 @@
17631765
</description>
17641766
<prop name="connection-security" value="tls-1.3" ns="https://fedramp.gov/ns/oscal"/>
17651767
<prop name="implementation-point" value="external"/>
1768+
<prop name="direction" value="incoming" ns="https://fedramp.gov/ns/oscal"/>
1769+
<prop name="direction" value="outgoing" ns="https://fedramp.gov/ns/oscal"/>
17661770
<prop ns="https://fedramp.gov/ns/oscal" name="authentication-method" value="yes">
17671771
<remarks>
17681772
<p>If 'yes', describe the authentication method.</p>
@@ -2176,6 +2180,8 @@
21762180
</description>
21772181
<prop name="connection-security" value="tls-1.3" ns="https://fedramp.gov/ns/oscal"/>
21782182
<prop name="implementation-point" value="external"/>
2183+
<prop name="direction" value="incoming" ns="https://fedramp.gov/ns/oscal"/>
2184+
<prop name="direction" value="outgoing" ns="https://fedramp.gov/ns/oscal"/>
21792185
<prop ns="https://fedramp.gov/ns/oscal" name="authentication-method" value="yes">
21802186
<remarks>
21812187
<p>If 'yes', describe the authentication method.</p>
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<system-security-plan xmlns="http://csrc.nist.gov/ns/oscal/1.0"
3+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4+
xsi:schemaLocation="http://csrc.nist.gov/ns/oscal/1.0 https://github.com/usnistgov/OSCAL/releases/download/v1.1.2/oscal_ssp_schema.xsd"
5+
uuid="12345678-1234-4321-8765-123456789012">
6+
7+
<system-implementation>
8+
9+
<component uuid="77777777-0000-4000-9000-000000000008" type="service">
10+
<title>Communication Service System</title>
11+
<description>
12+
<p>A network communication service system.</p>
13+
</description>
14+
<prop name="inherited-uuid" value="11111111-0000-4000-9001-000000000001"/>
15+
<prop name="implementation-point" value="internal"/>
16+
<prop name="direction" value="incoming" ns="https://fedramp.gov/ns/oscal"/>
17+
<prop name="direction" value="outgoing" ns="https://fedramp.gov/ns/oscal"/>
18+
<prop name="direction" value="outgoing" ns="https://fedramp.gov/ns/oscal"/>
19+
<prop name="nature-of-agreement" ns="https://fedramp.gov/ns/oscal" value="isa"/>
20+
<status state="operational"/>
21+
</component>
22+
23+
</system-implementation>
24+
25+
</system-security-plan>

src/validations/constraints/fedramp-external-constraints.xml

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -514,16 +514,22 @@
514514
<context>
515515
<metapath target="/system-security-plan/system-implementation"/>
516516
<constraints>
517+
<let var="inter-boundary-component" expression="component[(@type='service' and not(prop[@name='leveraged-authorization-uuid']) and prop[@name='implementation-point' and @value='external']) or (@type='interconnection') or (@type='service' and prop[@name='implementation-point' and @value='internal'] and prop[@name='direction']) or (@type='software' and prop[@name='asset-type' and @value='cli'] and prop[@name='direction'])]"/>
517518
<expect id="authentication-method-has-remarks" target="//component[(@type='system' and ./prop[@name='leveraged-authorization-uuid']) or (@type='service' and not(./prop[@name='leveraged-authorization-uuid']) and ./prop[@name='implementation-point' and @value='external']) or (@type='interconnection') or (@type='service' and ./prop[@name='implementation-point' and @value='internal'] and ./prop[@name='direction']) or (@type='software' and ./prop[@name='asset-type' and @value='cli'] and ./prop[@name='direction'])]" test="count(./prop[@name='authentication-method' and @ns='https://fedramp.gov/ns/oscal']) = count(./prop[@name='authentication-method' and @ns='https://fedramp.gov/ns/oscal']/remarks)" level="ERROR">
518519
<formal-name>Authentication Method Has Remarks</formal-name>
519520
<prop namespace="https://docs.oasis-open.org/sarif/sarif/v2.1.0" name="help-url" value="https://automate.fedramp.gov/documentation/ssp/4-ssp-template-to-oscal-mapping/#leveraged-fedramp-authorized-services"/>
520521
<message>Each authentication method in a FedRAMP SSP MUST have a remarks field.</message>
521522
</expect>
522-
<expect id="has-inventory-items" target="." test="count(inventory-item) >= 2" level="ERROR">
523+
<expect id="has-inventory-items" target="." test="count(inventory-item) >= 2" level="ERROR">
523524
<formal-name>System Implementation Has Inventory Items</formal-name>
524525
<prop namespace="https://docs.oasis-open.org/sarif/sarif/v2.1.0" name="help-url" value="https://automate.fedramp.gov/documentation/ssp/5-attachments/#system-inventory-approach"/>
525526
<message>A FedRAMP SSP system implementation section MUST have at least two inventory items.</message>
526-
</expect>
527+
</expect>
528+
<expect id="inter-boundary-component-has-direction" target="$inter-boundary-component" test="count(prop[@name='direction']) >= 1 and count(prop[@name='direction' and @value='incoming']) &lt;= 1 and count(prop[@name='direction' and @value='outgoing']) &lt;= 1" level="ERROR">
529+
<formal-name>Inter-Boundary Component Has Direction</formal-name>
530+
<prop namespace="https://docs.oasis-open.org/sarif/sarif/v2.1.0" name="help-url" value="https://automate.fedramp.gov/documentation/ssp/4-ssp-template-to-oscal-mapping/#external-systems-and-services-not-having-fedramp-authorization"/>
531+
<message>In an inter-boundary communication component, a FedRAMP SSP MUST have at least one direction property, with no more than one incoming and no more than one outgoing direction.</message>
532+
</expect>
527533
<expect id="leveraged-authorization-has-authorization-type" target="leveraged-authorization" test="count(prop[@name='authorization-type'][@ns='https://fedramp.gov/ns/oscal']) = 1" level="ERROR">
528534
<formal-name>Leveraged Authorization Has Authorization Type</formal-name>
529535
<prop namespace="https://docs.oasis-open.org/sarif/sarif/v2.1.0" name="help-url" value="https://automate.fedramp.gov/documentation/ssp/4-ssp-template-to-oscal-mapping/#leveraged-fedramp-authorized-services"/>
@@ -538,7 +544,7 @@
538544
<formal-name>Leveraged Authorization Has System Identifier</formal-name>
539545
<prop namespace="https://docs.oasis-open.org/sarif/sarif/v2.1.0" name="help-url" value="https://automate.fedramp.gov/documentation/ssp/4-ssp-template-to-oscal-mapping/#leveraged-fedramp-authorized-services"/>
540546
<message>A FedRAMP SSP MUST define exactly one system identifier for each leveraged authorization entry.</message>
541-
</expect>
547+
</expect>
542548
<expect id="network-component-has-connection-security-prop" target="//component[(@type='service' and not(./prop[@name='leveraged-authorization-uuid']) and ./prop[@name='implementation-point' and @value='external']) or (@type='interconnection') or (@type='service' and ./prop[@name='implementation-point' and @value='internal'] and ./prop[@name='direction']) or (@type='software' and ./prop[@name='asset-type' and @value='cli'] and ./prop[@name='direction'])]" test="count(./prop[@name='connection-security' and @ns='https://fedramp.gov/ns/oscal']) >= 1" level="ERROR">
543549
<formal-name>Network Component Has Connection Security Property</formal-name>
544550
<prop namespace="https://docs.oasis-open.org/sarif/sarif/v2.1.0" name="help-url" value="https://automate.fedramp.gov/documentation/ssp/4-ssp-template-to-oscal-mapping/#ports-protocols-and-services"/>
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
# Driver for the invalid inter-boundary-component-has-direction constraint unit test.
2+
test-case:
3+
name: The invalid inter-boundary-component-has-direction constraint unit test.
4+
description: Test that the FedRAMP SSP inter-boundary communication component has more than one incoming or outgoing direction.
5+
content: ../content/ssp-inter-boundary-component-has-direction-INVALID.xml
6+
expectations:
7+
- constraint-id: inter-boundary-component-has-direction
8+
result: fail
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
# Driver for the valid inter-boundary-component-has-direction constraint unit test.
2+
test-case:
3+
name: The valid inter-boundary-component-has-direction constraint unit test.
4+
description: Test that the FedRAMP SSP inter-boundary communication component has at least one direction property, with no more than one incoming and no more than one outgoing direction.
5+
content: ../../../content/rev5/examples/ssp/xml/fedramp-ssp-example.oscal.xml
6+
expectations:
7+
- constraint-id: inter-boundary-component-has-direction
8+
result: pass

0 commit comments

Comments
 (0)