diff --git a/out/diagrams/pages/builds.png b/out/diagrams/pages/builds.png index 2c31f3e..5764564 100644 Binary files a/out/diagrams/pages/builds.png and b/out/diagrams/pages/builds.png differ diff --git a/out/diagrams/pages/builds.svg b/out/diagrams/pages/builds.svg new file mode 100644 index 0000000..61eedac --- /dev/null +++ b/out/diagrams/pages/builds.svg @@ -0,0 +1 @@ +AWS Gov CloudGSA Authorized SaaS Connectioncloud.gov platformPages cloud.gov production spacecloud.gov space servicesCommits update to source code HTTPS/443Webhook request to start build HTTPS/443Proxy request HTTPS/443Creates site build record HTTPS/443Starts site build event HTTPS/443Listens for new site build event HTTPS/443Sends site build task request HTTPS/443Starts site build task HTTPS/443Publishes site files HTTPS/443Sends build status HTTPS/443Sends build logs HTTPS/443Legend👤 UserProcessDatabaseLoad Balancer / RouterPages Web Application *Node.jsPages Build Container Builds and publishes site *DockerPages Builder Starts a site build *Node.jsControl Plane *CloudFoundry TaskDatabase *AWS RDS PostgresKey/Value Store *AWS Elasticache RedisObject Store *AWS S3Customer Site Source Control *GitHub👤 UnPrivileged User *A Pages customer \ No newline at end of file diff --git a/out/diagrams/pages/cicd.png b/out/diagrams/pages/cicd.png index 5c5554b..1971c24 100644 Binary files a/out/diagrams/pages/cicd.png and b/out/diagrams/pages/cicd.png differ diff --git a/out/diagrams/pages/cicd.svg b/out/diagrams/pages/cicd.svg new file mode 100644 index 0000000..4e2a99e --- /dev/null +++ b/out/diagrams/pages/cicd.svg @@ -0,0 +1 @@ +AWS Gov CloudGSA Authorized SaaS Connectioncloud.gov toolingcloud.gov platformCI: Concourse CIPages cloud.gov production spaceMerges Pull Request HTTPS/443Polls Source Code For Update SSH/22Pulls Test Container ImageRuns TestsNoYesPulls Deploy Container ImageNoYesYesLegend👤 UserProcessDatabaseDecisionPages Web Application *Node.jsContainer Registry Store *AWS ECRTest Source Code *CI TaskAre tests passing?Deploy Pages App *CI Tasks✅ Notify Success Status *CI Tasks❌ Notify Failure Status *CI TasksDid Pages app deploy?Source Control *GitHub👤 Privileged User *A Pages Operator \ No newline at end of file diff --git a/out/diagrams/pages/public_flow.png b/out/diagrams/pages/public_flow.png index bc93672..b67f41d 100644 Binary files a/out/diagrams/pages/public_flow.png and b/out/diagrams/pages/public_flow.png differ diff --git a/out/diagrams/pages/public_flow.svg b/out/diagrams/pages/public_flow.svg new file mode 100644 index 0000000..7d8e95f --- /dev/null +++ b/out/diagrams/pages/public_flow.svg @@ -0,0 +1 @@ +AWS Gov CloudAWS Commercial Cloudcloud.gov platformPages cloud.gov production spacecloud.gov space servicescloud.gov platformViews Static Content HTTPS/443YesNoProxy Request HTTPS/443Proxy Request HTTPS/443Proxy Site Requests HTTPS/443Legend👤 UserProcessDatabaseDecisionLoad Balancer / Router AWS Application Load BalancerPages Proxy Application *NGINXObject Store *AWS S3CDN AWS CloudFront👤 Public User *A member of the publicIs request cached \ No newline at end of file diff --git a/out/diagrams/pages/web.png b/out/diagrams/pages/web.png index 16ae896..ffc4517 100644 Binary files a/out/diagrams/pages/web.png and b/out/diagrams/pages/web.png differ diff --git a/out/diagrams/pages/web.svg b/out/diagrams/pages/web.svg new file mode 100644 index 0000000..6c804c6 --- /dev/null +++ b/out/diagrams/pages/web.svg @@ -0,0 +1 @@ +AWS Gov CloudAWS Gov CloudGSA Authorized SaaS MonitoringGSA Authorized SaaS Connectioncloud.gov platformPages cloud.gov production spacecloud.gov space servicescloud.gov platformRequest Content HTTPS/443Authenticates HTTPS/443Request Content HTTPS/443Authenticates HTTPS/443Authorizes Oauth HTTPS/443Stores Oauth Token HTTPs/443Reports Usage HTTPS/4443Proxy Request HTTPS/443Read/Write Site Management Authenticated HTTPS/443Read/Write Site Notifications Authenticated HTTPS/443Request Send Email Authenticated HTTPS/443Sends Email SMTPLegend👤 UserProcessDatabaseSoftware as a service *SaaSPages Web Application *Node.jsPages Mailer*Node.jsSMTP Server *PostfixDatabase *AWS RDS PostgresKey/Value Store *AWS Elasticache RedisLoad Balancer / RouterAuthentication Provider *UAAAnalytics *DAPAuthorization Provider *GitHub👤 Privileged User *Pages Operator👤 Unprivileged User *Pages Cusomter \ No newline at end of file diff --git a/source/diagrams/pages/README.md b/source/diagrams/pages/README.md new file mode 100644 index 0000000..f482ca6 --- /dev/null +++ b/source/diagrams/pages/README.md @@ -0,0 +1,27 @@ +cg-diagrams Pages +================= + +Information about the cloud.gov Pages diagrams and how to create them. These diagrams are related to the system's different data and workflows using [mermaid diagrams](https://mermaid.js.org/). + +## How to + +The diagrams are written in mermaid and the diagram images are generated using the [mermaid cli](https://github.com/mermaid-js/mermaid-cli) + +### Generating diagram images + +#### Install the CLI + +`npm install -g @mermaid-js/mermaid-cli` + +#### Generate an image from a diagram + +`mmdc -i source/diagrams/pages/diagram-a.mmd -o out/diagrams/pages/diagram-a.png --width 2500` + +Options: +- `-i`: Input mermaid diagram +- `-o`: Output PNG image +- `--width`: Width of the out put *Note: Diagram width in output is 25000* + +#### Storing the diagram images + +All generated images should be stored in [out/diagrams/pages](../../../out/diagrams/pages/) and should be named the same as the corresponding mermaid diagram. diff --git a/source/diagrams/pages/builds.mmd b/source/diagrams/pages/builds.mmd new file mode 100644 index 0000000..7e6f379 --- /dev/null +++ b/source/diagrams/pages/builds.mmd @@ -0,0 +1,70 @@ +flowchart TB + %% Styles + classDef userStyle stroke:#167CC5,stroke-width:4px + classDef processStyle stroke:#bc0061,stroke-width:4px + classDef processSuccessStyle stroke:#bc0061,stroke-width:4px + classDef decisionStyle stroke:#ea8d02,stroke-width:4px + classDef saasStyle stroke:#f2ff07,stroke-width:4px + classDef dbStyle stroke:#010daf,stroke-width:4px + + %% Component Defintions + + %% Users + user["👤 UnPrivileged User *A Pages customer"]:::userStyle + + %% Processors + aws_load_balancer[Load Balancer / Router]:::processStyle + pages_app[Pages Web Application *Node.js]:::processStyle + pages_builder[Pages Builder Starts a site build *Node.js]:::processStyle + pages_build_container[Pages Build Container Builds and publishes site *Docker]:::processStyle + control_plane[Control Plane *CloudFoundry Task]:::processStyle + + %% SaaS + gh_source[Customer Site Source Control *GitHub]:::saasStyle + + %% Store + database[(Database *AWS RDS Postgres)]:::dbStyle + key_value_store[(Key/Value Store *AWS Elasticache Redis)]:::dbStyle + s3[(Object Store *AWS S3)]:::dbStyle + + %% Flow + user -- Commits update to source code HTTPS/443 --> gh_source + gh_source -- Webhook request to start build HTTPS/443 --> aws_load_balancer + aws_load_balancer -- Proxy request HTTPS/443 --> pages_app + pages_app -- Creates site build record HTTPS/443 --> database + pages_app -- Starts site build event HTTPS/443 --> key_value_store + pages_builder -- Listens for new site build event HTTPS/443 --> key_value_store + pages_builder -- Sends site build task request HTTPS/443 --> control_plane + control_plane -- Starts site build task HTTPS/443 --> pages_build_container + pages_build_container -- Publishes site files HTTPS/443 --> s3 + pages_build_container -- Sends build status HTTPS/443 --> pages_app + pages_build_container -- Sends build logs HTTPS/443 --> database + + %% Layout + subgraph GSA Authorized SaaS Connection + gh_source + end + + subgraph AWS Gov Cloud + aws_load_balancer + subgraph cloud.gov platform + subgraph Pages cloud.gov production space + pages_app + pages_build_container + pages_builder + control_plane + subgraph cloud.gov space services + database + key_value_store + s3 + end + end + end + end + + subgraph Legend + direction BT + legend_user["👤 User"]:::userStyle + legend_process[Process]:::processStyle + legend_db[(Database)]:::dbStyle + end diff --git a/source/diagrams/pages/builds.puml b/source/diagrams/pages/builds.puml deleted file mode 100644 index 2d901cd..0000000 --- a/source/diagrams/pages/builds.puml +++ /dev/null @@ -1,100 +0,0 @@ -@startuml builds -!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Container.puml -'https://github.com/plantuml-stdlib/C4-PlantUML - -title Customer Site Builds - -AddRelTag("TLS", $textColor="grey", $lineColor="green", $lineStyle=BoldLine()) - -Person(npu, "Nonprivileged User", "A cloud.gov Pages Customer") -'note "Auth: Token" as webhook - -Boundary(gsa, "Agency Authorized VCS") { - System_Ext(gh, "Customer Source Control", "e.g., Github") -} - -Boundary(gsa2, "GSA Authorized SaaS") { - System_Ext(nr, "Monitoring", "New Relic") -} - -Boundary(awsgov, "AWS GovCloud") { - Boundary(cloudgov, "cloud.gov") { - Container(core, "Pages Web", "Node JS") - Container(builder, "Pages Builder", "Node JS") - Container(build, "Pages Build Container", "Docker Image") - Boundary(cloudgovnetwork, "cloud.gov platform - network") { - System(elb, "Load Balancer / Router", "cloud.gov") - } - Boundary(cloudgovplat, "cloud.gov platform") { - System(cc, "Control Plane", "cloud.gov") - SystemDb(db, "Database", "AWS RDS Postgres") - SystemDb(redis, "Key/Value Store", "AWS Elasticache Redis") - SystemDb(s3, "Object Storage", "AWS S3") - } - } -} -Rel(core, nr, "reports telemetry", "HTTPS 443 (T)", $tags="TLS") -note on link - Auth: Token -end note - -Rel(npu, gh, "1. commits code modification", "HTTPS 443 (T)", $tags="TLS") -note on link - Auth: MFA -end note - -Rel(gh, elb, "2. sends webhook notification", "HTTPS 443 (T)", $tags="TLS") -note on link - Auth: Token -end note - -Rel(elb, core, "3. proxies request", "HTTPS 443 (T)", $tags="TLS") - -Rel(core, redis, "4. sends build message", "HTTPS 443 (T)", $tags="TLS") -note on link - Auth: Credentials -end note - -Rel(builder, redis, "5. requests build message", "HTTPS 443 (T)", $tags="TLS") -note on link - Auth: Credentials -end note - -Rel(builder, cc, "6. requests build", "HTTPS 443 (T)", $tags="TLS") -note on link - Auth: Credentials -end note - -Rel(cc, build, "7. starts build task", $tags="TLS") - -Rel(build, gh, "8. checks out code", "HTTPS 443 (T)", $tags="TLS") -note on link - Auth: Credentials -end note - -Rel(build, s3, "9a. sends build results", "HTTPS 443 (T)", $tags="TLS") -note on link - Auth: Credentials -end note - -Rel(build, db, "9b. sends build logs", "HTTPS 443 (T)", $tags="TLS") -Rel(build, core, "9c. updates status", "HTTPS 443 (T)", $tags="TLS") - -' Other flows -Rel(core, db, "reads/writes build metadata & configuration", "TCP * (T)", $tags="TLS") -note on link - Auth: Credentials/Network -end note - -Rel(core, redis, "reads/writes build notifications", "TCP * (T)", $tags="TLS") -note on link - Auth: Credentials -end note - -' Authentication annotations -'npu .. githubpagesauth -'githubpagesauth .. core -'gh . webhook -'webhook ... core -SHOW_LEGEND() -@enduml diff --git a/source/diagrams/pages/cicd.mmd b/source/diagrams/pages/cicd.mmd new file mode 100644 index 0000000..1e9b17b --- /dev/null +++ b/source/diagrams/pages/cicd.mmd @@ -0,0 +1,77 @@ +flowchart TB + %% Styles + classDef userStyle stroke:#167CC5,stroke-width:4px + classDef processStyle stroke:#bc0061,stroke-width:4px + classDef processSuccessStyle stroke:#bc0061,stroke-width:4px + classDef decisionStyle stroke:#ea8d02,stroke-width:4px + classDef saasStyle stroke:#f2ff07,stroke-width:4px + classDef dbStyle stroke:#010daf,stroke-width:4px + + %% Component Defintions + + %% Users + user["👤 Privileged User *A Pages Operator"]:::userStyle + + %% Processors + ci_test[Test Source Code *CI Task]:::processStyle + ci_deploy[Deploy Pages App *CI Tasks]:::processStyle + ci_notify_success["✅ Notify Success Status *CI Tasks"]:::processSuccessStyle + ci_notify_failure["❌ Notify Failure Status *CI Tasks"]:::processStyle + pages_app[Pages Web Application *Node.js]:::processStyle + + %% Decisions + did_tests_pass{Are tests passing?}:::decisionStyle + did_deploy{Did Pages app deploy?}:::decisionStyle + + %% SaaS + gh_source[Source Control *GitHub]:::saasStyle + + %% Store + container_registry[(Container Registry Store *AWS ECR)]:::processStyle + + %% Flow + user -- Merges Pull Request HTTPS/443 --> gh_source + ci_test <-- Polls Source Code For Update SSH/22 --> gh_source + ci_test <-- Pulls Test Container Image --> container_registry + ci_test -- Runs Tests --> did_tests_pass + did_tests_pass -- No --> ci_notify_failure + did_tests_pass -- Yes --> ci_deploy + ci_deploy <-- Pulls Deploy Container Image --> container_registry + ci_deploy --> did_deploy + did_deploy -- No --> ci_notify_failure + did_deploy -- Yes --> pages_app + did_deploy -- Yes --> ci_notify_success + ci_notify_success --> gh_source + ci_notify_failure --> gh_source + + %% Layout + subgraph GSA Authorized SaaS Connection + gh_source + end + + subgraph AWS Gov Cloud + subgraph cloud.gov tooling + subgraph CI: Concourse CI + ci_test + did_tests_pass + ci_deploy + ci_notify_success + ci_notify_failure + did_deploy + end + container_registry + end + subgraph cloud.gov platform + subgraph Pages cloud.gov production space + pages_app + end + end + end + + subgraph Legend + direction BT + legend_user["👤 User"]:::userStyle + legend_process[Process]:::processStyle + legend_db[(Database)]:::dbStyle + legend_decision{Decision}:::decisionStyle + end diff --git a/source/diagrams/pages/cicd.puml b/source/diagrams/pages/cicd.puml deleted file mode 100644 index 1cb8aeb..0000000 --- a/source/diagrams/pages/cicd.puml +++ /dev/null @@ -1,70 +0,0 @@ -@startuml cicd -!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Container.puml -'https://github.com/plantuml-stdlib/C4-PlantUML - -title Continuous Integration - -AddRelTag("TLS", $textColor="grey", $lineColor="green", $lineStyle=BoldLine()) -AddRelTag("TLS Optional", $textColor="grey", $lineColor="green", $lineStyle=DashedLine()) - -Boundary(aws, "AWS GovCloud") { - Boundary(cg, "cloud.gov") { - System(concourse, "CI", "Concourse") - Boundary(cgp, "cloud.gov platform") { - System(cp, "Control Plane", "cloud.gov") - Container(app, "Pages Application", "NodeJS/nginx/Docker", $descr="The target application") - } - } -} - -Boundary(gsa1, "GSA Authorized SaaS") { - System_Ext(gh, "Source Control", "Github") -} - -Boundary(gsa2, "GSA Authorized SaaS") { - System_Ext(dh, "Container Registry", "DockerHub") - System_Ext(cc, "Static Analysis", "Code Climate") -} - -Person(pu, "Privileged User", "A Pages Developer") -Rel(pu, gh, "1. merges pull requst", "HTTPS 443 (T)", $tags="TLS") -note on link - Auth: MFA -end note - -Rel(concourse, gh, "2. polls for changes", "HTTPS 443 (T)", $tags="TLS") -note on link - Auth: Token -end note - -Rel(concourse, concourse, "3. runs pipeline") - -Rel(concourse, cc, "4a sends analysis results", "HTTPS 443 (T)", $tags="TLS") -note on link - Auth: Token -end note - -Rel(concourse, dh, "4b. sends image", "HTTPS 443 (T)", $tags="TLS Optional") -note on link - Auth: Credentials -end note - -Rel(concourse, cp, "4c. sends source and manifest or image name", "HTTPS 443 (T)", $tags="TLS") -note on link - Auth: Credentials -end note - -Rel(concourse, gh, "4d. updates status", "HTTPS 443 (T)", $tags="TLS") -note on link - Auth: Token -end note - -Rel(cp, dh, "5a. fetches image", "HTTPS 443 (T)", $tags="TLS Optional") -note on link - Auth: Credentials -end note - -Rel(cp, app, "5b. deploys application", "internal", $tags="TLS") - -SHOW_LEGEND() -@enduml \ No newline at end of file diff --git a/source/diagrams/pages/public_flow.mmd b/source/diagrams/pages/public_flow.mmd new file mode 100644 index 0000000..05d6b6e --- /dev/null +++ b/source/diagrams/pages/public_flow.mmd @@ -0,0 +1,58 @@ +flowchart TB + %% Styles + classDef userStyle stroke:#167CC5,stroke-width:4px + classDef processStyle stroke:#bc0061,stroke-width:4px + classDef decisionStyle stroke:#ea8d02,stroke-width:4px + classDef dbStyle stroke:#010daf,stroke-width:4px + + %% Component Defintions + + %% Users + user["👤 Public User *A member of the public"]:::userStyle + + %% Processors + aws_cdn[CDN AWS CloudFront]:::processStyle + aws_load_balancer[Load Balancer / Router AWS Application Load Balancer]:::processStyle + pages_proxy[Pages Proxy Application *NGINX]:::processStyle + + %% Decisions + is_cached{Is request cached}:::decisionStyle + + %% Databases + s3[(Object Store *AWS S3)]:::dbStyle + + %% Flow + user -- Views Static Content HTTPS/443 --> is_cached + is_cached -- Yes --> aws_cdn + is_cached -- No --> aws_load_balancer + aws_cdn -- Proxy Request HTTPS/443 --> aws_load_balancer + aws_load_balancer -- Proxy Request HTTPS/443 --> pages_proxy + + pages_proxy -- Proxy Site Requests HTTPS/443 --> s3 + + %% Layout + subgraph AWS Commercial Cloud + subgraph cloud.gov platform + aws_cdn + end + end + + subgraph AWS Gov Cloud + subgraph cloud.gov platform + aws_load_balancer + subgraph Pages cloud.gov production space + pages_proxy + subgraph cloud.gov space services + s3 + end + end + end + end + + subgraph Legend + direction BT + legend_user["👤 User"]:::userStyle + legend_process[Process]:::processStyle + legend_db[(Database)]:::dbStyle + legend_decision{Decision}:::decisionStyle + end diff --git a/source/diagrams/pages/public_flow.puml b/source/diagrams/pages/public_flow.puml deleted file mode 100644 index a028c48..0000000 --- a/source/diagrams/pages/public_flow.puml +++ /dev/null @@ -1,42 +0,0 @@ -@startuml public_flow -!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Container.puml -'https://github.com/plantuml-stdlib/C4-PlantUML - -title Public Site - -AddRelTag("TLS", $textColor="grey", $lineColor="green", $lineStyle=BoldLine()) - -Person_Ext(public, "Public Viewer", "A member of the public") - -Boundary(awsgov, "AWS GovCloud") { - Boundary(cgp_gc, "cloud.gov Platform") { - SystemDb(s3, "Object Store", "AWS S3") - } -} - -Boundary(awscom, "AWS Commercial") { - Boundary(cg, "cloud.gov") { - Boundary(cgp_ew, "cloud.gov platform") { - System(cdn, "CDN", "AWS Cloudfront") - System(elb, "Load Balancer / Router", "cloud.gov") - } - Container(proxy, "Pages Proxy", "nginx") - } -} - -Rel(public, cdn, "1a. views static content", "HTTPS 443 (T)", $tags="TLS") -note on link - Custom Domains -end note -Rel(cdn, elb, "2. proxies requests", "HTTPS 443 (T)", $tags="TLS") - -Rel(public, elb, "1b. views static content", "HTTPS 443 (T)", $tags="TLS") -note on link - Preview Domains -end note -Rel(elb, proxy, "3. proxies requests", "HTTPS 443 (T)", $tags="TLS") - -Rel(proxy, s3, "4. proxies requests", "HTTPS 443 (T)", $tags="TLS") - -SHOW_LEGEND() -@enduml \ No newline at end of file diff --git a/source/diagrams/pages/web.mmd b/source/diagrams/pages/web.mmd new file mode 100644 index 0000000..1b65d88 --- /dev/null +++ b/source/diagrams/pages/web.mmd @@ -0,0 +1,84 @@ +flowchart TB + %% Styles + classDef userStyle stroke:#167CC5,stroke-width:4px + classDef processStyle stroke:#bc0061,stroke-width:4px + classDef saasStyle stroke:#f2ff07,stroke-width:4px + classDef dbStyle stroke:#010daf,stroke-width:4px + + %% Component Defintions + + %% Users + user_privleged["👤 Privileged User *Pages Operator"]:::userStyle + + user_unprivleged["👤 Unprivileged User *Pages Cusomter"]:::userStyle + + %% SaaS + gh_auth_provider[Authorization Provider *GitHub]:::saasStyle + dap[Analytics *DAP]:::saasStyle + + %% Processors + aws_load_balancer[Load Balancer / Router]:::processStyle + auth_provider[Authentication Provider *UAA]:::processStyle + pages_app[Pages Web Application *Node.js]:::processStyle + pages_mailer[Pages Mailer*Node.js]:::processStyle + smtp_server[SMTP Server *Postfix]:::processStyle + + %% Databases + database[(Database *AWS RDS Postgres)]:::dbStyle + key_value_store[(Key/Value Store *AWS Elasticache Redis)]:::dbStyle + + %% Flow + user_privleged -- Request Content HTTPS/443 --> aws_load_balancer + user_privleged -- Authenticates HTTPS/443 --> auth_provider + + user_unprivleged -- Request Content HTTPS/443 --> aws_load_balancer + user_unprivleged -- Authenticates HTTPS/443 --> auth_provider + user_unprivleged -- Authorizes Oauth HTTPS/443 --> gh_auth_provider + gh_auth_provider -- Stores Oauth Token HTTPs/443 --> database + user_unprivleged -- Reports Usage HTTPS/4443 --> dap + + aws_load_balancer -- Proxy Request HTTPS/443 --> pages_app + + pages_app -- Read/Write Site Management Authenticated HTTPS/443 --> database + pages_app -- Read/Write Site Notifications Authenticated HTTPS/443 --> key_value_store + pages_app -- Request Send Email Authenticated HTTPS/443 --> pages_mailer + + pages_mailer -- Sends Email SMTP --> smtp_server + + %% Layout + subgraph GSA Authorized SaaS Connection + gh_auth_provider + end + + subgraph GSA Authorized SaaS Monitoring + dap + end + + subgraph AWS Gov Cloud + subgraph cloud.gov platform + aws_load_balancer + auth_provider + end + end + + subgraph AWS Gov Cloud + subgraph cloud.gov platform + subgraph Pages cloud.gov production space + pages_app + pages_mailer + smtp_server + subgraph cloud.gov space services + database + key_value_store + end + end + end + end + + subgraph Legend + direction BT + legend_user["👤 User"]:::userStyle + legend_process[Process]:::processStyle + legend_db[(Database)]:::dbStyle + legend_saas[Software as a service *SaaS]:::saasStyle + end diff --git a/source/diagrams/pages/web.puml b/source/diagrams/pages/web.puml deleted file mode 100644 index 41260b5..0000000 --- a/source/diagrams/pages/web.puml +++ /dev/null @@ -1,68 +0,0 @@ -@startuml web -!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Container.puml -'https://github.com/plantuml-stdlib/C4-PlantUML - -title Web Application - -AddRelTag("TLS", $textColor="grey", $lineColor="green", $lineStyle=BoldLine()) - -Person(npu, "Nonprivileged User", "A Pages Customer") -Person(pu, "Privileged User", "A Pages Operator") - -Boundary(awsgov2, "AWS GovCloud") { - Boundary(cloudgov2, "cloud.gov platform") { - System(elb, "Load Balancer / Router", "cloud.gov") - System(uaa, "Authentication Provider", "UAA") - } -} - -Boundary(awsgov, "AWS GovCloud") { - Boundary(cloudgov, "cloud.gov") { - System(smtp, "SMTP Server", "postfix") - Container(web, "Pages Web", "Node JS/static") - Container(mailer, "Pages Mailer", "Node JS") - Boundary(cloudgovp, "cloud.gov platform") { - SystemDb(db, "Database", "AWS RDS Postgres") - SystemDb(redis, "Key/Value Store", "AWS Elasticache Redis") - } - } -} - -Boundary(gsa1, "GSA Authorized SaaS") { - System_Ext(gh, "Authorization Provider", "Github") -} - -Boundary(gsa2, "GSA Authorized SaaS") { - System_Ext(dap, "Analytics", "DAP") - System_Ext(newrelic, "Monitoring", "New Relic") -} - -Rel(web, mailer, "requests email send", "HTTPS 443 (T)", $tags="TLS") -Rel(mailer, smtp, "sends email", "SMTP (T)", $tags="TLS") -Rel(npu, uaa, "authenticates with", "HTTPS 443 (T)", $tags="TLS") -Rel(npu, gh, "authorizes with", "HTTPS 443 (T)", $tags="TLS") -Rel(pu, uaa, "authenticates with", "HTTPS 443 (T)", $tags="TLS") - -Rel(npu, elb, "1. requests content", "HTTPS 443 (T)", $tags="TLS") -Rel(pu, elb, "1. requests content", "HTTPS 443 (T)", $tags="TLS") -Rel(elb, web, "2. proxies request", "HTTPS 443 (T)", $tags="TLS") - -Rel(web, db, "3. reads/writes site metadata & configuration", "TCP * (T)", $tags="TLS") -note on link - Auth: Credentials/Network -end note - -Rel(web, redis, "reads/writes notifications/messages", "TCP * (T)", $tags="TLS") -note on link - Auth: Credentials -end note - -Rel(npu, dap, "reports usage", "HTTPS 443 (T)", $tags="TLS") - -Rel(web, newrelic, "reports metrics", "HTTPS 443 (T)", $tags="TLS") -note on link - Auth: Token -end note - -SHOW_LEGEND() -@enduml \ No newline at end of file