@@ -1,109 +0,0 @@
|
||||
# Toward SOC 2
|
||||
|
||||
## Not everything is mandatory
|
||||
|
||||
You know better than anyone (including the auditor) what is best for your
|
||||
company. You might have good reasons for performing or not a task as every
|
||||
company is unique.
|
||||
|
||||
To help you evaluate the importance of each tasks you will run into, they are
|
||||
labelled with three levels:
|
||||
|
||||
- **Mandatory** – The essential and fundamental elements. If you don’t have
|
||||
those, your auditor or customer will ask questions, you better justify it.
|
||||
- **Optional** – Your auditor or customer might ask questions if any of those
|
||||
elements are necessary to mitigate a risk you have.
|
||||
|
||||
<details>
|
||||
🗣
|
||||
|
||||
A good example is penetration testing.
|
||||
|
||||
- Penetration tests are expensive, but they can be a good investment, especially if you are running into a prospect requiring it
|
||||
- However they probably wont make sense if you are at the MVP stage and you are gonna trash and rebuild your product in a few month
|
||||
</details>
|
||||
|
||||
- **Advanced** – They show a great commitment toward security. Unless it is the
|
||||
only way to mitigate a risk very specific to your company, you won’t be asked
|
||||
about it.
|
||||
|
||||
## What’s next ?
|
||||
|
||||
We have regrouped what you need to do by different thematic in order to setup
|
||||
the proper foundations for your company to get SOC-2:
|
||||
|
||||
<details>
|
||||
|
||||
**Pro tip:** Setup screenshot to clipboard You will have to take quite a lot of
|
||||
screenshot until we automate most of it. We recommend that you setup a
|
||||
screenshot to clipboard so you can just take a screenshot and paste-it saving
|
||||
you ton of time. On mac:
|
||||
|
||||
- Use **CMD + SHIFT + 5** to enter screenshot mode
|
||||
- Click options, to change “save to” to “clipboard”
|
||||
- Now you can use **CMD + SHIFT + 3** to take a screenshot to clipboard
|
||||
- And paste it in the right place with **CMD + V**
|
||||
|
||||
</details>
|
||||
|
||||
### Physical assets
|
||||
|
||||
Protect your physical environment to prevent data leaks or outages from
|
||||
unauthorized access.
|
||||
|
||||
- [Secure your offices and internet access](physical/facilities/README.md)
|
||||
- [Manage your computers](physical/hardware/README.md)
|
||||
|
||||
### Employees
|
||||
|
||||
Your team is your first line of defense—educate, empower, and secure them.
|
||||
|
||||
- [Set up your employees for success](personnel/lifecycle/README.md)
|
||||
- [Secure your emails](personnel/comms/README.md)
|
||||
- [Configure your system access](personnel/access/README.md)
|
||||
|
||||
### Core assets
|
||||
|
||||
These are the heart of your company—prioritize their security.
|
||||
|
||||
- [Secure your codebase](core/src/README.md)
|
||||
- [Secure your infrastructure](core/infra/README.md)
|
||||
- [Protect your network](core/network/README.md)
|
||||
- [Safeguard your data](core/data/README.md)
|
||||
|
||||
### Alert & act
|
||||
|
||||
Be proactive and prepared—track activity and respond quickly to issues.
|
||||
|
||||
- [Log collection and monitoring](operations/monitoring/README.md)
|
||||
- [Prepare for incidents](operations/incidents/README.md)
|
||||
|
||||
### Vendors
|
||||
|
||||
Keep your partnerships secure by managing third-party risks.
|
||||
|
||||
### Transparency
|
||||
|
||||
SOC 2 is about showing how you operate—document and share your processes.
|
||||
|
||||
- [Have a security page](TRA.001_have_a_security_page.md)
|
||||
- [Clearly explain your services](transparency/TRA.002_clearly_explain_your_services.md)
|
||||
- [External support available](TRA.003_external_support_available.md)
|
||||
|
||||
### Review and keep things up to date
|
||||
|
||||
#### Why does it matter?
|
||||
|
||||
Your company changes over time, and so should your security posture.
|
||||
|
||||
#### How can I proceed?
|
||||
|
||||
Some things don’t need review (eg: MFA is enabled), but your infrastructure and
|
||||
your employee are changing.
|
||||
|
||||
⇒ You need to make sure people and digital asset with access are the one working
|
||||
today in/with your company.
|
||||
|
||||
- [Remove unauthorized assets](core/infra/COR.INF.007_asset_decommissioning.md)
|
||||
- [Conduct an access reviews](personnel/access/PER.ACC.006_periodic_access_review.md)
|
||||
- [Test your disaster recovery plan](operations/incidents/OPS.INC.003_drp_testing.md)
|
||||
@@ -1,50 +0,0 @@
|
||||
---
|
||||
id: "COR.DAT.001"
|
||||
category: "core/data"
|
||||
revision-version: 1
|
||||
revision-date: "2024-01-14"
|
||||
estimate-time: "30m"
|
||||
necessity: "mandatory"
|
||||
frameworks:
|
||||
- name: "soc2"
|
||||
sections: ["CC7.5", "CC9.1"]
|
||||
---
|
||||
|
||||
# Automated backup
|
||||
|
||||
## Purpose
|
||||
|
||||
Automated backups ensure that your data - one of your company’s most important
|
||||
assets - is regularly and securely saved, reducing the risk of data loss. The
|
||||
back-up keep it safe and available, the automated and regular allows for a
|
||||
restoration just before any disruption, minimizing loss.
|
||||
|
||||
## Implementation
|
||||
|
||||
### Google Cloud Platform
|
||||
|
||||
- When creating an instance:
|
||||
1. **Google Cloud Console**, go to the **Backups** section.
|
||||
2. Enable **Automated Backups**.
|
||||
3. Set a **Backup Window** to specify when daily backups should occur
|
||||
(especially during off-peak hours).
|
||||
- On existing instance:
|
||||
1. In **Google Cloud Console**, navigate to **SQL** > **Instances**.
|
||||
2. Select your instance and go to **Edit**.
|
||||
3. Scroll down to **Backups** and check the **Automated Backups** box.
|
||||
4. Set a **Backup Window** and **Backup Retention** settings (e.g., how many
|
||||
days’ worth of backups to retain).
|
||||
- Enable Point-in-Time Recovery
|
||||
1. Go to **Cloud SQL** in the **Google Cloud Console** and select the **SQL
|
||||
instance** you want to enable PITR for.
|
||||
2. Click on **Edit** at the top of the instance details page.
|
||||
3. Scroll to the **Backups** section.
|
||||
4. Ensure **Automated Backups** is enabled (PITR depends on automatic backups)
|
||||
and enable **Point-in-Time Recovery.**
|
||||
5. Set a **backup retention period** that suits your needs. PITR allows
|
||||
recovery to any point within this retention period.
|
||||
6. Scroll down and click **Save** to apply your changes.
|
||||
|
||||
## Evidence
|
||||
|
||||
- Screenshot of back-up for your database.
|
||||
@@ -1,36 +0,0 @@
|
||||
---
|
||||
id: "COR.DAT.002"
|
||||
category: "core/data"
|
||||
revision-version: 1
|
||||
revision-date: "2024-01-14"
|
||||
estimate-time: "30m"
|
||||
necessity: "mandatory"
|
||||
frameworks:
|
||||
- name: "soc2"
|
||||
sections: ["CC2.1", "CC2.2"]
|
||||
---
|
||||
|
||||
# Help the auditor with a data-flow diagram
|
||||
|
||||
## Purpose
|
||||
|
||||
The auditor doesn’t know your company and your systems. Providing him with a
|
||||
diagram that show all account data accross your systems & networks will enable
|
||||
him/her to understand your challenges faster and also to better evaluate your
|
||||
tradeoffs (when needed). It will also help you be 100% clear on how you process
|
||||
your data, and help with onboarding.
|
||||
|
||||
## Implementation
|
||||
|
||||
Create a diagram that captures all systems and networks handling data in your
|
||||
environment.
|
||||
|
||||
On this diagram, map out data flows:
|
||||
|
||||
- entry and exit points
|
||||
- processing steps
|
||||
- storage locations
|
||||
|
||||
## Evidence
|
||||
|
||||
- Data flow diagram
|
||||
@@ -1,35 +0,0 @@
|
||||
---
|
||||
id: "COR.DAT.003"
|
||||
category: "core/data"
|
||||
revision-version: 1
|
||||
revision-date: "2024-01-14"
|
||||
estimate-time: "15m"
|
||||
necessity: "mandatory"
|
||||
frameworks:
|
||||
- name: "soc2"
|
||||
sections: ["CC6.1", "CC6.6", "CC6.7"]
|
||||
---
|
||||
|
||||
# Encrypt your data storage
|
||||
|
||||
## Purpose
|
||||
|
||||
By encrypting data, you ensure that loss or theft of a device won’t result in a
|
||||
data breach. It also protects sensitive information from unauthorized access.
|
||||
|
||||
## Implementation
|
||||
|
||||
You need to ensure that all sensitive data stored is encrypted:
|
||||
|
||||
⇒ Cloudflare R2 buckets are encrypted (with AES-256) at rest by default ✅
|
||||
|
||||
⇒ Google Cloud SQL data is encrypted (with AES-256) at rest by default ✅
|
||||
|
||||
⇒ GCP buckets are encrypted (with AES-256) at rest by default ✅
|
||||
|
||||
If you have any other data storage, you need to make sure they are encrypted:
|
||||
|
||||
## Evidence
|
||||
|
||||
- All good if your data at rest is only on GCP & Cloudflare, else a screenshot
|
||||
of your encrypted database
|
||||
@@ -1,56 +0,0 @@
|
||||
---
|
||||
id: "COR.DAT.004"
|
||||
category: "core/data"
|
||||
revision-version: 1
|
||||
revision-date: "2024-01-14"
|
||||
estimate-time: "15m"
|
||||
necessity: "optional"
|
||||
frameworks:
|
||||
- name: "soc2"
|
||||
sections: ["CC6.1", "CC6.6", "CC6.7"]
|
||||
---
|
||||
|
||||
# Encrypt your data in transit
|
||||
|
||||
## Purpose
|
||||
|
||||
Data sent over networks can be intercepted and read - the encryption ensure it
|
||||
won’t be intelligible. It secure it from potential threats.
|
||||
|
||||
## Implementation
|
||||
|
||||
If you don’t have your own network or are not using FTP (if you do, ping
|
||||
Antoine), you only need to focus on web traffic.
|
||||
|
||||
It means:
|
||||
|
||||
GCP load balancers have TLS by defaults ✅
|
||||
|
||||
### Configure Cloudflare
|
||||
|
||||
- Activate DNSSEC
|
||||
1. **Log into Cloudflare** and select your domain.
|
||||
2. Go to the **DNS** tab, scroll to **DNSSEC**, and click **Enable DNSSEC**.
|
||||
3. **Copy the DS record** provided by Cloudflare.
|
||||
4. Go to your **domain registrar**, and paste the DS record in the DNSSEC
|
||||
settings.
|
||||
5. **Verify** back in Cloudflare; DNSSEC will show "Active" once propagation
|
||||
is complete.
|
||||
- Ensure you have at least TLS version 1.2 with 1.3 on your zones
|
||||
1. **Log into Cloudflare** and select your domain.
|
||||
2. Go to **SSL/TLS** > **Edge Certificates**.
|
||||
3. Set **Minimum TLS Version** to **1.2**.
|
||||
4. Ensure **TLS 1.3** is enabled.
|
||||
- Require a full or strict encryption
|
||||
1. **Log into Cloudflare** and select your domain.
|
||||
2. Go to **SSL/TLS** in the left-hand menu.
|
||||
3. Under **SSL/TLS Encryption Mode**, select **Full** or **Full (Strict)**.
|
||||
- **Full**: Encrypts end-to-end, but does not validate the origin certificate.
|
||||
- **Full (Strict)**: Encrypts end-to-end and validates the origin certificate.
|
||||
|
||||
Cloudflare ensure HTTPS where possible & R2 bucket data is encrypted in transit.
|
||||
✅
|
||||
|
||||
## Evidence
|
||||
|
||||
- Screenshot of your Cloudflare configuration
|
||||
@@ -1,42 +0,0 @@
|
||||
---
|
||||
id: "COR.DAT.005"
|
||||
category: "core/data"
|
||||
revision-version: 1
|
||||
revision-date: "2024-01-14"
|
||||
estimate-time: "15m"
|
||||
necessity: "mandatory"
|
||||
frameworks:
|
||||
- name: "soc2"
|
||||
sections: ["CC2.1", "CC6.1", "CC9.2"]
|
||||
---
|
||||
|
||||
# Data inventory
|
||||
|
||||
## Purpose
|
||||
|
||||
Having an accurate and up-to-date inventory of all your data assets (databases,
|
||||
cloud storage or even file shares) enables you to be exhaustive in how you treat
|
||||
your data safety.
|
||||
|
||||
## Implementation
|
||||
|
||||
Complete the following matrix - be sure to have all data assets across your
|
||||
company.
|
||||
|
||||
| **Location** | **Description** | **Owner** | **Sensitivity\*** | **Retention period** | **Backup frequency** |
|
||||
| ------------ | ------------------------ | --------- | ----------------- | -------------------- | -------------------- |
|
||||
| _BigQuery_ | _Access log to prod API_ | _Antoine_ | _confidential_ | _1 year_ | _daily_ |
|
||||
| | | | | | |
|
||||
|
||||
\*Sensitivity:
|
||||
|
||||
- Public: Intended for public dissemination (e.g., pricing information).
|
||||
- Confidential: Sensitive to business operations or personal information (e.g.,
|
||||
customer names).
|
||||
- Secret: Would severely harm the business if breached (e.g., database
|
||||
credentials).
|
||||
|
||||
## Evidence
|
||||
|
||||
- If you want to use something else than this template above, just provide the
|
||||
link to the matrix you implemented on your side (or a copy)
|
||||
@@ -1,21 +0,0 @@
|
||||
# Safeguard your data
|
||||
|
||||
Your data is one of your company most valuable asset - you must keep it safe
|
||||
|
||||
## Why does it matter?
|
||||
|
||||
It minimizes the risk of unauthorized access, data breaches, and loss. By
|
||||
implementing data security measures, you demonstrates a commitment to protecting
|
||||
client information.
|
||||
|
||||
## How can I proceed?
|
||||
|
||||
Implement measures to protect data from unauthorized access and set up processes
|
||||
to regularly secure and monitor its location.
|
||||
|
||||
## Mitigations
|
||||
|
||||
- [Automated backup](COR.DAT.001_automated_backup.md)
|
||||
- [Help the auditor with a data-flow diagram](COR.DAT.002_data_flow_diagram.md)
|
||||
- [Encrypt your data storage](COR.DAT.003_data_at_rest.md)
|
||||
- [Encrypt your data in transit](COR.DAT.004_tls.md)
|
||||
@@ -1,53 +0,0 @@
|
||||
---
|
||||
id: "COR.INF.001"
|
||||
category: "core/infra"
|
||||
revision-version: 1
|
||||
revision-date: "2024-01-14"
|
||||
estimate-time: "1h"
|
||||
necessity: "mandatory"
|
||||
frameworks:
|
||||
- name: "soc2"
|
||||
sections: ["CC2.1", "CC4.1"]
|
||||
---
|
||||
|
||||
# List of your Assets
|
||||
|
||||
## Purpose
|
||||
|
||||
The assets that are storing or processing data are potential vulnerabilities
|
||||
that could be exploited. ⇒ You need to know which assets your company has in
|
||||
order to be able to properly manage and secure them.
|
||||
|
||||
## Implementation
|
||||
|
||||
If you don’t have one, create an inventory of all your assets that have the
|
||||
potential to store or process data. This inventory should include:
|
||||
|
||||
- description of the device
|
||||
- location
|
||||
- owner
|
||||
- operating status
|
||||
|
||||
### Google Cloud Platform
|
||||
|
||||
GCP Asset inventory can fulfil this for you if you implement it with systematic
|
||||
tracking and monitoring:
|
||||
|
||||
1. Go to the **GCP console** and enable **Cloud Asset Inventory API**
|
||||
2. Navigate to **API & Services** section, and enable **Cloud Asset API** for
|
||||
the relevant projects
|
||||
3. Identify which assets you want to monitor. You should include (if relevant):
|
||||
1. Compute instances (e.g., VMs)
|
||||
2. Storage (e.g., Cloud Storage Buckets)
|
||||
3. Networking components (e.g., firewalls)
|
||||
4. IAM policies and permissions
|
||||
5. Encryption keys (Cloud KMS)
|
||||
6. Logging (Cloud Audit Logs)
|
||||
4. Set up **automatic collection** of assets using **GCP Cloud Scheduler** or
|
||||
**GCP Cloud Functions** to regularly query and capture inventory snapshots
|
||||
(that way you can maintain a record of changes) OR use glcoud commands/API
|
||||
calls: `gcloud asset search-all-resources --scope=projects/your-project-id`
|
||||
|
||||
## Evidence
|
||||
|
||||
- Screenshot of your GCP asset inventory list
|
||||
@@ -1,190 +0,0 @@
|
||||
---
|
||||
id: "COR.INF.002"
|
||||
category: "core/infra"
|
||||
revision-version: 1
|
||||
revision-date: "2024-01-08"
|
||||
estimate-time: "1h"
|
||||
necessity: "mandatory"
|
||||
frameworks:
|
||||
- name: "soc2"
|
||||
sections: ["CC4.1", "CC6.8", "CC7.1"]
|
||||
---
|
||||
|
||||
# Scan for security updates
|
||||
|
||||
## Purpose
|
||||
|
||||
An automated security scanning software on your infrastructure components
|
||||
enables you to fix potential vulnerabilities as soon as they are uncovered.
|
||||
|
||||
## Implementation
|
||||
|
||||
### 1/2 - Enable GCP security
|
||||
|
||||
1. Log in to your **Google Cloud Platform** account and navigate to the
|
||||
**Security Command Center**.
|
||||
2. Click **Enable** to activate the Security Command Center for your project or
|
||||
organization.
|
||||
3. If other members of your team need access, go to **IAM & Admin** > **IAM**
|
||||
and assign to them the appropriate roles (**Security Center Admin** or
|
||||
**Viewer**)
|
||||
4. In the **Security Command Center dashboard**, look for **Security sources**
|
||||
and click **Configure** or **Manage Sources**:
|
||||
- **Asset Inventory**: Enables continuous tracking of assets within your GCP
|
||||
project or organization.
|
||||
- **Security Health Analytics**: Automatically scans your resources for
|
||||
common vulnerabilities and misconfigurations.
|
||||
- **Event Threat Detection**: Monitors your logs for suspicious activity and
|
||||
potential threats.
|
||||
- **Web Security Scanner**: Scans your public-facing web applications for
|
||||
known vulnerabilities.
|
||||
5. For each service you want to enable, click on it and follow the prompts to
|
||||
activate it. Configure any necessary settings, such as defining which
|
||||
resources should be scanned or monitored.
|
||||
6. Integrate with other GCP services, such as **Cloud Logging** and **Cloud
|
||||
Monitoring,** to collect detailed logs and metrics.
|
||||
7. Save to update your settings. Verify that each service is active on the
|
||||
Security Sources page.
|
||||
|
||||
### 2/3 - Enable Artifact registry
|
||||
|
||||
<aside>
|
||||
ℹ️
|
||||
|
||||
If you are already using Artifact Registry, make sure **Continuous scanning** is
|
||||
enabled
|
||||
|
||||
</aside>
|
||||
|
||||
1. Log in to your **Google Cloud Platform** account and navigate to **Artifact
|
||||
Registry** under **Storage**.
|
||||
2. Click **Enable API**
|
||||
3. If other team members need access, go to **IAM & Admin** > **IAM** and assign
|
||||
them appropriate roles:
|
||||
- **Artifact Registry Admin**: Full access to manage repositories and
|
||||
artifacts.
|
||||
- **Artifact Registry Writer**: Permission to push artifacts to repositories.
|
||||
- **Artifact Registry Reader**: Read-only access to repositories.
|
||||
4. In **Artifact Registry**, click **Create Repository** and configure the
|
||||
repository:
|
||||
- **Name**: Set a name for your repository.
|
||||
- **Location**: Choose a region or multi-region where the artifacts will be
|
||||
stored.
|
||||
- **Format**: Select the artifact type (e.g., Docker, npm, Maven).
|
||||
- Enable **Continuous Scanning** to automatically scan for known
|
||||
vulnerabilities in container images.
|
||||
5. Click **Create**
|
||||
6. For Docker images, run the following command to configure Docker
|
||||
authentication with `gcloud`: (For other formats like **npm** or **Maven**,
|
||||
follow the instructions in the **Setup instructions** section of your
|
||||
repository).
|
||||
|
||||
```bash
|
||||
gcloud auth configure-docker
|
||||
```
|
||||
|
||||
7. Push artifacts to your repository:
|
||||
- For Docker:
|
||||
```bash
|
||||
docker tag IMAGE_NAME LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY_NAME/IMAGE_NAME
|
||||
docker push LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY_NAME/IMAGE_NAME
|
||||
```
|
||||
- For other formats, use the respective package manager (e.g., `npm publish`,
|
||||
`mvn deploy`).
|
||||
8. Verify your repository by navigating to **Artifact Registry > Repositories**,
|
||||
and confirm that the uploaded artifacts appear in the repository.
|
||||
|
||||
### 3/3 - Implement alerts in Slack
|
||||
|
||||
1. Navigate to **Pub/Sub, c**lick **Create Topic**, give it a name (e.g.,
|
||||
`security-artifact-alerts`) and click **Create**
|
||||
2. On the topic you created, click **Create Subscription**, choose a name for
|
||||
the subscription (e.g., `security-artifact-alerts-subscription`), and choose
|
||||
**Pull** as the delivery type..
|
||||
3. Go to the **Security Command Center**, click on **Settings** or
|
||||
**Notifications**, choose **Create Notification**, provide a name for the
|
||||
notification (e.g., `critical-findings-notification`) and select the
|
||||
**resource type** (**Project** or **Organization**) to scope the
|
||||
notification.
|
||||
4. Define conditions for sending notifications, such as:
|
||||
|
||||
- **Severity** (e.g., only send alerts for high or critical severity
|
||||
findings).
|
||||
- **Finding types** (e.g., vulnerability detection, unauthorized access
|
||||
attempts).
|
||||
|
||||
Use filters like:
|
||||
|
||||
```json
|
||||
severity="CRITICAL"
|
||||
```
|
||||
|
||||
5. Choose the **Pub/Sub topic** you created (`security-artifact alerts`) and
|
||||
confirm the connection by allowing **Security Command Center** to publish to
|
||||
this topic.
|
||||
6. Go to **Artifact Registry** > **Repositories** and select a repository.
|
||||
Navigate to **Settings** > **Notifications**.
|
||||
7. Click **Add Notification** and select relevant event types:
|
||||
- **Vulnerability Findings**
|
||||
- **Failed Artifact Uploads**
|
||||
- **Unauthorized Access**
|
||||
8. Link this notification to the same **Pub/Sub topic**
|
||||
(`security-artifact-alerts`).
|
||||
9. Go to Slack API and click **Create New App**. Choose **From scratch**, name
|
||||
the app and select your workspace.
|
||||
10. In the app settings, go to **Incoming Webhooks** and toggle the switch to
|
||||
**Activate Incoming Webhooks**. Click **Add New Webhook to Workspace** and
|
||||
choose the channel where you want to post alerts. Copy the **Webhook URL**
|
||||
provided after adding it - you will use it on GCP.
|
||||
11. Go to **OAuth & Permissions** in the app settings and add the required
|
||||
scope: `chat:write` and `incoming-webhook`
|
||||
12. Send a test message to the channel using the **Webhook URL**:
|
||||
|
||||
```bash
|
||||
curl -X POST -H 'Content-type: application/json' --data '{"text":"Test alert from GCP Security and Artifact"}' YOUR_SLACK_WEBHOOK_URL
|
||||
```
|
||||
|
||||
1. Go to **Cloud Functions** in **Google Cloud Console**, click **Create
|
||||
Function** and provide a name (e.g., `send-alerts-to-slack`), choose
|
||||
**Trigger type** as **Pub/Sub** and select your topic
|
||||
(`security-artifact-alerts`). Set the runtime environment to **Python.**
|
||||
2. Use the following example code to forward alerts to Slack: (replace
|
||||
`YOUR_SLACK_WEBHOOK_URL` with your Slack incoming webhook URL)
|
||||
|
||||
```python
|
||||
import base64
|
||||
import json
|
||||
import requests
|
||||
|
||||
def send_alert_to_slack(event, context):
|
||||
# Decode the Pub/Sub message
|
||||
pubsub_message = base64.b64decode(event['data']).decode('utf-8')
|
||||
alert = json.loads(pubsub_message)
|
||||
|
||||
# Prepare the Slack webhook URL and message format
|
||||
slack_webhook_url = 'YOUR_SLACK_WEBHOOK_URL' # <= To replace
|
||||
message = {
|
||||
'text': f"New Alert: {alert.get('finding', 'No details')} - Severity: {alert.get('severity', 'Unknown')} - Type: {alert.get('eventType', 'Unknown')}"
|
||||
}
|
||||
|
||||
# Send the alert to Slack
|
||||
response = requests.post(slack_webhook_url, json=message)
|
||||
|
||||
if response.status_code != 200:
|
||||
raise ValueError(f"Request to Slack returned an error {response.status_code}, the response is: {response.text}")
|
||||
```
|
||||
|
||||
1. Set the entry point to `send_alert_to_slack` and deploy the function (wait
|
||||
for it to activate).
|
||||
2. Generate a test alert or monitor new alerts in **Security Command Center** to
|
||||
verify that alerts are sent to your Slack channel.
|
||||
- For Security Command Center: Simulate a high-severity finding.
|
||||
- For Artifact Registry: Upload a vulnerable artifact or simulate
|
||||
unauthorized access.
|
||||
|
||||
## Evidence
|
||||
|
||||
- Screenshot of GCP Security enabled on your project
|
||||
- Screenshot of GCP Security enabled on your registry
|
||||
- Screenshot of Artifact Registry enabled on your registry
|
||||
- Screenshot of an alert received OR of its configuration
|
||||
@@ -1,57 +0,0 @@
|
||||
---
|
||||
id: "COR.INF.003"
|
||||
category: "core/infra"
|
||||
revision-version: 1
|
||||
revision-date: "2024-01-08"
|
||||
estimate-time: "1h"
|
||||
necessity: "mandatory"
|
||||
frameworks:
|
||||
- name: "soc2"
|
||||
sections: ["CC6.1"]
|
||||
---
|
||||
|
||||
# IAM for database authentication
|
||||
|
||||
## Purpose
|
||||
|
||||
You want to ensure that only the proper people can access your production
|
||||
database. You also want to avoid the burden of managing another list of users or
|
||||
rotating credentials.
|
||||
|
||||
## Implementation
|
||||
|
||||
### **Set Up Custom IAM Roles for Database Access**
|
||||
|
||||
1. In **Google Cloud Console**, go to **IAM & Admin** > **Roles**.
|
||||
2. Click **Create Role** and define a custom role with only the necessary
|
||||
permissions for your database (for a read-only role:
|
||||
`cloudsql.instances.connect`, `cloudsql.instances.get`)
|
||||
3. Save the role.
|
||||
|
||||
### **Assign Least Privilege Roles to Users or Service Accounts**
|
||||
|
||||
1. Go to **IAM & Admin** > **IAM**
|
||||
2. Click **Add** to assign the custom role to specific users or service accounts
|
||||
that require production database access.
|
||||
3. In the **New principals** field, enter the email of the user or service
|
||||
account.
|
||||
4. Under **Role**, choose the custom role you created.
|
||||
5. **Save**
|
||||
|
||||
### **Enable IAM Database Authentication (Cloud SQL Only)**
|
||||
|
||||
1. Go to **Cloud SQL** > **Instances**
|
||||
2. Select your production database instance.
|
||||
3. Under **Connections**, find the **Database Authentication** section and
|
||||
enable **IAM database authentication** (allows users with the necessary IAM
|
||||
roles to authenticate with their IAM credentials).
|
||||
|
||||
### Test access
|
||||
|
||||
1. In **Cloud Audit Logs** (under **Logging** > **Logs Explorer**), search for
|
||||
`cloudsql.googleapis.com` to view access logs.
|
||||
2. Verify that access is limited to authorized users.
|
||||
|
||||
## Evidence
|
||||
|
||||
- Screenshot showing IAM is active on your Cloud SQL
|
||||
@@ -1,88 +0,0 @@
|
||||
---
|
||||
id: "COR.INF.004"
|
||||
category: "core/infra"
|
||||
revision-version: 1
|
||||
revision-date: "2024-01-14"
|
||||
estimate-time: "1h"
|
||||
necessity: "mandatory"
|
||||
frameworks:
|
||||
- name: "soc2"
|
||||
sections: ["CC6.1", "CC6.3"]
|
||||
---
|
||||
|
||||
# Plug GCP & Github
|
||||
|
||||
## Purpose
|
||||
|
||||
Having credentials to manage can become a nightmare (especially if you need to
|
||||
change/rotate them often) - it quickly becomes time consuming. It is the same
|
||||
with lifetime tokens - someone leaving and you need to change them.
|
||||
|
||||
## Implementation
|
||||
|
||||
### **1. Create a Workload Identity Pool in GCP**
|
||||
|
||||
1. In **Google Cloud Console**, go to **IAM & Admin** > **Workload Identity
|
||||
Federation**.
|
||||
2. Click **Create Pool**, name it (e.g., `github-pool`), and set a
|
||||
**description**.
|
||||
3. Select **Provider type:** **OIDC** (OpenID Connect).
|
||||
4. Under **Provider details**, enter: **Issuer URL**:
|
||||
`https://token.actions.githubusercontent.com`
|
||||
5. Click **Create** to finish setting up the pool.
|
||||
|
||||
### 2. **Create a Workload Identity Provider in the Pool**
|
||||
|
||||
1. In the pool, go to **Providers** and click **Add Provider**.
|
||||
2. Name the provider (e.g., `github-provider`).
|
||||
3. Set **Issuer URL** to `https://token.actions.githubusercontent.com`.
|
||||
4. **Attribute mapping**: Add a mapping to verify the GitHub repository:
|
||||
1. `google.subject` → `assertion.sub`
|
||||
2. `attribute.repository` → `assertion.repository`
|
||||
3. `attribute.ref` → `assertion.ref`
|
||||
4. `attribute.owner` → `assertion.repository_owner`
|
||||
5. Click **Create** to add the provider.
|
||||
|
||||
### 3. **Grant IAM Permissions on GCP**
|
||||
|
||||
1. Go to **IAM & Admin** > **IAM**.
|
||||
2. Find the GCP service account you want GitHub Actions to use, or create a new
|
||||
one.
|
||||
3. Click **Add Principal** and specify the **Workload Identity Pool** (in the
|
||||
format:
|
||||
`principal://iam.googleapis.com/projects/PROJECT_ID/locations/global/workloadIdentityPools/POOL_ID/attribute.repository/OWNER/REPO`).
|
||||
4. Assign the necessary **roles** (e.g., `Viewer`, `Editor`) to allow access to
|
||||
resources.
|
||||
|
||||
### 4. **Configure GitHub Actions to Use Workload Identity**
|
||||
|
||||
1. In your **GitHub repository**, go to **Settings** > **Secrets and
|
||||
variables** > **Actions**.
|
||||
2. Add a new secret (e.g., `GCP_WORKLOAD_IDENTITY_PROVIDER`) containing the GCP
|
||||
**Workload Identity Provider** details.
|
||||
|
||||
### 5. **Set Up GitHub Actions Workflow**
|
||||
|
||||
- In your **GitHub Actions workflow YAML file** (e.g.,
|
||||
`.github/workflows/deploy.yml`), add steps to authenticate:
|
||||
```yaml
|
||||
jobs:
|
||||
deploy:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Configure Google Cloud authentication
|
||||
uses: google-github-actions/auth@v0
|
||||
with:
|
||||
workload_identity_provider:
|
||||
${{ secrets.GCP_WORKLOAD_IDENTITY_PROVIDER }}
|
||||
service_account: YOUR_GCP_SERVICE_ACCOUNT_EMAIL
|
||||
- name: Run GCP commands
|
||||
run: gcloud projects list
|
||||
```
|
||||
|
||||
This setup enables secure, temporary access from **GitHub Actions** to **GCP**
|
||||
resources without needing to store long-term credentials.
|
||||
|
||||
## Evidence
|
||||
|
||||
- Screenshot of your Github actions workflow.
|
||||
@@ -1,34 +0,0 @@
|
||||
---
|
||||
id: "COR.INF.005"
|
||||
category: "core/infra"
|
||||
revision-version: 1
|
||||
revision-date: "2024-01-14"
|
||||
estimate-time: "30m"
|
||||
necessity: "mandatory"
|
||||
frameworks:
|
||||
- name: "soc2"
|
||||
sections: ["CC6.3"]
|
||||
---
|
||||
|
||||
# Manage your service accounts
|
||||
|
||||
## Purpose
|
||||
|
||||
You don’t want to use the “default” service account, it has way too many
|
||||
permissions - it is a super administrator. Even GCP is asking you not to use it,
|
||||
it is only here for legacy reasons. In the same idea, grant your service
|
||||
accounts only what is necessary.
|
||||
|
||||
## Implementation
|
||||
|
||||
### Google Cloud Platform
|
||||
|
||||
1. Make sure the default service account is not used by any service - if it is
|
||||
the case, create a new service account (with only View and/or Edit
|
||||
permission) and use it.
|
||||
2. Make sure all your service accounts are only Viewer or Editor - you shouldn’t
|
||||
have any admin or owner.
|
||||
3. Delete the default service account if not used anymore
|
||||
|
||||
Note: if you have IaC, it does make sense to have a service account as Admin,
|
||||
but except in this kind of specific case: no admin
|
||||
@@ -1,36 +0,0 @@
|
||||
---
|
||||
id: "COR.INF.006"
|
||||
category: "core/infra"
|
||||
revision-version: 1
|
||||
revision-date: "2024-01-14"
|
||||
estimate-time: "1h"
|
||||
necessity: "mandatory"
|
||||
frameworks:
|
||||
- name: "soc2"
|
||||
sections: ["CC5.3", "CC7.1", "CC7.2", "CC8.1"]
|
||||
---
|
||||
|
||||
# Keep an history of all your changes
|
||||
|
||||
## Purpose
|
||||
|
||||
Infrastructure as Code (IaC) makes sure all your infrastructure changes are done
|
||||
in a standardized and repeatable process - the chance of human error is lower.
|
||||
Moreover, IaC enables version control and peer reviews. When growing, you will
|
||||
have to do it - the earlier the better (later, it can become really painful).
|
||||
|
||||
## Implementation
|
||||
|
||||
**Option 1:** If you don’t want an IaC, in the evidence section, provide a
|
||||
screenshot of some log of your infrastructure changes
|
||||
|
||||
**Option 2:** If you already have an IaC, go directly to the evidence section,
|
||||
we only need a screenshot.
|
||||
|
||||
**Option 3:** If you don’t have one, we recommend Terraform - the documentation
|
||||
is available [here](https://developer.hashicorp.com/terraform/tutorials).
|
||||
|
||||
## Evidence
|
||||
|
||||
- Screenshot showing some logs
|
||||
- Screenshot of the query you are performing in GCP to see your logs
|
||||
@@ -1,29 +0,0 @@
|
||||
---
|
||||
id: "COR.INF.007"
|
||||
category: "core/infra"
|
||||
revision-version: 1
|
||||
revision-date: "2024-01-14"
|
||||
estimate-time: "1h"
|
||||
necessity: "mandatory"
|
||||
frameworks:
|
||||
- name: "soc2"
|
||||
sections: ["CC2.1", "CC6.8"]
|
||||
---
|
||||
|
||||
# Remove unauthorized assets
|
||||
|
||||
## Purpose
|
||||
|
||||
Outdated/unmonitored/etc.. assets (VMs, Buckets, etc..) pose a significant risk:
|
||||
|
||||
- They can be used for malicious activities
|
||||
- You don’t manage them, they could lack proper security measures.
|
||||
|
||||
## Implementation
|
||||
|
||||
Review the list of authorized asset you created
|
||||
[List of your assets](./COR.INF.001_list_your_assets.md) , identify the ones
|
||||
that should not be there, and select the proper action:
|
||||
|
||||
- Disconnect the asset from your network
|
||||
- Scan for security updates on the asset and ensure proper access control
|
||||
@@ -1,25 +0,0 @@
|
||||
# Secure your infrastructure
|
||||
|
||||
## Why does it matter?
|
||||
|
||||
Your infrastructure holds your sensitive data and makes sure your service is
|
||||
available to your customers. Protecting it from unauthorized access or attacks
|
||||
is key to prevent any data leak or service outage.
|
||||
|
||||
## How can I proceed?
|
||||
|
||||
To secure your infrastructure, you will need to:
|
||||
|
||||
1. Understand what your are protecting
|
||||
2. Regulate access
|
||||
3. Log changes
|
||||
4. Fix known vulnerabilities
|
||||
|
||||
## Mitigations
|
||||
|
||||
- [List of your assets](COR.INF.001_list_your_assets.md)
|
||||
- [Scan for security updates](COR.INF.002_scan_security_updates.md)
|
||||
- [IAM for database authentication](COR.INF.003_iam_authentication_for_database.md)
|
||||
- [Plug GCP & Github](COR.INF.004_short_live_auth_ci.md)
|
||||
- [Manage your service accounts](COR.INF.005_manage_service_account.md)
|
||||
- [Keep an history of all your changes](COR.INF.006_keep_an_history_of_all_your_changes.md)
|
||||
@@ -1,70 +0,0 @@
|
||||
---
|
||||
id: "COR.NET.001"
|
||||
category: "core/network"
|
||||
revision-version: 1
|
||||
revision-date: "2024-01-12"
|
||||
estimate-time: "30m"
|
||||
necessity: "mandatory"
|
||||
frameworks:
|
||||
- name: "soc2"
|
||||
sections: ["CC6.1", "CC6.6", "CC6.7"]
|
||||
---
|
||||
|
||||
# Restrict public access on your infrastructure
|
||||
|
||||
## Purpose
|
||||
|
||||
Public access to your company's infrastructure is a serious security risk. By
|
||||
configuring your cloud provider to restrict public access, you can reduce the
|
||||
risk of unauthorized access to your sensitive data and systems.
|
||||
|
||||
## Implementation
|
||||
|
||||
- Ensure your cloud storage buckets are private (it should be the case by
|
||||
default)
|
||||
1. **Go to the Google Cloud Console,** navigate to **Cloud Storage**.
|
||||
2. In **Permissions**, enable **Uniform Bucket-Level Access** to enforce
|
||||
bucket-level permissions (and not individual object level).
|
||||
3. Remove any **AllUsers** or **allAuthenticatedUsers** roles, as these allow
|
||||
public access.
|
||||
4. Assign only required roles (e.g., `Storage Admin` or
|
||||
`Storage Object Viewer`) to specific users or groups. If you need a bucket
|
||||
to have public access for its purpose (e.g. CDN buckets) :
|
||||
5. Document why this bucket needs to be public in the evidence section
|
||||
6. Disable **Uniform Bucket-Level Access** and proceed at the bucket level.
|
||||
For each:
|
||||
1. Select your bucket
|
||||
2. Under **Bucket Permissions**, remove any **AllUsers** or
|
||||
**allAuthenticatedUsers** roles
|
||||
- Remove the default network The default network in GCP rely on a set of
|
||||
rules/access that can’t be disabled and are “unsafe”. That is why it is better
|
||||
to create your own network.
|
||||
<aside>
|
||||
🚨
|
||||
|
||||
First, replace the default network with a network that allows access only to the services you have enabled.
|
||||
|
||||
</aside>
|
||||
|
||||
1. Once the default network is no longer used, go to [VPC networks](https://console.cloud.google.com/networking/networks/list) on your Google Cloud Console
|
||||
2. Click the network named `default`.
|
||||
3. Click DELETE VPC NETWORK at the top of the page.
|
||||
- Restrict public SSH access If you need to enable access to your system,
|
||||
leverage **Google Cloud Identity-Aware Proxy (IAP)** as a secure alternative
|
||||
to direct SSH. IAP will let you access your VMs via SSH without exposing them
|
||||
publicly, it eliminates the need for public IPS or open SSH ports.
|
||||
1. In **GCP Console**, go to **Identity-Aware Proxy** and enable it for the
|
||||
project.
|
||||
2. Grant the user or group with **IAP-secured Tunnel User** (network access)
|
||||
and **Compute Instance Admin** (SSH permissions) roles.
|
||||
1. It works even for external users as long as they have a google account.
|
||||
To access the VMs, user need to run a command locally via the **gcloud
|
||||
CLI** to tunnel SSH traffic through IAP:
|
||||
```bash
|
||||
gcloud compute ssh <INSTANCE_NAME> --tunnel-through-iap
|
||||
```
|
||||
|
||||
## Evidence
|
||||
|
||||
- Screenshot showing your storage bucket configuration.
|
||||
- Screenshot showing your networks.
|
||||
@@ -1,50 +0,0 @@
|
||||
---
|
||||
id: "COR.NET.002"
|
||||
category: "core/network"
|
||||
revision-version: 1
|
||||
revision-date: "2024-01-12"
|
||||
estimate-time: "30m"
|
||||
necessity: "optional"
|
||||
frameworks:
|
||||
- name: "soc2"
|
||||
sections: ["CC6.1", "CC6.6"]
|
||||
---
|
||||
|
||||
# Set-up a WAF
|
||||
|
||||
## Purpose
|
||||
|
||||
A web application protection service acts as a security shield that:
|
||||
|
||||
Filters malicious traffic (SQL injections, XSS attacks) Masks your server's real
|
||||
IP address Blocks DDoS attacks and malicious bots Controls request rates to
|
||||
prevent abuse
|
||||
|
||||
This ensures your applications stay secure and available while legitimate
|
||||
traffic flows normally.
|
||||
|
||||
## Implementation
|
||||
|
||||
### Cloudflare
|
||||
|
||||
1. **Sign up for Cloudflare**: Go to [Cloudflare](https://www.cloudflare.com/)
|
||||
and create an account.
|
||||
2. **Add your domain**: Enter your website’s domain and let Cloudflare scan
|
||||
existing DNS records.
|
||||
3. **Update your DNS**: Change your domain's nameservers to Cloudflare’s
|
||||
nameservers as provided in your Cloudflare dashboard.
|
||||
4. **Configure your security settings**:
|
||||
- **Enable the Web Application Firewall (WAF)**: Set up rules to block
|
||||
threats like SQL injections and XSS attacks.
|
||||
- **Enable DDoS Protection**: Configure DDoS settings to prevent service
|
||||
interruptions.
|
||||
5. **Optional - Set up Access controls**:
|
||||
- Use **IP Access Rules** to allow or block specific IPs.
|
||||
- Configure **Rate Limiting** to prevent excessive requests that could signal
|
||||
attacks.
|
||||
6. **Review and Test**: Ensure that your website operates smoothly, and verify
|
||||
that rules are correctly blocking or allowing traffic.
|
||||
|
||||
## Evidence
|
||||
|
||||
- Screenshot of your WAF configuration.
|
||||
@@ -1,27 +0,0 @@
|
||||
---
|
||||
id: "COR.NET.003"
|
||||
category: "core/network"
|
||||
revision-version: 1
|
||||
revision-date: "2024-01-12"
|
||||
estimate-time: "30m"
|
||||
necessity: "optional"
|
||||
frameworks:
|
||||
- name: "soc2"
|
||||
sections: ["CC3.2", "CC4.1", "CC8.1"]
|
||||
---
|
||||
|
||||
# Run a penetration test
|
||||
|
||||
## Purpose
|
||||
|
||||
It is a good way to safeguard your company’s data. It is a real-life simulation
|
||||
of attack scenarios on your company: it enables you to identify potential
|
||||
vulnerabilities that can be fixed before being exploited.
|
||||
|
||||
## Implementation
|
||||
|
||||
Schedule a penetration test with a third party.
|
||||
|
||||
## Evidence
|
||||
|
||||
Your penetration test report.
|
||||
@@ -1,23 +0,0 @@
|
||||
# Protect your Network
|
||||
|
||||
Your network connects your devices, servers, and systems.
|
||||
|
||||
## Why does it matter?
|
||||
|
||||
Protecting your network is essential for the data and services your company
|
||||
provides. Network security helps ensure that sensitive data is accessible only
|
||||
to authorized users and that systems remain operational and resilient to
|
||||
attacks.
|
||||
|
||||
## How can I proceed?
|
||||
|
||||
Strengthening network security in a targeted, efficient way is essential. By
|
||||
restricting access to infrastructure, implementing protective layers like
|
||||
Cloudflare, and conducting regular security assessments, you can effectively
|
||||
safeguard your systems against unauthorized access and potential attacks.
|
||||
|
||||
## Mitigations
|
||||
|
||||
- [Restrict public access on your infrastructure](COR.NET.001_restrict_public_access_on_your_infrastructure.md)
|
||||
- [Set-up a WAF](COR.NET.002_web_application_firewall.md)
|
||||
- [Run a penetration test](COR.NET.003_penetration_test.md)
|
||||
@@ -1,37 +0,0 @@
|
||||
---
|
||||
id: "COR.SRC.001"
|
||||
category: "core/src"
|
||||
revision-version: 1
|
||||
revision-date: "2024-01-07"
|
||||
estimate-time: "15m"
|
||||
necessity: "mandatory"
|
||||
frameworks:
|
||||
- name: "soc2"
|
||||
sections: ["CC1.4", "CC5.2", "CC8.1"]
|
||||
---
|
||||
|
||||
# Code Review
|
||||
|
||||
## Purpose
|
||||
|
||||
Requiring pull requests and code reviews ensures higher code quality and
|
||||
security by allowing multiple team members to catch bugs, inefficiencies, and
|
||||
potential vulnerabilities before code is merged. It also promotes collaboration,
|
||||
knowledge sharing, and accountability within the team. This process helps
|
||||
prevent issues in production and maintains adherence to coding standards.
|
||||
|
||||
## Implementation
|
||||
|
||||
### Github
|
||||
|
||||
1. Open your GitHub repository and go to settings.
|
||||
2. In "Branche"s, click "Add Rule".
|
||||
3. Enter the branch name (e.g. "main") in the branch name pattern field.
|
||||
4. Enable: "Require a pull request before merging"
|
||||
5. Click Create or Save to apply the rule
|
||||
|
||||
## Evidence
|
||||
|
||||
- Screenshot of branch protection rules configuration
|
||||
- Documentation of PR review process
|
||||
- Sample PR showing enforced requirements
|
||||
@@ -1,35 +0,0 @@
|
||||
---
|
||||
id: "COR.SRC.002"
|
||||
category: "core/src"
|
||||
revision-version: 1
|
||||
revision-date: "2024-01-07"
|
||||
estimate-time: "15m"
|
||||
necessity: "optional"
|
||||
frameworks:
|
||||
- name: "soc2"
|
||||
sections: ["CC4.1", "CC8.1"]
|
||||
---
|
||||
|
||||
# Configure Code Scanning
|
||||
|
||||
## Purpose
|
||||
|
||||
It ensures that potential security flaws are detected early. This proactive
|
||||
approach strengthens your security posture and helps maintain high code quality.
|
||||
|
||||
## Implementation
|
||||
|
||||
### Github
|
||||
|
||||
1. Go to the "Security" tab of your repository.
|
||||
2. Click on "Set up code scanning".
|
||||
3. Select "Set up this workflow" under "CodeQL Analysis".
|
||||
4. Review the YAML file and commit it to your repository.
|
||||
|
||||
Code scanning will now run every time code is pushed to the repository, and
|
||||
results will appear in the Security tab.
|
||||
|
||||
## Evidence
|
||||
|
||||
- Screenshot of code scanning results from Security tab
|
||||
- Sample of resolved security alerts
|
||||
@@ -1,37 +0,0 @@
|
||||
---
|
||||
id: "COR.SRC.003"
|
||||
category: "core/src"
|
||||
revision-version: 1
|
||||
revision-date: "2024-01-07"
|
||||
estimate-time: "15m"
|
||||
necessity: "mandatory"
|
||||
frameworks:
|
||||
- name: "soc2"
|
||||
sections: ["CC4.1", "CC8.1"]
|
||||
---
|
||||
|
||||
# Configure Dependancy Vulnerability Alerts
|
||||
|
||||
## Purpose
|
||||
|
||||
It ensures your project stays secure and up-to-date without manual tracking of
|
||||
dependencies. It also reduces the risk of using outdated or insecure libraries
|
||||
in your codebase.
|
||||
|
||||
## Implementation
|
||||
|
||||
### Github
|
||||
|
||||
1. Go to your repository on GitHub.
|
||||
2. Click on the "Settings" tab.
|
||||
3. On the left sidebar, click "Security & analysis".
|
||||
4. Under "Dependabot alerts", ensure "Dependency graph" and "Dependabot security
|
||||
updates" are enabled.
|
||||
5. GitHub will now alert you to any vulnerable dependencies and automatically
|
||||
open pull requests to fix them.
|
||||
|
||||
## Evidence
|
||||
|
||||
- Screenshot of Dependabot configuration screen
|
||||
- Sample of dependency update PRs
|
||||
- Vulnerability alert history
|
||||
@@ -1,28 +0,0 @@
|
||||
---
|
||||
id: "COR.SRC.004"
|
||||
category: "core/src"
|
||||
revision-version: 1
|
||||
revision-date: "2024-01-08"
|
||||
estimate-time: "1h"
|
||||
necessity: "mandatory"
|
||||
frameworks:
|
||||
- name: "soc2"
|
||||
sections: ["CC1.4", "CC5.2", "CC8.1"]
|
||||
---
|
||||
|
||||
# Document your Development Lifecycle
|
||||
|
||||
## Purpose
|
||||
|
||||
Formalizing a proper development lifecycle helps your engineer in their jobs and
|
||||
helps you to scale your team. It reduces the chances of human error.
|
||||
|
||||
## Implementation
|
||||
|
||||
Write a document with your development lifecycle. It should include: planning,
|
||||
analysis, design, coding, testing, and maintenance. Don’t forget secure coding
|
||||
practices (eg code review) and quality.
|
||||
|
||||
## Evidence
|
||||
|
||||
- System development lifecycle document
|
||||
@@ -1,25 +0,0 @@
|
||||
# Secure your codebase
|
||||
|
||||
Your code is one of your most valuable asset, you want to be sure things are
|
||||
running smoothly and in a predictable way.
|
||||
|
||||
## Why does it matter?
|
||||
|
||||
A proper development lifecycle insure your application is iterated on in a
|
||||
secure and systematic manner. It reduces the chances of error or vulnerabilities
|
||||
and so increase the stability, integrity and security of your software. Also, it
|
||||
helps you scale your engineering team.
|
||||
|
||||
## How can I proceed?
|
||||
|
||||
- **Communicate policies:** Publish and update key documents and services.
|
||||
- **Implement structured processes:** Define a development lifecycle for
|
||||
software, adopt Infrastructure-as-Code (IaC), and deploy configuration
|
||||
management systems to maintain consistency and security.
|
||||
|
||||
## Mitigations
|
||||
|
||||
- [Code Review](COR.SRC.001.patch_review.md)
|
||||
- [Configure Code Scanning](COR.SRC.002.enable_code_scanning.md)
|
||||
- [Configure Dependancy Vulnerability Alerts](COR.SRC.003.dependancy_vulnerability_alerts.md)
|
||||
- [Document your Development Lifecycle](COR.SRC.004.systems_development_life_cycle.md)
|
||||
@@ -1,54 +0,0 @@
|
||||
---
|
||||
id: "OPS.INC.001"
|
||||
category: "operations/incidents"
|
||||
revision-version: 1
|
||||
revision-date: "2024-01-14"
|
||||
estimate-time: "30m"
|
||||
necessity: "mandatory"
|
||||
frameworks:
|
||||
- name: "soc2"
|
||||
sections: ["CC2.2"]
|
||||
---
|
||||
|
||||
# Build an incident response process
|
||||
|
||||
## Purpose
|
||||
|
||||
An incident response plan is crucial for quickly identifying, containing, and
|
||||
resolving incidents, minimizing potential disruptions. It ensures you’re
|
||||
prepared effectively and that you keep your operations running smoothly, even in
|
||||
the face of unexpected threats.
|
||||
|
||||
## Implementation
|
||||
|
||||
### Build an Incident Response Plan and share it with your team.
|
||||
|
||||
Template:
|
||||
|
||||
[Incident response plan](templates/incident_response_plan.md)
|
||||
|
||||
### Create a slack channel
|
||||
|
||||
Create a slack channel to allow your team to raise incident and be kept aware of
|
||||
their resolution
|
||||
|
||||
1. Create a channel (eg `#incident`)
|
||||
2. Pin the **Incident Response Plan** in the channel for quick access.
|
||||
3. Establish guidelines for using the channel, including:
|
||||
1. How to report incidents (e.g., “Post a message with a brief summary and
|
||||
relevant context”).
|
||||
2. Expected response times for acknowledgment and updates.
|
||||
4. Assign roles for incident management, such as:
|
||||
1. **On-duty engineer**: Monitors and triages notifications.
|
||||
2. **Response team**: Engineers responsible for handling and resolving
|
||||
incidents.
|
||||
5. Set up reminders or periodic messages in Slack to encourage proactive
|
||||
monitoring and review of unresolved issues.
|
||||
6. Integrate relevant notifications, if applicable, into the Slack channel for
|
||||
visibility (e.g., system alerts or logs).
|
||||
|
||||
## Evidence
|
||||
|
||||
- Share your incident response plan
|
||||
- screenshot of your #incident slack channel being used (with postmortem
|
||||
visible)
|
||||
@@ -1,45 +0,0 @@
|
||||
---
|
||||
id: "OPS.INC.002"
|
||||
category: "operations/incidents"
|
||||
revision-version: 1
|
||||
revision-date: "2024-01-14"
|
||||
estimate-time: "6h"
|
||||
necessity: "mandatory"
|
||||
frameworks:
|
||||
- name: "soc2"
|
||||
sections: ["CC2.2"]
|
||||
---
|
||||
|
||||
# Disaster Recovery Plan (DRP)
|
||||
|
||||
## Purpose
|
||||
|
||||
Disasters might seem far-fetched, but data loss, service outages, and
|
||||
misconfigurations can happen. Whether it's a simple human error or a regional
|
||||
outage, a DRP helps your team recover fast and maintain customer trust.
|
||||
|
||||
## Implementation
|
||||
|
||||
Here is a basic template, to use as a good starting point:
|
||||
|
||||
[DRP Template](https://www.notion.so/DRP-Template-13e1cc0bd5bc800d9db2f77d3c884521?pvs=21)
|
||||
|
||||
<aside>
|
||||
💡
|
||||
|
||||
If it is easier to manage, you can have several DRP: one for your database, one
|
||||
for your network, one for your infra, etc… that way, when testing, you can test
|
||||
smaller part of it and it adapts better to potential real life events.
|
||||
|
||||
</aside>
|
||||
|
||||
The idea is to be prepared for the unexpected. You don’t need to overthink
|
||||
things, it’s more to know what to do when you will be in the rush of a regional
|
||||
outage. For that, your DRP needs to cover:
|
||||
|
||||
1. **Scope & timings**: clear scope and the expected time to do it
|
||||
2. **Step-by-step:** guide on how to proceed
|
||||
3. **Contacts**: list of internal and external contacts crucial during a
|
||||
disaster.
|
||||
4. **Testing and Review Log**: A record of tests performed to validate the DRP’s
|
||||
effectiveness and any improvements made.
|
||||
@@ -1,29 +0,0 @@
|
||||
---
|
||||
id: "OPS.INC.002"
|
||||
category: "operations/incidents"
|
||||
revision-version: 1
|
||||
revision-date: "2024-01-15"
|
||||
estimate-time: "6h"
|
||||
necessity: "mandatory"
|
||||
frameworks:
|
||||
- name: "soc2"
|
||||
sections: ["CC3.2", "CC5.1", "CC7.5", "CC8.1"]
|
||||
---
|
||||
|
||||
# Test your disaster recovery plan
|
||||
|
||||
## Purpose
|
||||
|
||||
Having a plan with dust on it is useless. The goal of having a Disaster Recovery
|
||||
Plan is to be able to insure business continuity. As things are moving in your
|
||||
company, you need to check whether your DRP is still legit and whether you are
|
||||
able to properly run it.
|
||||
|
||||
## Implementation
|
||||
|
||||
At least once a year, you need to test your DRP and, if possible, improve it.
|
||||
Follow the instructions on yours and log the outcomes. Did it work?
|
||||
|
||||
## Evidence
|
||||
|
||||
- Link to the logs of your last test
|
||||
@@ -1,16 +0,0 @@
|
||||
# Prepare for incidents
|
||||
|
||||
## Why does it matter?
|
||||
|
||||
Let’s face it, you won’t be the exception with no incident ever. As it is going
|
||||
to happen to you, it is best to prepare for such event in order to reduce their
|
||||
impacts.
|
||||
|
||||
## How can I proceed?
|
||||
|
||||
Create a procedure to restore services and test it
|
||||
|
||||
## Mitigations
|
||||
|
||||
- [Build an incident response process](OPS.INC.001_incident_response_process.md)
|
||||
- [Disaster Recovery Plan](OPS.INC.002_drp.md)
|
||||
@@ -1,50 +0,0 @@
|
||||
# DRP Template
|
||||
|
||||
### **Overview and Objectives**
|
||||
|
||||
- **Purpose**: Provide step-by-step instructions to recover **[Critical
|
||||
Services]** in case of a disaster, ensuring minimum downtime and data
|
||||
protection.
|
||||
- **Scope**: This plan applies to **[Specify Services, e.g., Cloud SQL,
|
||||
application servers, etc.]**.
|
||||
- **Objectives**: Restore critical services within **[Define Recovery Time
|
||||
Objective, e.g., 2 hours]**.
|
||||
|
||||
### Instructions
|
||||
|
||||
<aside>
|
||||
⚠️
|
||||
|
||||
- Don’t overthink it.
|
||||
- Unless specifically required by a customer, don’t change your cloud provider
|
||||
for the recovery
|
||||
</aside>
|
||||
|
||||
1. Create a VM
|
||||
2. Run the following commands to log-in and to install the minimum software
|
||||
|
||||
`your commands`
|
||||
|
||||
3. Allow the VM to connect to the Database
|
||||
|
||||
`your commands`
|
||||
|
||||
4. Check the service is running
|
||||
|
||||
### **Troubleshooting**
|
||||
|
||||
> In this section provide everything you think it can help people running the
|
||||
> instruction e.g. “Connection Refused”, “Docker Image does not exist”, etc.
|
||||
|
||||
### **Contact Information**
|
||||
|
||||
| Role | Name | Contact Info | Backup Contact |
|
||||
| ---------------------- | ----------- | ---------------------- | --------------------- |
|
||||
| CTO | [Name] | [Email, Phone] | [Backup Contact] |
|
||||
| Cloud Provider Support | GCP Support | [Support Contact Info] | [Alternative Contact] |
|
||||
|
||||
### **Testing and Review Log**
|
||||
|
||||
| Date | Test Type | Result | Notes/Improvements |
|
||||
| ------------ | ----------------------- | ---------- | ------------------------------------- |
|
||||
| [YYYY-MM-DD] | Backup Restoration Test | Successful | Updated recovery steps for [Service]. |
|
||||
@@ -1,63 +0,0 @@
|
||||
### **1. Triage & validate**
|
||||
|
||||
The on-duty engineer receives the notification, he/she analyze logs, system
|
||||
behaviors, and context related to the indication versus known behaviors.
|
||||
|
||||
He/She needs to determine whether the notification is legit or not:
|
||||
|
||||
1. If it is legit ⇒ it is promoted to an ongoing incident. In the thread, CTO is
|
||||
notified and a message is posted with:
|
||||
|
||||
- A brief summary of the incident
|
||||
- Any immediate risks or concerns
|
||||
- Preliminary findings and scope (if known)
|
||||
- Ping for the relevant engineer (the response team).
|
||||
|
||||
⇒ the response team commences work.
|
||||
|
||||
2. If it is not (ie a false alarm), a message is posted in the thread with the
|
||||
reason for dismissal. The on-duty engineer needs to:
|
||||
- Determine and address the root cause for the false alarm. He/she needs to
|
||||
remediate any system or process issues that led to it.
|
||||
- End the incident response process
|
||||
|
||||
### **2. Handling & Resolution**
|
||||
|
||||
Resolution occurs in 3 steps detailed below. All decisions or actions taken must
|
||||
be documented.
|
||||
|
||||
1. **Contain:**
|
||||
|
||||
If possible, isolate system to prevent the incident from spreading or causing
|
||||
additional damage
|
||||
|
||||
1. **Eradicate:**
|
||||
|
||||
Identify and remove the root cause of the incident - roll back is a strong
|
||||
option.
|
||||
|
||||
1. **Recover:**
|
||||
|
||||
Resume normal business operations by restoring system functionality. Keep strong
|
||||
monitoring to catch any signs of repetition.
|
||||
|
||||
At the end of this process, an update is posted on the thread to keep all team
|
||||
informed. If the complete process takes longer than 30min, a quick update will
|
||||
be given in the thread every 30min so stakeholders are aware of the current
|
||||
state.
|
||||
|
||||
### **3. Postmortem**
|
||||
|
||||
Once the incident is resolved, the on-duty engineer document the findings,
|
||||
decisions and actions taken during the event in a document to which he/she joins
|
||||
recommendations. This document must be shared with stakeholders.
|
||||
|
||||
The postmortem document must answer:
|
||||
|
||||
- What was the incident? What happened?
|
||||
- Which decisions or actions were taken to respond?
|
||||
- What could have prevented it from happening?
|
||||
- What can be improved in terms of security, processes, communication, tools,
|
||||
etc.?
|
||||
|
||||
The CTO must validate and ensure that recommended improvements are implemented.
|
||||
@@ -1,124 +0,0 @@
|
||||
---
|
||||
id: "OPS.MON.001"
|
||||
category: "operations/monitoring"
|
||||
revision-version: 1
|
||||
revision-date: "2024-01-14"
|
||||
estimate-time: "1h"
|
||||
necessity: "mandatory"
|
||||
frameworks:
|
||||
- name: "soc2"
|
||||
sections: ["CC2.1", "CC6.1", "CC6.6", "CC6.8", "CC7.1", "CC7.2", "CC7.3"]
|
||||
---
|
||||
|
||||
# Configure logs and implement real-time monitoring
|
||||
|
||||
## Purpose
|
||||
|
||||
It allows you to detect and respond to potential security incidents or system
|
||||
failures immediately, minimizing downtime and reducing the risk of data
|
||||
breaches. It maintain visibility into system performance and security events.
|
||||
|
||||
## Implementation
|
||||
|
||||
If you are only relying on GCP for everything, you can use the GCP solution:
|
||||
|
||||
- Leverage GCP solution
|
||||
|
||||
1. **Install the Monitoring Agent** on your VMs: SSH into your VM and install
|
||||
the agent.
|
||||
|
||||
```bash
|
||||
curl -sSO https://dl.google.com/cloudagents/add-monitoring-agent-repo.sh
|
||||
sudo bash add-monitoring-agent-repo.sh
|
||||
sudo apt-get update
|
||||
sudo apt-get install stackdriver-agent
|
||||
```
|
||||
|
||||
2. In Google Cloud Console, go to **Monitoring** > **Dashboards** and enable
|
||||
**Google Cloud Operations Suite** (formerly Stackdriver).
|
||||
3. Use **Cloud Monitoring** to set up **dashboards**, track key metrics (CPU,
|
||||
memory, latency), and create **alerting policies** for real-time
|
||||
notifications on critical events.
|
||||
|
||||
Else, we recommend either Grafana or Datadog:
|
||||
|
||||
### Implement Datadog with GCP
|
||||
|
||||
1. Go to the [Datadog website](https://www.datadoghq.com/) and sign up for an
|
||||
account.
|
||||
2. **Install the Datadog Agent** on your GCP VMs:
|
||||
|
||||
- **SSH** into your VM.
|
||||
- Run the installation command for the Datadog agent. For Debian/Ubuntu:
|
||||
|
||||
```bash
|
||||
DD_API_KEY=<YOUR_API_KEY> bash -c "$(curl -L https://s3.amazonaws.com/dd-agent/scripts/install_script.sh)"
|
||||
```
|
||||
|
||||
⇒ Replace `<YOUR_API_KEY>` with your Datadog API key (found in the Datadog
|
||||
dashboard under **Integrations** > **APIs**).
|
||||
|
||||
3. **Enable Google Cloud Logging**:
|
||||
- In the **Google Cloud Console**, navigate to **Logging** > **Logs Router**.
|
||||
- Click **Create Sink** and name it **Datadog Logs**.
|
||||
- Set **destination** to **Pub/Sub** and create a new Pub/Sub topic (e.g.,
|
||||
`datadog-logs`).
|
||||
4. **Connect Pub/Sub to Datadog**:
|
||||
- In **Datadog**, go to **Integrations** > **Google Cloud**.
|
||||
- Enable the **Pub/Sub** integration and follow the steps to link it to your
|
||||
GCP project.
|
||||
- Create a service account with the appropriate permissions
|
||||
(`pubsub.subscriber`) and add it to the Pub/Sub topic created.
|
||||
5. **Send Logs to Datadog**:
|
||||
- Configure the Pub/Sub topic to export logs from Google Cloud to Datadog.
|
||||
- Ensure logs from GCP services like Compute Engine, Cloud Functions, etc.,
|
||||
are routed to this topic.
|
||||
6. **Monitor Logs in Datadog**:
|
||||
- In Datadog, navigate to **Logs** to see real-time logs from your GCP
|
||||
infrastructure.
|
||||
- Set up **alerts** or **dashboards** for monitoring specific log patterns or
|
||||
critical events.
|
||||
|
||||
### Implement Grafana with GCP
|
||||
|
||||
- **Create a Grafana Cloud Account**: Sign up at
|
||||
[Grafana Cloud](https://grafana.com/).
|
||||
- **Install the Grafana Agent** on GCP VMs:
|
||||
- **SSH** into your VM.
|
||||
- Download and install the Grafana Agent:
|
||||
```bash
|
||||
sudo curl -O -L https://raw.githubusercontent.com/grafana/agent/main/install-agent.sh
|
||||
sudo bash install-agent.sh
|
||||
```
|
||||
- Configure it with your **Grafana Cloud credentials**.
|
||||
- **Enable Google Cloud Logging**:
|
||||
- In **Google Cloud Console**, go to **Logging** > **Logs Router**.
|
||||
- Create a **Sink** and select **Pub/Sub** as the destination.
|
||||
- Set up a **Pub/Sub topic** for Grafana logs.
|
||||
- **Configure Pub/Sub for Grafana**:
|
||||
- In **Grafana Cloud**, set up **Loki** (for log aggregation).
|
||||
- Configure **Pub/Sub** to forward logs to **Loki** by creating a service
|
||||
account with `pubsub.subscriber` permissions.
|
||||
- **Monitor Logs in Grafana**:
|
||||
- Go to **Explore** in Grafana to view and search logs.
|
||||
- Set up **dashboards** or **alerts** for important log data.
|
||||
|
||||
Once the chosen solution is installed, you need to implement your first
|
||||
dashboard (if not already the case). At least, we think you should be able to
|
||||
follow:
|
||||
|
||||
- Availability:
|
||||
- Resource usage (CPU, memory, storage)
|
||||
- System downtime event
|
||||
- Optional:
|
||||
- Uptime
|
||||
- Latency
|
||||
- Access:
|
||||
- Failed log attemps, unauthorized access, MFA usage
|
||||
- Integrity:
|
||||
- Error rate (eg. rate of 500s)
|
||||
- Data loss or corruption (inc. transaction failures)
|
||||
|
||||
## Evidence
|
||||
|
||||
- Screenshot of the metrics you are tracking.
|
||||
@@ -1,37 +0,0 @@
|
||||
---
|
||||
id: "OPS.MON.002"
|
||||
category: "operations/monitoring"
|
||||
revision-version: 1
|
||||
revision-date: "2024-01-14"
|
||||
estimate-time: "15m"
|
||||
necessity: "mandatory"
|
||||
frameworks:
|
||||
- name: "soc2"
|
||||
sections: ["CC7.3"]
|
||||
---
|
||||
|
||||
# Keep your logs
|
||||
|
||||
## Purpose
|
||||
|
||||
Logs help you to detect and investigate security incidents and troubleshoot
|
||||
operational issues. They provide an audit trail.
|
||||
|
||||
## Implementation
|
||||
|
||||
You should consider a retention period of at least 90 days, and up to 1 year.
|
||||
|
||||
- **If you are using Grafana ⇒ Grafana Loki**: Configure the retention period in
|
||||
`loki-config.yaml`.
|
||||
- **If you rely on GCP**: In **Cloud Logging**, navigate to **Logs Router** and
|
||||
adjust log sink retention settings.
|
||||
|
||||
If you are using Datadog:
|
||||
|
||||
1. Go to **Logs Management**
|
||||
2. Set the retention period (3 to 15 days depending on your plan).
|
||||
3. As you are limited in time, also set up the configuration in GCP.
|
||||
|
||||
## Evidence
|
||||
|
||||
- Screenshot of your configuration in GPC or Grafana
|
||||
@@ -1,74 +0,0 @@
|
||||
---
|
||||
id: "OPS.MON.003"
|
||||
category: "operations/monitoring"
|
||||
revision-version: 1
|
||||
revision-date: "2024-01-14"
|
||||
estimate-time: "15m"
|
||||
necessity: "mandatory"
|
||||
frameworks:
|
||||
- name: "soc2"
|
||||
sections: ["CC6.1", "CC6.6", "CC6.8", "CC7.1", "CC7.2", "CC7.3"]
|
||||
---
|
||||
|
||||
# Be automatically notified of issues
|
||||
|
||||
## Purpose
|
||||
|
||||
Setting up alerting allows you to respond quickly and minimize downtime or
|
||||
potential data breaches. It ensures that important events, such as unauthorized
|
||||
access or system failures, are addressed promptly.
|
||||
|
||||
## Implementation
|
||||
|
||||
You should implement alerts for critical events (if you have alerts on
|
||||
everything, its not alerting anymore). You should consider:
|
||||
|
||||
- **Resource Utilization**: Monitor high CPU, memory, or disk usage to prevent
|
||||
downtime or system crashes.
|
||||
- **System Downtime**: Set alerts for system unavailability or critical services
|
||||
going offline.
|
||||
- **Network Traffic Anomalies**: Monitor for unusual spikes or patterns in
|
||||
network traffic that could indicate a potential attack.
|
||||
- Optional:
|
||||
- **Unauthorized Access Attempts:** Track and alert on failed logins, unusual
|
||||
login locations, or excessive login attempts.
|
||||
|
||||
To set up an alert:
|
||||
|
||||
### In Cloud Monitoring for GCP:
|
||||
|
||||
1. Navigate to **Monitoring** > **Alerting**.
|
||||
2. Click **Create Policy**.
|
||||
3. Select **Add Condition**, then choose the metric you want to monitor (e.g.,
|
||||
CPU usage).
|
||||
4. Define the alert conditions (e.g., CPU > 80% for 5 minutes).
|
||||
5. Choose how to be notified (email, SMS, **Slack**).
|
||||
6. Name your alert and click **Save** to activate it.
|
||||
|
||||
### In Grafana
|
||||
|
||||
1. Log into your Grafana instance, go to the **Dashboards** section and select
|
||||
the relevant dashboard.
|
||||
2. In the dashboard, add a **panel** that visualizes the metric you want to
|
||||
monitor.
|
||||
3. In the panel settings, go to the **Alert** tab.
|
||||
4. Click **Create Alert** and set conditions (e.g., CPU > 80% for 5 minutes).
|
||||
5. Define the notification channels (e.g., email, Slack) in the **Contact
|
||||
Points** section.
|
||||
6. Save the panel and dashboard. The alert is now active and will notify you
|
||||
when the conditions are met.
|
||||
|
||||
### In Datadog
|
||||
|
||||
1. Go to your Datadog dashboard.
|
||||
2. On the left-hand menu, click on **Monitors** > **New Monitor**.
|
||||
3. Choose the type of monitor (e.g., metric) and select the metric you want to
|
||||
track.
|
||||
4. Define the conditions (e.g., CPU > 80% for 5 minutes).
|
||||
5. Set up notification methods (e.g., email, Slack).
|
||||
6. Name the alert and click **Create Monitor** to activate it.
|
||||
|
||||
## Evidence
|
||||
|
||||
- Screenshot of alerts received on the slack channel/email created for that OR
|
||||
of the alerts created in your solution
|
||||
@@ -1,20 +0,0 @@
|
||||
# Log collection and monitoring
|
||||
|
||||
Being proactive provides you with more visibility and ensures system
|
||||
reliability.
|
||||
|
||||
## Why does it matter?
|
||||
|
||||
Logging and monitoring your infrastructure and network is crucial for
|
||||
identifying and responding to security incidents, system issues or unauthorized
|
||||
access in real-time.
|
||||
|
||||
## How can I proceed?
|
||||
|
||||
Log critical event and implement alerts to be notified if everything goes wrong.
|
||||
|
||||
## Mitigations
|
||||
|
||||
- [Configure logs and implement real-time monitoring](OPS.MON.001_log_and_implement_real_time_monitoring.md)
|
||||
- [Keep your logs](OPS.MON.002_keep_your_logs.md)
|
||||
- [Be automatically notified of issues](OPS.MON.003_automatically_notified_of_issues.md)
|
||||
@@ -1,45 +0,0 @@
|
||||
---
|
||||
id: "PER.ACC.001"
|
||||
category: "personnel/access"
|
||||
revision-version: 1
|
||||
revision-date: "2024-01-14"
|
||||
estimate-time: "1h"
|
||||
necessity: "mandatory"
|
||||
frameworks:
|
||||
- name: "soc2"
|
||||
sections: ["CC6.1", "CC6.8"]
|
||||
---
|
||||
|
||||
# Enable 2FA on critical services
|
||||
|
||||
## Purpose
|
||||
|
||||
In order to minimize the threat of someone getting access to something they
|
||||
should not, we follow the **secure principle:** nobody can easily get access to
|
||||
data/systems.
|
||||
|
||||
We need to ensure that if someone has access to your password, they still cannot
|
||||
log into your account. Multi-Factor Authentication (MFA) adds extra layers of
|
||||
security by requiring users to provide additional authentication factors beyond
|
||||
their passwords. The most standard solution is 2FA: your password + something
|
||||
else.
|
||||
|
||||
## Implementation
|
||||
|
||||
Enable 2FA across all your systems. If you don’t want to activate it everywhere,
|
||||
prioritize:
|
||||
|
||||
- System containing sensitive data
|
||||
- System related to your network, infrastructure or production.
|
||||
|
||||
At least, you need it for the following:
|
||||
|
||||
- Cloud provider (GCP, AWS etc.)
|
||||
- Code hosting (Github, Gitlab etc.)
|
||||
- Email/SSO (Google, Microsoft etc.)
|
||||
|
||||
## Evidence
|
||||
|
||||
- Screenshot of your 2FA settings in Cloud provider.
|
||||
- Screenshot of your 2FA settings in Code hosting.
|
||||
- Screenshot of your 2FA settings in Email/SSO.
|
||||
@@ -1,40 +0,0 @@
|
||||
---
|
||||
id: "PER.ACC.002"
|
||||
category: "personnel/access"
|
||||
revision-version: 1
|
||||
revision-date: "2024-01-14"
|
||||
estimate-time: "15m"
|
||||
necessity: "mandatory"
|
||||
frameworks:
|
||||
- name: "soc2"
|
||||
sections: ["CC6.2", "CC6.3"]
|
||||
---
|
||||
|
||||
# Access Request Process
|
||||
|
||||
## Purpose
|
||||
|
||||
In order to minimize the threat of someone getting access to something they
|
||||
should not, we follow the continuous update principle: making sure the
|
||||
privileges are up to date. We need to setup a proper process to define how we
|
||||
grant and revoke access to different systems.
|
||||
|
||||
## Implementation
|
||||
|
||||
We will formalize your access granting and revocation policy later, for that, we
|
||||
need you to implement the fitting process for you.
|
||||
|
||||
1. Setup an easy process to update the access outside of onboarding and
|
||||
offboarding:
|
||||
1. Define who in your leadership team should be the person granting access.
|
||||
It usually would be someone from HR or IT
|
||||
2. Go to Slack and create an `access-request` channel
|
||||
3. Ensure any access request goes through this slack channel so you can
|
||||
provide screenshots of those requests.
|
||||
|
||||
> Pro tip: Setup an alias to @access-admin that pings the right person in charge
|
||||
> to reduce notification noise
|
||||
|
||||
## Evidence
|
||||
|
||||
- Screenshot of the slack channel with some actions on it.
|
||||
@@ -1,53 +0,0 @@
|
||||
---
|
||||
id: "PER.ACC.003"
|
||||
category: "personnel/access"
|
||||
revision-version: 1
|
||||
revision-date: "2024-01-14"
|
||||
estimate-time: "15m"
|
||||
necessity: "mandatory"
|
||||
frameworks:
|
||||
- name: "soc2"
|
||||
sections: ["CC6.1", "CC6.8"]
|
||||
---
|
||||
|
||||
# Setup a password manager
|
||||
|
||||
## Purpose
|
||||
|
||||
In order to minimize the threat of someone getting access to something they
|
||||
should not, we want to ensure a few things:
|
||||
|
||||
1. The password used in your company are complex enough
|
||||
2. They are stored encrypted
|
||||
3. They are shared safely when needed (not openly, on slack or by text)
|
||||
4. They are not compromised
|
||||
|
||||
The easiest way to implement those is to use a password manager.
|
||||
|
||||
## Implementation
|
||||
|
||||
### Choose your provider
|
||||
|
||||
There are a few options on the market regarding password manager. We will guide
|
||||
you through [1password](https://1password.com/) setup.
|
||||
|
||||
You can also use [Dashlane](https://www.dashlane.com/) or a free open source
|
||||
solution such as https://github.com/passbolt/passbolt_api.
|
||||
|
||||
### Confirm the policy you want
|
||||
|
||||
The main thing you need to decide on is the complexity of password you require.
|
||||
Below, you will find a suggestion of something you can implement in 1password.
|
||||
|
||||
<aside>
|
||||
🔒
|
||||
|
||||
Employees secret must meet the following requirements:
|
||||
|
||||
a. min 12 characters in length b. A mix of uppercase and lowercase characters c.
|
||||
At least one non-alphanumeric character d. At least one number
|
||||
|
||||
</aside>
|
||||
|
||||
> If you change from this suggestion, please edit the suggestion - this rule
|
||||
> will be added to a policy later.
|
||||
@@ -1,43 +0,0 @@
|
||||
---
|
||||
id: "PER.ACC.004"
|
||||
category: "personnel/access"
|
||||
revision-version: 1
|
||||
revision-date: "2024-01-14"
|
||||
estimate-time: "30m"
|
||||
necessity: "mandatory"
|
||||
frameworks:
|
||||
- name: "soc2"
|
||||
sections: ["CC6.8", "CC7.2"]
|
||||
---
|
||||
|
||||
# Setup Role Based Access Control (RBAC)
|
||||
|
||||
## Purpose
|
||||
|
||||
In order to minimize the threat of someone getting access to something they
|
||||
should not, we follow the least privilege principle: access is limited to what's
|
||||
necessary for job duties. We need to define which function should have access to
|
||||
which tool in your company to serve as a reference when providing access to
|
||||
people (password manager vaults etc.).
|
||||
|
||||
## Implementation
|
||||
|
||||
Define who should have access to what in a role-based matrix in the template
|
||||
below:
|
||||
|
||||
1. Edit and add columns for the main tool categories you are using
|
||||
2. Edit and add lines for the different functions / teams in your organization
|
||||
3. Edit and add ticks `x` in the right box for access
|
||||
4. In the last line, make sure to fill the right admin team
|
||||
|
||||
| **Role** | **Email** | **Google Workspace** | **Expense Tool** | **CRM** | **App** | **Infrastructure** | **Version Control** | **Build System** | **Vuln Scanner** |
|
||||
| ------------- | --------- | -------------------- | ---------------- | ---------- | ------------ | ------------------ | ------------------- | ---------------- | ---------------- |
|
||||
| **Everyone** | x | x | x | | x | | | | |
|
||||
| **Engineers** | x | x | x | | x | x | x | x | x |
|
||||
| **Sales** | x | x | x | x | x | | | | |
|
||||
| | | | | | | | | | |
|
||||
| **Admin** | HR | HR | Finance | Sales lead | Product lead | Eng lead | Eng lead | Eng lead | Eng lead |
|
||||
|
||||
## Evidence
|
||||
|
||||
- Provide the link to the matrix you implemented on your side
|
||||
@@ -1,45 +0,0 @@
|
||||
---
|
||||
id: "PER.ACC.005"
|
||||
category: "personnel/access"
|
||||
revision-version: 1
|
||||
revision-date: "2024-01-14"
|
||||
estimate-time: "30m"
|
||||
necessity: "mandatory"
|
||||
frameworks:
|
||||
- name: "soc2"
|
||||
sections: ["CC6.8", "CC7.2"]
|
||||
---
|
||||
|
||||
# Enforce SSO when possible
|
||||
|
||||
## Purpose
|
||||
|
||||
To minimize the risk of unauthorized access, it's important to centralize and
|
||||
secure authentication across your organization. Single Sign-On (SSO) enhances
|
||||
security by enabling better control over account access, enforcing consistent
|
||||
security policies (e.g., 2FA), and making it easier to revoke access when
|
||||
someone leaves the organization.
|
||||
|
||||
## Implementation
|
||||
|
||||
## Google Workspace
|
||||
|
||||
1. Log in to the [Google Admin Console](https://admin.google.com/) with an admin
|
||||
account.
|
||||
2. Go to **Apps** > **Web and Mobile Apps** > **Add App** > **Add Custom SAML
|
||||
App**.
|
||||
3. Name the app and upload a logo (optional).
|
||||
4. **Generate SSO details**:
|
||||
- Google provides the **SSO URL**, **Entity ID**, and **Certificate** for the
|
||||
app.
|
||||
5. **Configure the Third-Party App**:
|
||||
- In the app’s admin console, input the **SSO URL**, **Entity ID**, and
|
||||
upload the **Certificate**.
|
||||
6. Return to Google Admin Console and configure attribute mapping (e.g., email,
|
||||
first name).
|
||||
7. Test the connection, enable the app, and assign it to users or groups.
|
||||
|
||||
## Evidence
|
||||
|
||||
- Screenshot of SSO activation for Google Workplace + your cloud provider + code
|
||||
hosting tool
|
||||
@@ -1,31 +0,0 @@
|
||||
---
|
||||
id: "PER.ACC.006"
|
||||
category: "personnel/access"
|
||||
revision-version: 1
|
||||
revision-date: "2024-01-14"
|
||||
estimate-time: "30m"
|
||||
necessity: "mandatory"
|
||||
frameworks:
|
||||
- name: "soc2"
|
||||
sections: ["CC3.3", "CC6.1", "CC6.2", "CC6.3", "CC6.5"]
|
||||
---
|
||||
|
||||
# Conduct an access reviews
|
||||
|
||||
## Purpose
|
||||
|
||||
A formal/explicit process to review employee access on a quarterly/yearly basis
|
||||
is a must have in terms of security hygiene.
|
||||
|
||||
## Implementation
|
||||
|
||||
Every 3 or 6 months, plan an “Access review session” with the relevant people to
|
||||
audit accesses on all systems (that is another good reason to enable SSO). You
|
||||
need to ensure everyone has the proper access for his/her job - an account
|
||||
inactive for the last 90 days can probably be disable. If you proceed to any
|
||||
change, document it in the minutes of the meeting - those minutes will be asked
|
||||
for subsequent SOC 2 audits.
|
||||
|
||||
## Evidence
|
||||
|
||||
- Screenshot the recurring meeting invite OR the notes from the previous reviews
|
||||
@@ -1,29 +0,0 @@
|
||||
# Configure your system access
|
||||
|
||||
You can start by making sure you properly manage access to your company system
|
||||
and data.
|
||||
|
||||
## Why does it matter?
|
||||
|
||||
Someone having access to something he should not can have serious consequences
|
||||
such as a data leak or a service interruption. It is important to mitigate those
|
||||
risks you have identified previously.
|
||||
|
||||
## How can I proceed?
|
||||
|
||||
The main idea is to follow those principles:
|
||||
|
||||
1. **Least privilege:** everyone’s access is limited to what's necessary for job
|
||||
duties
|
||||
2. **Secure:** nobody can easily get access to the your employees
|
||||
passwords/access
|
||||
3. **Continuous update:** making sure the privileges are up to date and you use
|
||||
the latest best practices
|
||||
|
||||
## Mitigations
|
||||
|
||||
- [Enable MFA on critical services](PER.ACC.001_mfa_on_critical_services.md)
|
||||
- [Access Request Process](PER.ACC.002_access_request_process.md)
|
||||
- [Setup a password manager](PER.ACC.003_password_manager.md)
|
||||
- [Setup Role Based Access Control](PER.ACC.004_role_based_access_control.md)
|
||||
- [Enforce SSO when possible](PER.ACC.005_enforce_single_sign_on.md)
|
||||
@@ -1,46 +0,0 @@
|
||||
---
|
||||
id: "PER.COM.001"
|
||||
category: "personnel/comms"
|
||||
revision-version: 1
|
||||
revision-date: "2024-01-07"
|
||||
estimate-time: "30m"
|
||||
necessity: "mandatory"
|
||||
frameworks:
|
||||
- name: "soc2"
|
||||
sections: ["CC6.1", "CC6.8"]
|
||||
---
|
||||
|
||||
# Configure SPF for Email Authentication
|
||||
|
||||
## Purpose
|
||||
|
||||
SPF (Sender Policy Framework) prevents email spoofing by defining which mail
|
||||
servers are authorized to send emails on behalf of your domain. It helps
|
||||
receiving mail servers verify that incoming email from a domain comes from a
|
||||
host authorized by that domain's administrators.
|
||||
|
||||
## Implementation
|
||||
|
||||
1. Identify all legitimate email sources:
|
||||
- Your mail servers
|
||||
- Third-party services (e.g., Google Workspace)
|
||||
- Marketing platforms
|
||||
- Any other authorized email senders
|
||||
2. Create SPF record
|
||||
```
|
||||
v=spf1 include:_spf.google.com ~all
|
||||
```
|
||||
Where:
|
||||
- `v=spf1`: Version of SPF
|
||||
- `include:_spf.google.com`: Include Google's mail servers
|
||||
- `~all`: Soft fail for others (can be changed to -all for hard fail)
|
||||
3. Add record to DNS:
|
||||
- Create TXT record at domain root
|
||||
- Publish SPF record in DNS
|
||||
- Wait for DNS propagation
|
||||
|
||||
## Evidence
|
||||
|
||||
- Screenshot of published SPF DNS record
|
||||
- Email header samples showing SPF pass
|
||||
- Documentation of authorized senders
|
||||
@@ -1,37 +0,0 @@
|
||||
---
|
||||
id: "PER.COM.002"
|
||||
category: "personnel/comms"
|
||||
revision-version: 1
|
||||
revision-date: "2024-01-07"
|
||||
estimate-time: "30m"
|
||||
necessity: "mandatory"
|
||||
frameworks:
|
||||
- name: "soc2"
|
||||
sections: ["CC6.1", "CC6.8"]
|
||||
---
|
||||
|
||||
# Configure DKIM for Email Authentication
|
||||
|
||||
## Purpose
|
||||
|
||||
DKIM (DomainKeys Identified Mail) helps prevent email spoofing by adding a
|
||||
digital signature to outgoing messages, allowing receiving mail systems to
|
||||
verify that emails genuinely came from your domain and weren't modified in
|
||||
transit.
|
||||
|
||||
## Implementation
|
||||
|
||||
### Google Workspace
|
||||
|
||||
1. Go to [Google Admin console](admin.google.com).
|
||||
2. Navigate to Apps > Google Workspace > Gmail > Authenticate Email.
|
||||
3. Select your domain and click "Generate new record".
|
||||
4. Copy the DKIM TXT record provided by Google.
|
||||
5. Add this TXT record to your DNS.
|
||||
6. After DNS propagation, return to Admin console and click "Start
|
||||
authentication".
|
||||
|
||||
## Evidence
|
||||
|
||||
- Screenshot of published DKIM DNS record
|
||||
- Sample email headers showing DKIM pass
|
||||
@@ -1,48 +0,0 @@
|
||||
---
|
||||
id: "PER.COM.003"
|
||||
category: "personnel/comms"
|
||||
revision-version: 1
|
||||
revision-date: "2024-01-07"
|
||||
estimate-time: "30m"
|
||||
necessity: "mandatory"
|
||||
related:
|
||||
- id: "PER.COM.001"
|
||||
required: true
|
||||
- id: "PER.COM.002"
|
||||
required: true
|
||||
frameworks:
|
||||
- name: "soc2"
|
||||
sections: ["CC6.1", "CC6.8"]
|
||||
---
|
||||
|
||||
# Configure DMARC for Email Authentication
|
||||
|
||||
## Purpose
|
||||
|
||||
DMARC (Domain-based Message Authentication, Reporting, and Conformance) is a
|
||||
policy framework that builds upon SPF and DKIM. It tells receiving servers what
|
||||
to do when emails fail SPF or DKIM checks, and provides reporting on
|
||||
authentication results.
|
||||
|
||||
## Implementation
|
||||
|
||||
### Google Workspace
|
||||
|
||||
1. Create a Google Group named `dmarc-report@example.com` which is assecible
|
||||
from external users.
|
||||
2. Create DMARC record in monitoring mode:
|
||||
```
|
||||
Record: _dmarc.example.com
|
||||
Value: v=DMARC1; p=none; rua=mailto:dmarc-reports@example.com
|
||||
```
|
||||
Where:
|
||||
- `v=DMARC1`: Protocol version
|
||||
- `p=none`: Policy for failed checks
|
||||
- `rua=`: Address for aggregate reports
|
||||
3. Check the reports sent to the rua email address to ensure proper
|
||||
authentication of emails.
|
||||
|
||||
## Evidence
|
||||
|
||||
- Screenshot of DMARC DNS record
|
||||
- Sample aggregate reports
|
||||
@@ -1,42 +0,0 @@
|
||||
---
|
||||
id: "PER.COM.004"
|
||||
category: "personnel/comms"
|
||||
revision-version: 1
|
||||
revision-date: "2024-01-07"
|
||||
estimate-time: "15m"
|
||||
necessity: "mandatory"
|
||||
frameworks:
|
||||
- name: "soc2"
|
||||
sections: ["CC6.8", "CC7.2"]
|
||||
---
|
||||
|
||||
# Configure Email Security Filters
|
||||
|
||||
## Purpose
|
||||
|
||||
Implement email filtering and warning systems to reduce phishing risks and
|
||||
protect employees from malicious emails. This reduces mental load on employees
|
||||
and decreases company risk exposure through email-based attacks.
|
||||
|
||||
## Implementation
|
||||
|
||||
### Google Workspace
|
||||
|
||||
1. Access [Google Admin Console](https://admin.google.com).
|
||||
2. Navigate to Settings
|
||||
```
|
||||
Apps → Google Workspace → Gmail
|
||||
```
|
||||
3. Configure "Safety" settings:
|
||||
- Attachments Protection
|
||||
- Scan for anomalous attachment types
|
||||
- Block attachments with scripts
|
||||
- Block encrypted attachments from untrusted senders
|
||||
- Links and External Images:
|
||||
- Enable scanning of linked images
|
||||
- Identify shortened URLs
|
||||
- Display warning prompts for untrusted domains
|
||||
|
||||
## Evidence
|
||||
|
||||
- Screenshot of email security settings in Google Admin Console.
|
||||
@@ -1,24 +0,0 @@
|
||||
# Secure your emails
|
||||
|
||||
## Why does it matter?
|
||||
|
||||
Do you know what is the most common attack vector among cyber threats?
|
||||
**Emails**
|
||||
|
||||
And by far! It is also where your employees are talking with externals. By
|
||||
configuring a few things in your settings, you are preventing many threats from
|
||||
reaching your employees and you are protecting your data and systems.
|
||||
|
||||
## How can I proceed?
|
||||
|
||||
To do so, we divided the work in two steps:
|
||||
|
||||
- You secure the access to your offices.
|
||||
- You secure the internet connexion of remote employees
|
||||
|
||||
## Mitigations
|
||||
|
||||
- [Configure SPF for Email Authentication](PER.COM.001.sender_policy_framework.md)
|
||||
- [Configure DKIM for Email Authentication](PER.COM.002.dkim_implementation.md)
|
||||
- [Configure DMARC for Email Authentication](PER.COM.003.domain_based_message_authentication.md)
|
||||
- [Configure Email Security Filters](PER.COM.004.email_filtering_and_warning_system.md)
|
||||
@@ -1,47 +0,0 @@
|
||||
---
|
||||
id: "PER.LIF.001"
|
||||
category: "personnel/lifecycle"
|
||||
revision-version: 1
|
||||
revision-date: "2024-01-10"
|
||||
estimate-time: "30m"
|
||||
necessity: "mandatory"
|
||||
frameworks:
|
||||
- name: "soc2"
|
||||
sections: ["CC1.4", "CC5.3"]
|
||||
---
|
||||
|
||||
# Integrate security checklist in your onboarding process
|
||||
|
||||
## Purpose
|
||||
|
||||
It is the perfect timing to ensure that every employees has:
|
||||
|
||||
- accepted and signed all documents
|
||||
- the access needed to perform his/her tasks
|
||||
- started his/her security training
|
||||
|
||||
## Implementation
|
||||
|
||||
In theory, you already have an onboarding plan for your new employees (if not,
|
||||
[Onboarding for new joiner](templates/onboarding-for-new-joiner.md)) and a to-do
|
||||
for your admin running the onboarding (if not,
|
||||
[Onboarding admin checklist](templates/onboarding-admin-checklist.md)).
|
||||
|
||||
On your employee to-do, be sure to include:
|
||||
|
||||
- Set-up of 2FA
|
||||
- Set-up of password manager
|
||||
- Read & acknowledge all policies (it can be part of the contract)
|
||||
- Complete the security training
|
||||
|
||||
On your admin to-do, be sure to include:
|
||||
|
||||
- contract is signed before granting access
|
||||
- apply “least privilege principle” for access (the matrix you defined)
|
||||
- Force the set-up of 2FA and password manager
|
||||
- Initiate the security training
|
||||
|
||||
## Evidence
|
||||
|
||||
- Screenshots of a completed onboarding checklists.
|
||||
- Screenshots of a completed admin checklist for new joiner.
|
||||
@@ -1,39 +0,0 @@
|
||||
---
|
||||
id: "PER.LIF.002"
|
||||
category: "personnel/lifecycle"
|
||||
revision-version: 1
|
||||
revision-date: "2024-01-10"
|
||||
estimate-time: "30m"
|
||||
necessity: "mandatory"
|
||||
frameworks:
|
||||
- name: "soc2"
|
||||
sections: ["CC5.3", "CC6.2", "CC6.5"]
|
||||
---
|
||||
|
||||
# Properly off-board your employees
|
||||
|
||||
## Purpose
|
||||
|
||||
Yes, people will leave your company (either by your decision or theirs). And you
|
||||
want to be prepare! If an early employee leaves and you forgot to change the
|
||||
ownership on his/her document, you might lose the documents.
|
||||
|
||||
Also, you want to be sure people can’t access the company data or systems once
|
||||
they left!
|
||||
|
||||
## Implementation
|
||||
|
||||
1. Integrate the following elements in your offboarding checklist:
|
||||
|
||||
- Return of company assets (laptop etc.)
|
||||
- Transfer ownership of documents
|
||||
- Revoke all access to systems
|
||||
|
||||
(if you don't have an offboarding checklist →
|
||||
[Offboarding admin checklist](templates/offboarding-admin-checklist.md))
|
||||
|
||||
2. Upload a screenshot of your checklist that contains those bullet points below
|
||||
|
||||
## Evidence
|
||||
|
||||
- Screenshot of a completed admin checklist for offboarding
|
||||
@@ -1,37 +0,0 @@
|
||||
---
|
||||
id: "PER.LIF.003"
|
||||
category: "personnel/lifecycle"
|
||||
revision-version: 1
|
||||
revision-date: "2024-01-10"
|
||||
estimate-time: "30m"
|
||||
necessity: "mandatory"
|
||||
frameworks:
|
||||
- name: "soc2"
|
||||
sections: ["CC1.4", "CC5.3"]
|
||||
---
|
||||
|
||||
# Know your recruits
|
||||
|
||||
## Purpose
|
||||
|
||||
When recruiting someone, you want to be sure of who you are hiring: by
|
||||
performing reference checks (it can also be background checks), you add an
|
||||
additional layer of certainty on the candidate by looking for potential red
|
||||
flags in the candidate’s past (history of unethical behavior, harassment, fraud,
|
||||
etc..).
|
||||
|
||||
## Implementation
|
||||
|
||||
Recruitment is key, especially early stage, so you are probably already doing it
|
||||
right, it is only about documenting it.
|
||||
|
||||
⇒ Define the recruitment process you follow when bringing on a new member (if
|
||||
you don’t have one formalized, here is a structure:
|
||||
[Recruitment process](templates/recruitment-process.md)).
|
||||
|
||||
## Evidence
|
||||
|
||||
- Reference check template
|
||||
- Completed check records (redacted)
|
||||
- Process documentation
|
||||
- Verification records
|
||||
@@ -1,33 +0,0 @@
|
||||
---
|
||||
id: "PER.LIF.004"
|
||||
category: "personnel/lifecycle"
|
||||
revision-version: 1
|
||||
revision-date: "2024-01-13"
|
||||
estimate-time: "15m"
|
||||
necessity: "mandatory"
|
||||
frameworks:
|
||||
- name: "soc2"
|
||||
sections: ["CC2.2"]
|
||||
---
|
||||
|
||||
# Implement confidential whistleblower process
|
||||
|
||||
## Purpose
|
||||
|
||||
It encourages and enables employees to raise serious concerns (violations of
|
||||
your code of ethics or law or regulations) in order for them to be addressed and
|
||||
corrected while being protected from any retaliation.
|
||||
|
||||
## Implementation
|
||||
|
||||
### Google Workspace
|
||||
|
||||
1. Set up an anonymous
|
||||
[Google form](https://html.form.guide/google-forms/make-google-form-survey-anonymous/)
|
||||
|
||||
2. Communicate the link to your employees by explaining how and why they should
|
||||
use it.
|
||||
|
||||
## Evidence
|
||||
|
||||
- Screenshot of its communication to your employees.
|
||||
@@ -1,32 +0,0 @@
|
||||
---
|
||||
id: "PER.LIF.005"
|
||||
category: "personnel/lifecycle"
|
||||
revision-version: 1
|
||||
revision-date: "2024-01-13"
|
||||
estimate-time: "30m"
|
||||
necessity: "optional"
|
||||
frameworks:
|
||||
- name: "soc2"
|
||||
sections: ["CC1.3", "CC1.4", "CC1.5", "CC4.2", "CC5.3"]
|
||||
---
|
||||
|
||||
# Run performance reviews
|
||||
|
||||
## Purpose
|
||||
|
||||
Makes sure your team has the skills and focus needed to protect what matters
|
||||
most in your business. They help spot training gaps, reinforce accountability
|
||||
and ensure everyone is aligned with your operational goals - security being one
|
||||
of them. It's all about building a culture that proactively minimizes risks
|
||||
while continuously improving.
|
||||
|
||||
## Implementation
|
||||
|
||||
Create a simple employee
|
||||
[performance evaluation process](templates/performance-review-process.md). It
|
||||
must rely on clear metrics and expectations and must be run at least once a
|
||||
year.
|
||||
|
||||
## Evidence
|
||||
|
||||
- Screenshot of your performance review process.
|
||||
@@ -1,34 +0,0 @@
|
||||
---
|
||||
id: "PER.LIF.006"
|
||||
category: "personnel/lifecycle"
|
||||
revision-version: 1
|
||||
revision-date: "2024-01-13"
|
||||
estimate-time: "15m"
|
||||
necessity: "mandatory"
|
||||
frameworks:
|
||||
- name: "soc2"
|
||||
sections: ["CC1.2", "CC1.3", "CC1.5", "CC2.2", "CC4.3"]
|
||||
---
|
||||
|
||||
# Specify security responsabilities
|
||||
|
||||
## Purpose
|
||||
|
||||
Having clear ownership improve accountability, it helps employees figure out
|
||||
what is legit and what is not.
|
||||
|
||||
## Implementation
|
||||
|
||||
Here is the kind of document expected - it has to be done for every role with a
|
||||
potential impact on security:
|
||||
|
||||
| Role | Responsibilities |
|
||||
| ------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| CTO | • Oversees the overall security architecture and ensures that the technology stack aligns with security best practices<br>• Implements and enforces security policies across all engineering teams<br>• Ensures the security of the company's API by leading security audits, vulnerability assessments, and patch management<br>• Coordinates the implementation of access controls, encryption protocols, and incident response procedures |
|
||||
| Engineers | • Maintain the confidentiality, integrity, and availability of the information systems and processes for which they are responsible in compliance with COMPANY policies on information security and privacy<br>• Responsible for the development and deployment of secure code in accordance with COMPANY standards, policies, and procedures<br>• Leader of the Incident Response team, responsible for incident response, documentation, and lessons learned process<br>• Execution of customer data retention and deletion processes in accordance with company policy and customer requirements |
|
||||
| Head of People | • Ensures that employee onboarding and offboarding processes adhere to security protocols, including access control to company systems<br>• Collaborates with the IT team to manage employee access to sensitive information and ensure role-based access control<br>• Develops and maintains security-related HR policies, such as security awareness training, background checks, and confidentiality agreements |
|
||||
| Office and events manager | • Manages the issuance, tracking, and return of company equipment (laptops, phones) with security policies in place<br>• Manages access for new joiners and leavers for all general software and platforms<br>• Collaborates with CTO to ensure proper deactivation of devices when employees leave or change roles<br>• Tracks and audits equipment inventory to prevent unauthorized access to company systems or data |
|
||||
|
||||
## Evidence
|
||||
|
||||
- Screenshot of your page where those responsibilities are shared.
|
||||
@@ -1,45 +0,0 @@
|
||||
---
|
||||
id: "PER.LIF.007"
|
||||
category: "operations/training"
|
||||
revision-version: 1
|
||||
revision-date: "2024-01-13"
|
||||
estimate-time: "30m"
|
||||
necessity: "optional"
|
||||
frameworks:
|
||||
- name: "soc2"
|
||||
sections: ["CC1.4", "CC2.2"]
|
||||
---
|
||||
|
||||
# Train your employees on security
|
||||
|
||||
## Purpose
|
||||
|
||||
Your employees are the main target of cyber threats (especially phishing and
|
||||
social engineering), and education is one of the best way to reduce risk.
|
||||
Awareness of your employees will improve your company security.
|
||||
|
||||
## Implementation
|
||||
|
||||
There are a few options on the market, we will guide you through
|
||||
[Riot](https://tryriot.com/fr/) setup.
|
||||
|
||||
### Riot
|
||||
|
||||
1. **Sign up:** Go to the Riot website ([tryriot.com](https://tryriot.com/)) and
|
||||
either start a free trial or book a demo to get your account set up.
|
||||
|
||||
2. **Install on slack**: If you’re using Slack, you can install Riot directly
|
||||
from the [Slack Marketplace](https://slack.com/apps/A01GSNM2H6V-riot).
|
||||
|
||||
3. **Set up phishing simulations and security training**: After installation,
|
||||
you can begin running phishing simulations to test your team’s readiness
|
||||
against attacks. You can also automate ongoing security training programs
|
||||
that run throughout the year to keep employees aware of best practices.
|
||||
|
||||
4. **Monitor and Track Progress**: Once the setup is complete, you can track
|
||||
your team's engagement and security posture through Riot’s dashboard, which
|
||||
allows you to monitor progress and export compliance reports as needed.
|
||||
|
||||
## Evidence
|
||||
|
||||
- Screenshot of your program in Riot with completion.
|
||||
@@ -1,27 +0,0 @@
|
||||
# Set up your employees for success
|
||||
|
||||
## Why does it matter?
|
||||
|
||||
Without the proper security measures in place, employees can inadvertently
|
||||
expose your company to breaches and vulnerabilities. Providing secure access and
|
||||
clear guidelines on handling sensitive information is crucial to protect your
|
||||
organization from potential threats.
|
||||
|
||||
## How can I proceed?
|
||||
|
||||
You will focus on two things:
|
||||
|
||||
- **Processes:** whether it is to recruit, onboard or off-board, things are
|
||||
prepared and you are sure not to forgot anything.
|
||||
- **Enabling**: empower your employees to take the best decision possible to
|
||||
maintain your security posture
|
||||
|
||||
## Mitigations
|
||||
|
||||
- [Integrate security checklist in your onboarding process](PER.LIF.001_onboarding.md)
|
||||
- [Properly off-board your employees](PER.LIF.002_offboarding.md)
|
||||
- [Know your recruits](PER.LIF.003_pre-employment-screening-process.md)
|
||||
- [Implement confidential whistleblower process](PER.LIF.004_confidential_whistleblower_process.md)
|
||||
- [Run performance reviews](PER.LIF.005_performance_reviews.md)
|
||||
- [Specify security responsabilities](PER.LIF.006_security_roles_and_responsibilities.md)
|
||||
- [Train your employees on security](PER.LIF.007_security_awareness_training.md)
|
||||
@@ -1,9 +0,0 @@
|
||||
- [ ] 💰 Make sure we closed the contract on Payfit
|
||||
- [ ] 💻 Get back and Reset laptop
|
||||
- [ ] 🔁 Transfert the docs ownership in Google
|
||||
- [ ] 📧 Suppress the Google account
|
||||
- [ ] 🖋 Disconnect manually Notion
|
||||
- [ ] 🛠 Disconnect Slack
|
||||
- [ ] 🔐 Delete from 1 Password (not suspended, billed)
|
||||
- [ ] 🗄 Disconnect manually Github
|
||||
- [ ] 🧐 Double check with the manager for important tool
|
||||
@@ -1,48 +0,0 @@
|
||||
# Onboarding for new joiner
|
||||
|
||||
## 💜 Welcome! We're so glad to have you 😃
|
||||
|
||||
This first week will be about discovery: discovering the team, the way we work,
|
||||
and what we do.
|
||||
|
||||
> 💡Here is a checklist to help you settle down. Feel free to navigate notion &
|
||||
> slack, or to ask questions to anyone. Our role is to make your first days as
|
||||
> easy as possible.
|
||||
|
||||
## 🆕 Setting you up
|
||||
|
||||
- [ ] Log in to your Google Account (you must have received an email) and set up
|
||||
a new password
|
||||
- [ ] Download Google Authenticator app for 2-factor auth
|
||||
- [ ] Set-up the 2-factor auth: it is mandatory
|
||||
- [ ] Log in to 1password
|
||||
- [ ] Log in to Slack with your google account
|
||||
- [ ] Log in to Notion with your google account
|
||||
- [ ] Complete Albert security training on Slack
|
||||
|
||||
## 👷 Your Onboarding Project
|
||||
|
||||
> You’re now ready to present yourself to the team!
|
||||
|
||||
- [ ] Share a few things about you in #all_people in Slack: who are you, where
|
||||
do you come from, what was your journey until now, whatever fun fact you’d
|
||||
like to share with us, … you can draw some inspiration by looking at the
|
||||
previous ones 🙂
|
||||
- [ ] Read our Code of Conduct
|
||||
- [ ] Put a picture of yourself on Slack
|
||||
|
||||
## 👥 Users
|
||||
|
||||
If you want to know more about our users, go check XXXX
|
||||
|
||||
## 🚀 To go further
|
||||
|
||||
**Meet the team 🤝**
|
||||
|
||||
- [ ] Join the #coffee-chats channel for random coffee breaks
|
||||
- [ ] Schedule a chat with every member of your team to get to know them 💜
|
||||
|
||||
**Understand what we do ❓**
|
||||
|
||||
- [ ] Take some time to navigate on our Notion pages 🧭
|
||||
- [ ] Get your access to our product to play with it - follow the guide XXXX
|
||||
@@ -1,52 +0,0 @@
|
||||
### **Objective**:
|
||||
|
||||
Provide clear and constructive feedback, encourage growth and development and
|
||||
align individual goals with company objectives.
|
||||
|
||||
### **Review schedule**
|
||||
|
||||
- **Frequency**: Conduct performance reviews **semi-annually** (every 6 months).
|
||||
- **Duration**: Each review meeting should last between **30 minutes to 1
|
||||
hour**.
|
||||
- **Preparation time**: Allow managers and employees at least **one week** to
|
||||
prepare for the review.
|
||||
|
||||
### **Components**
|
||||
|
||||
- **Self-assessment:** Employees complete a self-assessment form highlighting
|
||||
their achievements, challenges and areas for improvement.
|
||||
- **Manager feedback:** Managers evaluate employee performance based on their
|
||||
responsibilities and taks, their growth, their collaboration and their
|
||||
alignment with the company value.
|
||||
- **Goal setting:** Employees and managers review progress on previously set
|
||||
goals and set 2-3 clear, measurable goals for the next period.
|
||||
|
||||
### **Process**
|
||||
|
||||
1. **Preparation**:
|
||||
|
||||
Distribute a **performance review template** (self-assessment + manager
|
||||
evaluation) one week before the review: employee and manager complete their
|
||||
sections.
|
||||
|
||||
[Performance review template](https://www.notion.so/Performance-review-template-13f1cc0bd5bc801f8b58fbc8679b4b02?pvs=21)
|
||||
|
||||
2. **Review meeting (1o1)**:
|
||||
|
||||
**Start Positive**: Begin with recognition of the employee’s contributions
|
||||
and strengths.
|
||||
|
||||
**Discuss Feedback**: Review the self-assessment and manager’s evaluation -
|
||||
for each, examples of successes or areas for improvement are expected.
|
||||
|
||||
**Collaborative Goal Setting**: Discuss growth opportunities and align new
|
||||
goals. Are training or support needed?
|
||||
|
||||
3. **Commit**:
|
||||
|
||||
Commit on the outcome of the discussion by filling in the Performance Review
|
||||
Template
|
||||
|
||||
### **Documentation**
|
||||
|
||||
Maintain a confidential records of the performance reviews.
|
||||
@@ -1,10 +0,0 @@
|
||||
1. Initial screen (with talent partner) - 30min
|
||||
2. Technical interview (with hiring manager) - 30min/1h
|
||||
3. Home assignment - 3/4h
|
||||
4. Assignment review (with hiring manager and one team member) - 1h
|
||||
5. Check-in call (with talent partner) -15min
|
||||
6. Final interviews: culture fit and deep dive (5 team members and a founder) -
|
||||
2x30min + 1h
|
||||
7. Reference checks - variable, based on position
|
||||
8. Offer call (with talent partner) - 30min
|
||||
9. Hire
|
||||
@@ -1,30 +0,0 @@
|
||||
---
|
||||
id: "PHY.FAC.001"
|
||||
category: "physical/facilities"
|
||||
revision-version: 1
|
||||
revision-date: "2024-01-13"
|
||||
estimate-time: "15m"
|
||||
necessity: "optional"
|
||||
frameworks:
|
||||
- name: "soc2"
|
||||
sections: ["CC6.4"]
|
||||
---
|
||||
|
||||
# Cloud datacenter physical security
|
||||
|
||||
## Purpose
|
||||
|
||||
You know how critical a data center is. You don’t want unauthorized people to
|
||||
access it.
|
||||
|
||||
## Implementation
|
||||
|
||||
### Google Cloud Platform
|
||||
|
||||
Nothing, it is already done
|
||||
|
||||
> Evidence to provide: https://cloud.google.com/trust-center?hl=en
|
||||
|
||||
## Evidence
|
||||
|
||||
- Security document of your datacenter.
|
||||
@@ -1,36 +0,0 @@
|
||||
---
|
||||
id: "PHY.FAC.002"
|
||||
category: "physical/facilities"
|
||||
revision-version: 1
|
||||
revision-date: "2024-01-13"
|
||||
estimate-time: "30m"
|
||||
necessity: "mandatory"
|
||||
frameworks:
|
||||
- name: "soc2"
|
||||
sections: ["CC6.4"]
|
||||
---
|
||||
|
||||
# Implement Physical Access Control
|
||||
|
||||
## Purpose
|
||||
|
||||
Even if you do most of your business online, you still have offices, computers
|
||||
or even printed document: you need to make sure those assets are physically
|
||||
secured (we will focus on the digital access later).
|
||||
|
||||
## Implementation
|
||||
|
||||
If you are working from a co-working space or subleasing offices, you don’t have
|
||||
much do to. Provide a link to their access policy and the dashboard they
|
||||
probably provide to manage the list of authorized personnel.
|
||||
|
||||
If you have your own office space, you need to provide:
|
||||
|
||||
- The security system/measure you implemented (badge, pin, etc…) - select the
|
||||
right element in the evidence section.
|
||||
- The dashboard where you track authorized personnel.
|
||||
|
||||
## Evidence
|
||||
|
||||
- Access policy document from your co-working provider.
|
||||
- Screenshot of the dashboard with a list of authorized personnel.
|
||||
@@ -1,28 +0,0 @@
|
||||
---
|
||||
id: "PHY.FAC.003"
|
||||
category: "physical/facilities"
|
||||
revision-version: 1
|
||||
revision-date: "2024-01-13"
|
||||
estimate-time: "15m"
|
||||
necessity: "mandatory"
|
||||
frameworks:
|
||||
- name: "soc2"
|
||||
sections: ["CC6.4"]
|
||||
---
|
||||
|
||||
# Implement Visitor Access Policies
|
||||
|
||||
## Purpose
|
||||
|
||||
Even if you do most of your business online, you still have offices, computers
|
||||
or even printed document: you need to make sure those assets are physically
|
||||
secured (we will focus on the digital access later) regarding visitors.
|
||||
|
||||
## Implementation
|
||||
|
||||
Nothing, it is done! The element below will be added to your access policy.
|
||||
|
||||
## Evidence
|
||||
|
||||
Visitors must be accompanied by an employee at all times when they are on
|
||||
premises.
|
||||
@@ -1,35 +0,0 @@
|
||||
---
|
||||
id: "PHY.FAC.004"
|
||||
category: "physical/facilities"
|
||||
revision-version: 1
|
||||
revision-date: "2024-01-13"
|
||||
estimate-time: "4h"
|
||||
necessity: "optional"
|
||||
frameworks:
|
||||
- name: "soc2"
|
||||
sections: ["CC6.1", "CC6.6", "CC6.7"]
|
||||
---
|
||||
|
||||
# Use VPNs to Secure Access for Remote Devices
|
||||
|
||||
## Purpose
|
||||
|
||||
In short, implementing a VPN will encrypt your data and ensure a safe
|
||||
transmission between your employees devices and your internal network (even when
|
||||
using untrusted networks like a public wifi) ⇒ it offers a layer of security for
|
||||
your data.
|
||||
|
||||
## Implementation
|
||||
|
||||
> If you have doubt whether you should do it or not, ping us on Discord. <br/>
|
||||
> If everything is on Google Suite/Notion/Slack with MFA and you don’t have your
|
||||
> own network => no needed.
|
||||
|
||||
If you think you need one, you should consider deploying one and make it
|
||||
mandatory when working remote => You can follow the
|
||||
[Wireguard installation guide there](https://www.wireguard.com/install/).
|
||||
|
||||
## Evidence
|
||||
|
||||
- Screenshot of VPN settings page (to show active use) or log of VPN connection
|
||||
from employees device.
|
||||
@@ -1,26 +0,0 @@
|
||||
# Secure your offices and internet access
|
||||
|
||||
Start by assessing whether your team works from a physical office or operates
|
||||
remotely, as this will guide your approach to securing the workspace.
|
||||
|
||||
## Why does it matter?
|
||||
|
||||
Unauthorized access to your office or network can lead to serious consequences
|
||||
such as data theft, or other serious issues. Protecting both physical and
|
||||
digital environments is essential to mitigate those risks.
|
||||
|
||||
## How can I proceed?
|
||||
|
||||
We break this into two main areas of focus:
|
||||
|
||||
1. **Office Security:** Ensure that the access to your office is secured against
|
||||
unauthorized entry.
|
||||
2. **Internet Security:** Ensure that members of your teams or contractors that
|
||||
work remotely have a secure access to internet.
|
||||
|
||||
## Mitigations
|
||||
|
||||
- [Cloud datacenter physical security](PHY.FAC.001_cloud_datacenter_physical_security.md)
|
||||
- [Implement Physical Access Control](PHY.FAC.002_physical_access_control.md)
|
||||
- [Implement Visitor Access Policies](PHY.FAC.003_visitor_access_policy.md)
|
||||
- [Use VPNs to Secure Access for Remote Devices](PHY.FAC.004_virtual_private_network.md)
|
||||
@@ -1,45 +0,0 @@
|
||||
---
|
||||
id: "PHY-HW-001"
|
||||
category: "physical/hardware"
|
||||
revision-version: 1
|
||||
revision-date: "2024-01-08"
|
||||
estimate-time: "30m"
|
||||
necessity: "mandatory"
|
||||
frameworks:
|
||||
- name: "soc2"
|
||||
sections: ["CC2.1", "CC6.1", "CC6.6", "CC6.7", "CC6.8", "CC7.1", "CC7.2"]
|
||||
---
|
||||
|
||||
# Configure Anti-malware Protection on Employee Devices
|
||||
|
||||
## Purpose
|
||||
|
||||
Ensure all employee devices have active malware protection to prevent
|
||||
unauthorized and malicious software installation, protecting company data and
|
||||
systems from malware-based threats.
|
||||
|
||||
## Implementation
|
||||
|
||||
### MacOS
|
||||
|
||||
1. Verify Gatekeeper is enabled (default)
|
||||
- System Settings → Privacy & Security
|
||||
- Ensure App Store and identified developers option
|
||||
|
||||
### Windows
|
||||
|
||||
1. Enable Windows Defender
|
||||
- Settings → Update & Security → Windows Security
|
||||
- Real-time protection enabled
|
||||
|
||||
## Evidence
|
||||
|
||||
**Option 1**: MDM solution
|
||||
|
||||
- Screenshot of fleet malware protection status
|
||||
- Configuration compliance reports
|
||||
|
||||
**Option 2**: Manual Documentation
|
||||
|
||||
- Device inventory with protection status
|
||||
- Configuration screenshots
|
||||
@@ -1,50 +0,0 @@
|
||||
---
|
||||
id: "PHY.HW.002"
|
||||
category: "physical/hardware"
|
||||
revision-version: 1
|
||||
revision-date: "2024-01-08"
|
||||
estimate-time: "30m"
|
||||
necessity: "mandatory"
|
||||
frameworks:
|
||||
- name: "soc2"
|
||||
sections: ["CC2.1", "CC6.1", "CC6.6", "CC6.7", "CC6.8", "CC7.1", "CC7.2"]
|
||||
---
|
||||
|
||||
# Configure Automatic Screen Lock on Employee Devices
|
||||
|
||||
## Purpose
|
||||
|
||||
Implement automatic screen lock on all employee devices to prevent unauthorized
|
||||
access when devices are unattended, protecting against physical access to
|
||||
company data and resources.
|
||||
|
||||
## Implementation
|
||||
|
||||
### All Devices
|
||||
|
||||
1. Configure automatic screen lock:
|
||||
- Maximum 5-minute timeout
|
||||
- Require password/biometrics to unlock
|
||||
- Disable bypass options
|
||||
|
||||
### MacOS
|
||||
|
||||
1. Apple menu → System Settings → Lock Screen
|
||||
2. Enable "Require password after screen saver begins"
|
||||
|
||||
### Windows
|
||||
|
||||
1. Settings → Personalization → Lock screen
|
||||
2. Enable "Require sign-in when PC wakes"
|
||||
|
||||
## Evidence
|
||||
|
||||
**Option 1**: MDM Solution
|
||||
|
||||
- Screen lock policy compliance report
|
||||
- Configuration status dashboard
|
||||
|
||||
**Option 2**: Manual Documentation
|
||||
|
||||
- Screenshots of screen lock settings
|
||||
- Device compliance checklist
|
||||
@@ -1,43 +0,0 @@
|
||||
---
|
||||
id: "PHY.HW.003"
|
||||
category: "physical/hardware"
|
||||
revision-version: 1
|
||||
revision-date: "2024-01-08"
|
||||
estimate-time: "30m"
|
||||
necessity: "mandatory"
|
||||
frameworks:
|
||||
- name: "soc2"
|
||||
sections: ["CC2.1", "CC6.1", "CC6.6", "CC6.7", "CC6.8", "CC7.1", "CC7.2"]
|
||||
---
|
||||
|
||||
# Configure Disk Encryption and Firewall on Employee Devices
|
||||
|
||||
## Purpose
|
||||
|
||||
Ensure all employee devices have disk encryption and firewall protection enabled
|
||||
to secure data at rest and protect network communications from unauthorized
|
||||
access.
|
||||
|
||||
## Implementation
|
||||
|
||||
### MacOS
|
||||
|
||||
1. Enable FileVault
|
||||
- System Settings → Privacy & Security
|
||||
|
||||
### Windows
|
||||
|
||||
1. Enable BitLocker
|
||||
- Control Panel → System and Security
|
||||
|
||||
## Evidence
|
||||
|
||||
**Option 1**: MDM Solution
|
||||
|
||||
- Encryption status report
|
||||
- Device inventory status
|
||||
|
||||
**Option 2**: Manual Documentation
|
||||
|
||||
- Screenshots of encryption status
|
||||
- Device inventory with status
|
||||
@@ -1,25 +0,0 @@
|
||||
# Manage your computers
|
||||
|
||||
## Why does it matter?
|
||||
|
||||
Your company devices have the potential to store or process data ⇒ If someone
|
||||
lose his laptop or it gets compromised, it can expose you to a data leak (and a
|
||||
few other things)
|
||||
|
||||
## How can I proceed?
|
||||
|
||||
You have to make sure that every device is properly set-up. To monitor things,
|
||||
the easiest way is to leverage a Mobile Device Management software (MDM), but if
|
||||
you are early in your development, proper guidelines are enough. On each
|
||||
machine, you need:
|
||||
|
||||
- Screenlock is enabled
|
||||
- Firewall is active
|
||||
- Anti-malware detection is active
|
||||
- Data is encrypted
|
||||
|
||||
## Mitigations
|
||||
|
||||
- [Configure Anti-malware Protection on Employee Devices](PHY.HW.001_endpoint_antimalware.md)
|
||||
- [Configure Automatic Screen Lock on Employee Devices](PHY.HW.002_device_screen_lock.md)
|
||||
- [Configure Disk Encryption and Firewall on Employee Devices](PHY.HW.003_device_encryption.md)
|
||||
@@ -1,31 +0,0 @@
|
||||
---
|
||||
id: "TRA.001"
|
||||
category: "transparency"
|
||||
revision-version: 1
|
||||
revision-date: "2024-01-15"
|
||||
estimate-time: "1h"
|
||||
necessity: "mandatory"
|
||||
frameworks:
|
||||
- name: "soc2"
|
||||
sections: ["CC2.3"]
|
||||
---
|
||||
|
||||
# Have a security page
|
||||
|
||||
## Purpose
|
||||
|
||||
Having SOC-2 for yourself is useless, you want to leverage it as much as
|
||||
possible.
|
||||
|
||||
## Implementation
|
||||
|
||||
Something simple!
|
||||
|
||||

|
||||
|
||||
People need to know how to contact you if there is an incident or want access to
|
||||
your trust center.
|
||||
|
||||
## Evidence
|
||||
|
||||
- Link to your security page
|
||||
@@ -1,30 +0,0 @@
|
||||
---
|
||||
id: "TRA.002"
|
||||
category: "transparency"
|
||||
revision-version: 1
|
||||
revision-date: "2024-01-15"
|
||||
estimate-time: "1h"
|
||||
necessity: "mandatory"
|
||||
frameworks:
|
||||
- name: "soc2"
|
||||
sections: ["CC2.3"]
|
||||
---
|
||||
|
||||
# Clearly explain your services
|
||||
|
||||
## Purpose
|
||||
|
||||
Here, we are not enhancing security, we are helping the auditor be more
|
||||
efficient. As part of the audit, he/she will need to understand clear boundaries
|
||||
for the audit, identify the relevant risk and then check how you mitigate them.
|
||||
|
||||
A proper service description is key for your customers, but it also help the
|
||||
auditor understands what your customers are expecting from you.
|
||||
|
||||
## Implementation
|
||||
|
||||
Nothing, everything should already be on your website for customers to see.
|
||||
|
||||
## Evidence
|
||||
|
||||
- Website link
|
||||
@@ -1,33 +0,0 @@
|
||||
---
|
||||
id: "TRA.002"
|
||||
category: "transparency"
|
||||
revision-version: 1
|
||||
revision-date: "2024-01-15"
|
||||
estimate-time: "1h"
|
||||
necessity: "mandatory"
|
||||
frameworks:
|
||||
- name: "soc2"
|
||||
sections: ["CC2.3"]
|
||||
---
|
||||
|
||||
# External support available
|
||||
|
||||
## Purpose
|
||||
|
||||
External support is not required for SOC 2, but it enhances transparency by
|
||||
showcasing your security practices, policies, and compliance efforts, building
|
||||
trust with customers and stakeholders. - Ultimately, this is what SOC 2 is
|
||||
about: reassuring your prospect and customer on how you work.
|
||||
|
||||
## Implementation
|
||||
|
||||
Create and maintain a complete list of support resources (eg. user guides,
|
||||
technical documentation) for all your services.
|
||||
|
||||
Ensure easy access to those resources and keep them up to date.
|
||||
|
||||
## Evidence
|
||||
|
||||
- If not publicly available, drop a screenshot from your knowledge base showing
|
||||
everything you cover (especially security)
|
||||
- Link to your public documentation
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 461 KiB |
Reference in New Issue
Block a user