Skip to content

Commit d2736f7

Browse files
committed
Adding Migration API documentation in
1 parent 2b4cd3e commit d2736f7

File tree

4 files changed

+1544
-0
lines changed

4 files changed

+1544
-0
lines changed
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
---
2+
title: SPO provided Migration Azure container and queue
3+
ms.author: jhendr
4+
author: JoanneHendrickson
5+
manager: pamgreen
6+
ms.date: 6/20/2018
7+
description: "One of the Main requirement for using our Migration API is the usage of an Azure container as a temporary storage. We now provide a default container that can be used for using the migration API."
8+
---
9+
10+
# SPO provided Migration Azure container and queue
11+
12+
Microsoft’s Migration API requires the use of an Azure container for temporary storage. To simplify the process, you are now provided with a default container while using the migration API. If you choose, you can still provide your own Azure container.
13+
14+
## Encryption is required
15+
16+
For the Migration API to accept a Migration Job coming from a SPO provided Azure container, the data needs to be encrypted at rest. The customer is still allowed to provide their own Azure account if they prefer to not use encryption.
17+
18+
## Advantages
19+
20+
|Advantage|Description|
21+
|:-----|:-----|
22+
|Cost of Azure container goes to SPO|Since we are providing the containers, those containers are now part of the basic SharePoint online Offering. Every tenant who signs up for SharePoint Online will get this for free).|
23+
|Containers and queues are unique per request and not reused|Once a container is given to a customer this container will not be reused or shared.|
24+
|Containers and queue are automatically deleted|As per the standard SharePoint Online Compliance, we will destroy the container within 30 to 90 days automatically.|
25+
|Containers and queues are in the customer’s datacenter ___location|We make sure to provision containers that are in the same physical ___location than their SharePoint online tenant.|
26+
|They are obtainable programmatically|There is no need to interact with Azure unless the user chooses.
27+
28+
## How to use it
29+
30+
### Getting Containers
31+
32+
```csharp
33+
public SPProvisionedMigrationContainersInfo ProvisionMigrationContainers()
34+
```
35+
36+
The call will return an object that contains two strings containing two SAS tokens for accessing the two required containers and a byte array for the AES256CBC encryption.
37+
38+
This key will need to be used when encrypting the data. We forget the key once we give it out, therefore you must keep it to pass it again for the Submit Migration Job call.
39+
40+
```csharp
41+
Uri DataContainerUri
42+
43+
Uri MetadataContainer Uri
44+
45+
byte[] EncryptionKey
46+
```
47+
48+
### Getting Queue
49+
50+
```csharp
51+
public SPProvisionedMigrationQueueInfo ProvisionMigrationQueue()
52+
```
53+
54+
This method will return a string containing the SAS token for accessing the Azure queue.
55+
56+
The queue can be reused across multiple migration jobs so this call should not be that frequently as the `SPProvisionedMigrationContainersInfo()` call.
57+
58+
```csharp
59+
Uri JobQueueUri
60+
```
61+
62+
### After getting the Container and the Queue:
63+
64+
Once those calls have been made, the rest of the flow remains the same for using the Migration API.

docs/apis/migration-api-encryption.md

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
---
2+
title: OneDrive for Business and SharePoint Online Migration API – Encryption
3+
ms.author: jhendr
4+
author: JoanneHendrickson
5+
manager: pamgreen
6+
ms.date: 6/20/2018
7+
description: "How to pass encrypted content at rest to the API securely."
8+
---
9+
10+
# OneDrive for Business and SharePoint Online Migration API encryption
11+
12+
Using the Migration API requires a temporary storage container in Azure. This Azure container is already only openable by someone having a SAS key access to the container. The gGoal of this feature is to allow to pass eEncrypted content at rest to the API meaning that even if a malicious user has access to the Container he won’t be able to use its content.
13+
14+
## What is stored in the Azure blob container
15+
16+
The Migration API requires the Azure Container for content passing and also for log and queue reporting back. It can be split down as a summary into those buckets:
17+
18+
Content
19+
20+
- Files
21+
- Manifest
22+
- Metadata
23+
- Permissions
24+
- List items
25+
- Taxonomy
26+
- Logs (created by SharePoint Online to report back on the migration results)
27+
- Queue
28+
- Real time reportig on the progress
29+
30+
## What is the encryption feature?
31+
32+
When using the encryption parameter, everything listed above will be encrypted at rest and the key will need to be preserved in order to read the logs and the real time progress.
33+
The main benefits is making the content useless for a malicious user who would manage to breach into the Azure container.
34+
35+
This comes with a small cost of performance. This feature is optional when using the API and it is recommended to only use it for the most confidential information since it does reduce the speed of the migration by a small portion. Microsoft destroys the key once the migration job is finished and there is no way to recover the key if lost, not even from support.
36+
37+
## As a 3rd party developer how do I take advantage of the Encryption feature?
38+
39+
### Calling the API
40+
41+
The method for calling the Migration Job has a different name and an additional parameter at the end. The new name is: `CreateMigrationJobEncrypted`
42+
43+
The new parameter is: `EncryptionOption`
44+
45+
For now, it only supports receiving an AES256CBC Encryption Key.
46+
47+
Example:
48+
49+
```csharp
50+
public Guid CreateMigrationJobEncrypted(
51+
Guid gWebId,
52+
string azureContainerSourceUri,
53+
string azureContainerManifestUri,
54+
string azureQueueReportUri,
55+
EncryptionOption AES256CBCKey)
56+
```
57+
58+
## Extra requirement
59+
60+
For the encryption, each file must be encrypted and have an IV assigned to it. The encryption method should follow the AES CBC 256 Standard. The IV should be different for every file including the manifests in the package and should be stored as a property on each files.
61+
62+
- Name = [IV]
63+
- Value = [Base64encoded byte array of the IV]
64+
65+
## Reading the queue when encrypted
66+
67+
When using the encryption option, the messages in the queue will also get encrypted.
68+
69+
It is important to remember the Job ID. Without the specific key used for the job, you won’t be able to read the message back.
70+
71+
Here is the JSON content in the queue message
72+
73+
```json
74+
{"Label", "Encrypted"},
75+
{"JobId", "[JobId value]"},
76+
{"IV", "[IV value in base64format]"},
77+
{"Content", "[encrypted message in base64string]"}
78+
```
79+
80+
Once the messages are decrypted, they will be the same as the API without encryption.

0 commit comments

Comments
 (0)