GSA / fedramp-automation

FedRAMP Automation
https://www.fedramp.gov/using-the-fedramp-oscal-resources-and-templates/
Other
293 stars 90 forks source link

Check allowed values for user authentication #891

Open Rene2mt opened 2 weeks ago

Rene2mt commented 2 weeks ago

Constraint Task

As a maintainer of a digital authorization package, I need to clearly document in my SSP if leveraged FedRAMP authorized services require authentication, and also specify the authentication method, so that agencies that use my service understand potential risk around access to data in the external system. Checking to ensure I have provided complete user authentication method information will prevent pass back.

Intended Outcome

The constraint should give an ERROR if the conditions above are not met.

Syntax Type

This is a FedRAMP constraint in the FedRAMP-specific namespace.

Allowed Values

FedRAMP allowed values must be defined or verified.

Metapath(s) to Content

//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'])
]

Purpose of the OSCAL Content

Check to ensure that for each leveraged authorized system / service, the SSP clearly documents if authentication is required and specifies what the authentication method is.

Dependencies

No response

Acceptance Criteria

Other information

No response

brian-ruf commented 1 week ago

This property needed to be moved from //leveraged-authorization to //component of certain types as the property is required for both table 6.1 and 7.1, but only components are used for 7.1.

The metapath for the constraint also becomes far more complex as it can be written once to cover both 6.1 and 7.1 relevant components:

//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'])
]

Also, due to the broader use of the allowed values, the language needs to be tweaked as follows:

Please note the dropping of the word "user" in addition to the other revisions.

Gabeblis commented 1 week ago

@brian-ruf just to confirm, we're removing the //leveraged-authorization path altogether or are we adding the component paths on top of the leveraged-authorization path?

brian-ruf commented 1 week ago

@Gabeblis - correct!
For "user-authentication" (now "authentication-method") the ONLY path should be the one in the previous comment. That particular property is moving from //leveraged-authorization to //component, and then scoped down to only components that meet certain criteria.

Gabeblis commented 1 week ago

Perfect, thanks for the confirmation