Skip to content

Commit 9504edf

Browse files
author
Dan Costello
committed
Images
1 parent 201bad0 commit 9504edf

32 files changed

Lines changed: 213 additions & 323 deletions

app/docs/layout.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ export default function Layout({ children }: { children: ReactNode }) {
3131
],
3232
},
3333
};
34-
console.log(options);
34+
3535
return (
3636
<DocsLayout {...options}>
3737
{children}

content/docs/data-access/definitions/access-policies.md

Lines changed: 6 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -12,34 +12,18 @@ Access Policies control the circumstances under which data can be retrieved or e
1212

1313
Access Policies are executed in three places in UserClouds:
1414

15-
- Every <<glossary:accessor>> (read path) is associated with an access policy that controls access for each target user record and filters the records in the response accordingly.
16-
- Every <<glossary:mutator>> (write path) is associated with an access policy that governs whether the write is allowed.
17-
- Every <<glossary:token>> is associated with an access policy that governs the circumstances in which the token can be exchanged for the original data ("resolved").
15+
- Every <glossary>accessor</glossary> (read path) is associated with an access policy that controls access for each target user record and filters the records in the response accordingly.
16+
- Every <glossary>mutator</glossary> (write path) is associated with an access policy that governs whether the write is allowed.
17+
- Every <glossary>token</glossary> is associated with an access policy that governs the circumstances in which the token can be exchanged for the original data ("resolved").
1818

1919
In addition, two special types of access policies are available:
2020

21-
- **Column Default Access Policies**: These policies are associated with specific columns and are applied by default to all reads that extract data from those columns. They ensure consistent application of access rules for sensitive data, such as automatically applying a role check to the SSN column. They can be overridden for individual accessors. Learn more [here](https://docs.userclouds.com/docs/protect-a-column-with-defaults).
22-
- **Global Baseline Access Policies**: These policies are applied by default to all reads, providing a consistent security baseline. For example, a global policy might always require a valid token or restrict access to trusted IP addresses. They cannot be overridden. Learn more [here](https://docs.userclouds.com/docs/apply-global-protection-policies).
21+
- **Column Default Access Policies**: These policies are associated with specific columns and are applied by default to all reads that extract data from those columns. They ensure consistent application of access rules for sensitive data, such as automatically applying a role check to the SSN column. They can be overridden for individual accessors. Learn more [here](https://docs.userclouds.com/docs/protect-a-column-with-defaults).
22+
- **Global Baseline Access Policies**: These policies are applied by default to all reads, providing a consistent security baseline. For example, a global policy might always require a valid token or restrict access to trusted IP addresses. They cannot be overridden. Learn more [here](https://docs.userclouds.com/docs/apply-global-protection-policies).
2323

2424
Access policies provide central, fine-grained control over sensitive data access. They can evaluate purpose, identity, authorization, location, , and more. They can range from simple "always allow resolution" policies to complex evaluations.
2525

26-
[block:image]
27-
{
28-
"images": [
29-
{
30-
"image": [
31-
"https://files.readme.io/0f48153-Diagram_showing_an_access_policy.png",
32-
"",
33-
"Access policies give you central, fine-grained control over sensitive data access. Policies can evaluate purpose, identity, permissions, location, expiration timelines, rate limits and more."
34-
],
35-
"align": "center",
36-
"sizing": "400px",
37-
"caption": "Access policies give you central, fine-grained control over sensitive data access. Policies can evaluate purpose, identity, permissions, location, expiration timelines, rate limits and more."
38-
}
39-
]
40-
}
41-
[/block]
42-
26+
![Access policies give you central, fine-grained control over sensitive data access. Policies can evaluate purpose, identity, permissions, location, expiration timelines, rate limits and more.](/assets/images/what-userclouds-does.webp)
4327

4428
## Example Use Cases
4529

content/docs/data-access/definitions/accessors-read-apis.md

Lines changed: 5 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -10,35 +10,21 @@ updatedAt: "Tue Sep 10 2024 16:09:30 GMT+0000 (Coordinated Universal Time)"
1010

1111
Accessors are configurable APIs that allow a client to retrieve data from the user store. Accessors are intended to be use-case specific. For example, you might configure two separate accessors `GetEmailForMarketing` and `GetEmailForAuthentication`. They enforce data usage policies and minimize outbound data from the store for their given use case.
1212

13-
As an example of data minimization, you might configure an accessor called `GetPhoneCountryCodeForAnalytics` that returns the country code of a user's phone number when called, instead of the raw phone number. This reduces the sensitivity of the data outside your store, minimizing your surface area for an attack and simplifying compliance.
13+
As an example of data minimization, you might configure an accessor called `GetPhoneCountryCodeForAnalytics` that returns the country code of a user's phone number when called, instead of the raw phone number. This reduces the sensitivity of the data outside your store, minimizing your surface area for an attack and simplifying compliance.
1414

1515
Accessors can be configured to access either live or soft-deleted data. Soft-deleted data is data that has been deleted but is temporarily retained for a narrow set of purposes, e.g. fraud investigations. See [Data Lifecycle](https://docs.userclouds.com/docs/data-lifecycle) for more details.
1616

1717
## What Accessors Do
1818

19-
[block:image]
20-
{
21-
"images": [
22-
{
23-
"image": [
24-
"https://files.readme.io/661fa9a-Diagram_of_what_userclouds_does.jpg",
25-
"",
26-
""
27-
],
28-
"align": "center"
29-
}
30-
]
31-
}
32-
[/block]
33-
19+
![What UserClouds Does](/assets/images/what-userclouds-does.webp)
3420

3521
## How Accessors Work
3622

3723
1. Data, <<glossary:consent>>s and <<glossary:purpose>>s are stored inside the safety layer boundary (either in UserClouds User Store or an owned-and-operated database like RDS)
3824
2. Data consumers request access by sending context, like purpose or identity, to a use-case specific <<glossary:accessor>> API
3925
3. Several access policies are evaluated for each user record, using the data passed in <<glossary:context>> and data in the user object:
40-
1. **Global baseline policy for accessors**: Applied to ensure baseline security. Learn more [here](https://docs.userclouds.com/docs/apply-global-protection-policies).
41-
2. **Column-default access policies**: Column default policies for all columns accessed by the accessor are applied, unless overridden. Learn more [here](https://docs.userclouds.com/docs/protect-a-column-with-defaults).
26+
1. **Global baseline policy for accessors**: Applied to ensure baseline security. Learn more [here](https://docs.userclouds.com/docs/apply-global-protection-policies).
27+
2. **Column-default access policies**: Column default policies for all columns accessed by the accessor are applied, unless overridden. Learn more [here](https://docs.userclouds.com/docs/protect-a-column-with-defaults).
4228
3. **Accessor-specific access policy composition**: Applied in addition to the above policies.
4329
4. User data is further filtered according to whether the users have consented to the accessor's data processing purpose.
4430
5. For records where access is granted, the accessor's <<glossary:data transformer>>s transform each column of the outbound data, minimizing the data for the given use case. If no transformer is specified for a given column, the column's default transformer is used. Learn more [here](https://docs.userclouds.com/docs/protect-a-column-with-defaults).
@@ -48,7 +34,7 @@ Accessors can be configured to access either live or soft-deleted data. Soft-del
4834
At creation time, each accessor is associated with a user record <<glossary:selector>>, a set of <<glossary:column>>s, a set of <<glossary:data transformer>>s, a <<glossary:purpose>> and an <<glossary:access policy>>.
4935

5036
- The user record <<glossary:selector>> is a SQL-like clause that specifies which records the accessor should return data for, based on an array of values that are passed at execution time. The accessor's response will only include users that have consented to the accessor's purpose for all non-<<glossary:system column>>s used in the selector. Since UserClouds does not store consents for <<glossary:system column>>s, they can be referenced in the selector regardless of accessor purpose / user consents.
51-
- The columns indicate which data fields the accessor will retrieve.
37+
- The columns indicate which data fields the accessor will retrieve.
5238
- Each column is associated with a transformer, which tokenizes, minimizes or otherwise obscures the outbound data from that column.
5339
- The purpose is selected from your company's list of data processing purposes. This indicates what the accessor will be used for, e.g. marketing. The accessor will run a <<glossary:purpose check>>, filtering out user records and data for which the user has not consented to the specified purpose across all columns. The accessor's response will only include users that have consented to the accessor's purpose for all columns being retrieved, and all non-system columns used in the selector. Learn more [here](https://docs.userclouds.com/docs/purpose-and-consent).
5440
- The access policy determines the circumstances in which the data can be retrieved. Access policies run on each user record and filter out user records which fail the access policy.

content/docs/data-access/definitions/transformers-1.md

Lines changed: 3 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -10,22 +10,7 @@ updatedAt: "Tue Sep 10 2024 18:37:33 GMT+0000 (Coordinated Universal Time)"
1010

1111
Transformers are re-usable functions that manipulate data in UserClouds. They allow you to minimize the data that you pass or store for each use case. This is key for complying with the data minimization principles in regulations like GDPR.
1212

13-
[block:image]
14-
{
15-
"images": [
16-
{
17-
"image": [
18-
"https://files.readme.io/6d22973-Frame_1006.png",
19-
"",
20-
"Transformers can be arbitrarily smart about how they obfuscate data."
21-
],
22-
"align": "center",
23-
"sizing": "400px",
24-
"caption": "Transformers can be arbitrarily smart about how they obfuscate data."
25-
}
26-
]
27-
}
28-
[/block]
13+
![Transformers can be arbitrarily smart about how they obfuscate data.](/assets/images/user-data.webp)
2914

3015

3116
Transformers allow you to retain select structure and information from the raw data for different use cases, like sorting alphabetically, zip code analysis or simply flowing through your systems without triggering validation errors. For example, if you want to conduct analysis assessing the differences in behavior between children and adults, you may use a data transformer to pass a string indicating `child` or `adult`, instead of pulling raw Date of Birth from the store.
@@ -45,22 +30,7 @@ In addition, column default transformers provide a way to consistently apply tra
4530

4631
Transformers range from the simplest UUID function that replaces any given data with a unique identifier, to custom-written Javascript that runs in a carefully-controlled sandbox.
4732

48-
[block:image]
49-
{
50-
"images": [
51-
{
52-
"image": [
53-
"https://files.readme.io/22f49cc-spaces_66DzLwptb2SejhKV7Bhn_uploads_QrLi9YP9CtHG5gAgEQrd_image.webp",
54-
null,
55-
"One simple transformer receives raw data, and creates a UUID token."
56-
],
57-
"align": "center",
58-
"caption": "One simple transformer receives raw data, and creates a UUID token."
59-
}
60-
]
61-
}
62-
[/block]
63-
33+
![One simple transformer receives raw data, and creates a UUID token.](https://files.readme.io/22f49cc-spaces_66DzLwptb2SejhKV7Bhn_uploads_QrLi9YP9CtHG5gAgEQrd_image.webp)
6434

6535
Let’s look at four possible transformers, to see how transformers work.
6636

@@ -93,22 +63,7 @@ A transformer consists of:
9363
- `Transform Function` - a transform function with the signature `func(data Object, parameters Object) (Token | error)`
9464
- `Transform Parameters` - a static JSON object (not containing un-encoded PII) that is available at runtime, allowing you to parameterize and reuse functions like "obfuscate all but the first X letters of these emails"
9565

96-
[block:image]
97-
{
98-
"images": [
99-
{
100-
"image": [
101-
"https://files.readme.io/f14e1c2-image_1.png",
102-
null,
103-
"The PreserveCommonValue parameter allows you to optionally preserve common email domains (like gmail.com). Rare domains, like userclouds.com, will be obscured."
104-
],
105-
"align": "center",
106-
"caption": "The PreserveCommonValue parameter allows you to optionally preserve common email domains (like gmail.com). Rare domains, like userclouds.com, will be obscured."
107-
}
108-
]
109-
}
110-
[/block]
111-
66+
![The PreserveCommonValue parameter allows you to optionally preserve common email domains (like gmail.com). Rare domains, like userclouds.com, will be obscured.](https://files.readme.io/f14e1c2-image_1.png)
11267

11368
## Managing Transformers
11469

content/docs/data-access/how-to-guides/create-a-transformer.md

Lines changed: 3 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -12,21 +12,7 @@ Transformers are re-usable JavaScript functions that manipulate data in UserClou
1212

1313
Transformers can be managed in the User Store page of the UserClouds Console, or via the UserClouds API.
1414

15-
[block:image]
16-
{
17-
"images": [
18-
{
19-
"image": [
20-
"https://files.readme.io/d78d5ab-image_8.png",
21-
null,
22-
"Transformers can be managed from the Policies page in the UserClouds Console"
23-
],
24-
"align": "center",
25-
"caption": "Transformers can be managed from the Policies page in the UserClouds Console"
26-
}
27-
]
28-
}
29-
[/block]
15+
![Transformers can be managed from the Policies page in the UserClouds Console](https://files.readme.io/d78d5ab-image_8.png)
3016

3117

3218
## How Transformers Work
@@ -49,7 +35,7 @@ Remember to convert these strings into the JavaScript objects or primitives that
4935

5036
## Creating a transformer in UserClouds Console
5137

52-
To create a transformer in UserClouds, go to the Policies page, accessible from the sidebar in Console, and click Create Transformer.
38+
To create a transformer in UserClouds, go to the Policies page, accessible from the sidebar in Console, and click Create Transformer.
5339

5440
**1 Name and Describe the Transformer**
5541

@@ -71,21 +57,7 @@ Transformers should be written to act on a single piece of data. UserClouds nati
7157

7258
Finally, test your transformer by adding raw data to the "Data" field and clicking "Run Test". Once you are happy with the test results, click "Save Transformer" to finish.
7359

74-
[block:image]
75-
{
76-
"images": [
77-
{
78-
"image": [
79-
"https://files.readme.io/bee6a69-image_9.png",
80-
null,
81-
"The Create Transformer Page"
82-
],
83-
"align": "center",
84-
"caption": "The Create Transformer Page"
85-
}
86-
]
87-
}
88-
[/block]
60+
![The Create Transformer Page](https://files.readme.io/bee6a69-image_9.png)
8961

9062

9163
## Creating a transformer via the API

content/docs/data-access/how-to-guides/create-an-access-policy.md

Lines changed: 8 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -16,21 +16,7 @@ New access policies can be created by writing a new policy or template from scra
1616

1717
Access policies and templates are managed under the Access Rules element in the UserClouds Console sidebar.
1818

19-
[block:image]
20-
{
21-
"images": [
22-
{
23-
"image": [
24-
"https://files.readme.io/184bfbc-image_4.png",
25-
null,
26-
"Policies and templates can be managed from the Policies page, accessible from the sidebar of UserClouds Console."
27-
],
28-
"align": "center",
29-
"caption": "Policies and templates can be managed from the Policies page, accessible from the sidebar of UserClouds Console."
30-
}
31-
]
32-
}
33-
[/block]
19+
![Policies and templates can be managed from the Policies page, accessible from the sidebar of UserClouds Console.](https://files.readme.io/184bfbc-image_4.png)
3420

3521

3622
## Creating Policy Templates in the UI
@@ -41,42 +27,14 @@ Policy templates are parametrizable functions that can be parametrized to create
4127

4228
Specify a name, a description and a javascript function for your policy. The javascript function may optionally accept parameters, which you can test below.
4329

44-
[block:image]
45-
{
46-
"images": [
47-
{
48-
"image": [
49-
"https://files.readme.io/085e410-image_5.png",
50-
null,
51-
"The Create Policy Template page."
52-
],
53-
"align": "center",
54-
"caption": "The Create Policy Template page."
55-
}
56-
]
57-
}
58-
[/block]
30+
![The Create Policy Template page.](https://files.readme.io/085e410-image_5.png)
5931

6032

6133
**2 Test and save your policy template**
6234

6335
Use the "Test Your Draft" card at the bottom of the page to test your policy template. You can add test parameters to simulate turning the policy template into an access policy, and then test that access policy with test context. The interface will show the result of your test as "Access Allowed" or "Access Denied".
6436

65-
[block:image]
66-
{
67-
"images": [
68-
{
69-
"image": [
70-
"https://files.readme.io/ef73d2e-spaces_66DzLwptb2SejhKV7Bhn_uploads_oGa62N4DTjIR8mFABEN5_image.webp",
71-
null,
72-
"The \"Test Your Draft\" card allows you to parametrize your draft template (creating an access policy) and then test that access policy with test context."
73-
],
74-
"align": "center",
75-
"caption": "The \"Test Your Draft\" card allows you to parametrize your draft template (creating an access policy) and then test that access policy with test context."
76-
}
77-
]
78-
}
79-
[/block]
37+
![The "Test Your Draft" card allows you to parametrize your draft template (creating an access policy) and then test that access policy with test context.](https://files.readme.io/ef73d2e-spaces_66DzLwptb2SejhKV7Bhn_uploads_oGa62N4DTjIR8mFABEN5_image.webp)
8038

8139

8240
## Creating Access Policies in the UI
@@ -87,42 +45,14 @@ To create a new access policy, click "Create Policy" from the Policies page, acc
8745

8846
**2 Set your <<glossary:access policy>> name and description**
8947

90-
Next, add a name and a description for your policy.
91-
92-
[block:image]
93-
{
94-
"images": [
95-
{
96-
"image": [
97-
"https://files.readme.io/e0bf498-image_6.png",
98-
null,
99-
"The Create Access Policy page in UserClouds Console."
100-
],
101-
"align": "center",
102-
"caption": "The Create Access Policy page in UserClouds Console."
103-
}
104-
]
105-
}
106-
[/block]
48+
Next, add a name and a description for your policy.
49+
50+
![The Create Access Policy page in UserClouds Console.](https://files.readme.io/e0bf498-image_6.png)
10751

10852

10953
**3 Compose your policy**
11054

111-
[block:image]
112-
{
113-
"images": [
114-
{
115-
"image": [
116-
"https://files.readme.io/1249f6f-image_7.png",
117-
null,
118-
"The Compose Policy Card"
119-
],
120-
"align": "center",
121-
"caption": "The Compose Policy Card"
122-
}
123-
]
124-
}
125-
[/block]
55+
![The Compose Policy Card](https://files.readme.io/1249f6f-image_7.png)
12656

12757

12858
Next, compose the policy from one or more policies and templates in the "Compose Policy" card.
@@ -149,7 +79,7 @@ Nice job! You created an access policy.
14979

15080
The checkAttribute function runs a permission check against the UserClouds authorization graph. If you are using UserClouds for authorization as a service, this can verify if a user has the necessary permissions. You can read more about this in the Authorization Documentation.
15181

152-
### Example:
82+
### Example
15383

15484
**Use Case: Does the calling user have view permission on the target user?**
15585

0 commit comments

Comments
 (0)