7033 Commits

Author SHA1 Message Date
dandds
abd03be806 Store and pull tenant creds from Key Vault.
The tenant ID should be hashed and used as the key for the JSON blob of
relevant creds for any given tenant. Azure CSP interface methods that
need to source creds should call the internal `_source_creds` method,
either with a `tenant_id` or no parameters. That method will source the
creds. If a tenant ID is provided, it will source them from the Key
Vault. If not provided, it will return the default creds for the app
registration in the home tenant.
2020-01-29 10:49:27 -05:00
dandds
a10d733fb7 Fix test and LGTM warnings.
- Fixes LGTM warnings for an unused import and equality comparisons to
  None in SQLAlchemy filters.
- Removes part of a unit test asserting that the claimed_until locking
  mechanism works correctly. If I recall correctly, this does not work
  in unit tests because the test takes place inside a transaction, and
  the database provider does evaluate the current time until the
  transaction is written.
2020-01-27 06:27:18 -05:00
dandds
ef8f92b678 Merge branch 'staging' into app-env-provisioning 2020-01-26 18:56:29 -05:00
dandds
37a5218a1d Split and barrel cloud module for merge. 2020-01-26 18:38:02 -05:00
dandds
49edd028a0
Merge pull request #1360 from dod-ccpo/azure-integration-cleanup
Azure Integration Cleanup
2020-01-26 17:24:54 -05:00
tomdds
bcd774ffe0 Fix wildcard import in azure cloud provider. 2020-01-26 16:11:53 -05:00
tomdds
5b0a523e92 Use more specific imports for cloud models and exceptions. 2020-01-26 15:52:55 -05:00
tomdds
466a575229 Move portfolio state machine helpers directly to model file to prevent import issues.
Having `get_stage_csp_class` in the csp module meant that any file that interacted with that import path would throw an error in a REPL. This will allow importing of the Azure and Mock providers for interactive dev.
2020-01-26 15:17:53 -05:00
tomdds
b28281d04e Break out cloud integration into smaller files. 2020-01-26 14:03:09 -05:00
tomdds
d02d47615e First step in breaking out cloud.py
Move cloud.py to a module init. Move policy with it. Update related unit tests. Also adds a patch to state machine test to prevent randomness in mock from failing test.
2020-01-26 14:03:09 -05:00
dandds
ff172b43b2 Fix some import errors.
There is an issue with circular imports because the
PortfolioStateMachine model imports some error classes from the cloud
module. The cloud module was importing some other models in turn, which
was causing the issue. Since we plan to pass all data as dataclass
payloads to the cloud interfacem, I removed the type hints that
referenced specific SQLAlchemy models and removed the imports.
2020-01-26 12:45:18 -05:00
dandds
8810a59e0a Orchestration for creating app management groups.
This adds:
- A Celery beat task for enqueuing application creation tasks
- A Celery task for creating the application
- Payload and Response dataclasses for creating management groups

It also does some incidental cleanup.
2020-01-26 12:23:33 -05:00
dandds
bfc0692063 Remove multiple job failure tables in favor of one.
We don't know yet how useful the job failue tables will be, and
maintaining multiple failure tables--one for every entity involved in
CSP provisioning--is burdensome. This collapses them all into a single
table that track the entity type (environment, portfolio, etc.) and the
entity ID. That way we can construct queries when needed to find task
results.
2020-01-25 15:50:01 -05:00
dandds
02438dc39b Query for applications that need to be provisioned.
Adds a method to the Applications domain class that can return a list of
UUIDs for applications that are ready to be provisioned. It requires
that:

- the associated portfolio and state machine have a state of COMPLETED
- the application not have been marked deleted
- the application not have an existing cloud_id
- the application does not have an existing claim on it
2020-01-25 14:30:17 -05:00
tomdds
f08d53d7a0 Transition all Cloud Interface Methods to use Dataclasses 2020-01-24 15:42:23 -05:00
tomdds
02ec54a310
Merge pull request #1317 from dod-ccpo/azure-custom-integration
First Pass Azure Tenant Creation Integration + Orchestration
2020-01-24 14:42:28 -05:00
tomdds
7e0fda67b0 Clean up unusued imports and variables 2020-01-24 13:52:41 -05:00
tomdds
b9206ed7be Some more LGTM fixes 2020-01-24 13:35:46 -05:00
tomdds
35eea8e31c
Merge branch 'staging' into azure-custom-integration 2020-01-24 11:16:11 -05:00
tomdds
e9d03ec68b Fix some LGTM errors and start sketching in credential update functionality 2020-01-24 11:15:35 -05:00
tomdds
910920af44 Formatting fixes 2020-01-24 11:03:38 -05:00
tomdds
ea040a914e Properly report initial clin information
Includes fixed up state machine test as well as adds some missing dependencies
2020-01-24 11:01:53 -05:00
dandds
272d492af6
Merge pull request #1350 from robgil-dds/170808212-storage-private-endpoint
Service Endpoints
2020-01-24 10:24:23 -05:00
Rob Gil
76465e978a Remove k8s test tf 2020-01-24 07:36:24 -05:00
Rob Gil
7b2523254d Adds Dans home ip 2020-01-24 07:36:02 -05:00
Rob Gil
daa07f8631 Removes unnecessary locals in the bucket module 2020-01-23 20:26:27 -05:00
Rob Gil
e0d59eb166 Finally fixes subnet list output
This finally fixes the output coming from the vpc module so that it
returns a full list of subnets. Now they can be referenced just like the
redis module is using in this commit.
2020-01-23 20:22:53 -05:00
leigh-mil
204bf49ff4
Merge pull request #1352 from dod-ccpo/add-subscription-to-env
Add subscription to env
2020-01-23 20:20:58 -05:00
Rob Gil
3f5bbf2c5e Cleans out comments 2020-01-23 19:58:06 -05:00
Rob Gil
9f0904c201 Adds dedicated redis subnet 2020-01-23 19:57:45 -05:00
Rob Gil
0f5f5bd926 Converts redis to use service_endpoints
This is still a WIP.
2020-01-23 19:16:00 -05:00
Rob Gil
38ce1ef2b2 Adds list of users for access to storage and more service endpoints
This sets up the rest of the service endpoints on the subnets. It also
adds a variable map specifically to grant IP access to the storage
buckets. This new variable map is necessary since the azure storage ip
rules do not accept /32 CIDR ranges. The rest of the services do support
cidr ranges.
2020-01-23 18:41:29 -05:00
leigh-mil
1bad32bcdb Add success flash message 2020-01-23 16:44:27 -05:00
leigh-mil
59327d4cea Styling for environment edit form 2020-01-23 16:44:07 -05:00
leigh-mil
0fcd5a6471 Move text into translations file and fix formatting to make file more readable 2020-01-23 16:44:07 -05:00
leigh-mil
1054457048 Button for adding a subscription 2020-01-23 16:44:07 -05:00
leigh-mil
ec56d8e38a Properly display environment role on application index page 2020-01-23 16:44:07 -05:00
leigh-mil
31b7e2f589 Create route and domain method for creating a subscription 2020-01-23 16:44:07 -05:00
dandds
1c53ceef00
Merge pull request #1337 from dod-ccpo/apply-session-limit
Forcibly destroy existing session on logout.
2020-01-23 16:04:43 -05:00
Rob Gil
536eccdb90 Container registry private networking and bucket cidr range fix 2020-01-23 13:13:56 -05:00
Rob Gil
dab6cdb7dc Locks down keyvaults to subnets and administrator ip addresses 2020-01-23 11:02:12 -05:00
Rob Gil
c31d68a18c Makes client vpn cidr range configurable 2020-01-23 10:50:16 -05:00
dandds
944c5d3c9f Forcibly destroy existing session on logout.
To comply with security guidelines, we need to destroy the session when
a user logs out. This means that the session's key in the Redis cache
needs to be deleted. Flask expects to _always_ have a session object. If
the current session object does not exist in the Redis cache, Flask will
reserialize and store it at the end of the request. In order for
session deletion to work, we need to delete the key for the existing
session and then replace the session object with a new, empty one.

This also updates the SessionLimiter class so that the session prefix is
configurable.
2020-01-23 10:31:20 -05:00
dandds
0fa4fd2304 Limit concurrent session by default for deployed sites.
To meet ATO requirements, a user should not be able to have concurrent
logins.
2020-01-23 10:29:37 -05:00
tomdds
81054b2ff0 Fix Enum Migration to properly deal with constraint changes
Since we're using non-native enums for our model, alembic has some issues knowing what the previous "type" actually was, and not specifying it correctly causes a bad constraint.
2020-01-23 10:17:07 -05:00
597ea32e42 portfolio provision process. add logging, __repr___ method, fix broken tests 2020-01-23 10:14:22 -05:00
Rob Gil
48482785ac Adds IP whitelisting to storage buckets 2020-01-23 10:02:31 -05:00
leigh-mil
6f2454ae5f
Merge pull request #1342 from dod-ccpo/route-validation
Validation on route parameters
2020-01-22 20:06:03 -05:00
Rob Gil
d22357e609 Adds step to manually configure MFA in AD 2020-01-22 19:37:04 -05:00
Rob Gil
635ccb0fd3 Fixes postgres character collation 2020-01-22 19:36:33 -05:00