Skip to content

Commit d3bc921

Browse files
authored
Merge pull request #179 from adobe-apiplatform/v2
Prepare for v2.1rc1 release.
2 parents 43df910 + 0538edb commit d3bc921

File tree

17 files changed

+515
-371
lines changed

17 files changed

+515
-371
lines changed

RELEASE_NOTES.md

Lines changed: 5 additions & 93 deletions
Original file line numberDiff line numberDiff line change
@@ -1,100 +1,12 @@
1-
# Release Notes for User Sync Tool Version 2.0
1+
# Release Notes for User Sync Tool Version 2.1
22

3-
These notes apply to v2.0 of 2017-04-10.
4-
5-
## New Arguments & Configuration Syntax
6-
7-
There has been an extensive overhaul of both the configuration file
8-
syntax and the command-line argument syntax. See
9-
[Issue 95](https://github.com/adobe-apiplatform/user-sync.py/issues/95)
10-
and the [docs](https://adobe-apiplatform.github.io/user-sync.py/)
11-
for details.
3+
These notes apply to v2.1rc1 of 2017-05-05.
124

135
## New Features
146

15-
1. You can now exclude dashboard users from being updated or
16-
deleted by User Sync. See the
17-
[docs](https://adobe-apiplatform.github.io/user-sync.py/) for
18-
details.
19-
2. There is more robust reporting for errors in configuration
20-
files.
21-
3. The log now reports the User Sync version and gives the
22-
details of how it was invoked.
23-
4. You can now create and manage users of all identity types,
24-
including Adobe IDs, both when operating from an LDAP
25-
directory and from CSV files.
26-
5. You can now distinguish, when a customer directory user is
27-
disabled or removed, whether to remove the matching Adobe-side
28-
user's product configurations and user groups, to remove the
29-
user but leave his cloud storage, or to delete his storage as well.
30-
31-
## Significant Bug Fixes
32-
33-
1. There were many bugs fixed related to managing users of
34-
identity types other than Federated ID.
35-
2. There were many bugs fixes related to managing group
36-
membership of all identity types.
37-
3. There was a complete overhaul of how users who have
38-
adobe group memberships in multiple organizations are
39-
managed.
40-
41-
## Changes in Behavior
42-
43-
All options now apply to users of all identity types. Previously,
44-
some had applied only to Federated ID and some to Enterprise ID.
7+
1. We now have full Unicode support. See [Issue 167](https://github.com/adobe-apiplatform/user-sync.py/issues/167) for details.
8+
2. We now support secure handling for all credential settings and credential files. See [Issue 159](https://github.com/adobe-apiplatform/user-sync.py/issues/159) for design discussion, and read [the docs](https://adobe-apiplatform.github.io/user-sync.py/) for associated config changes.
459

4610
## Compatibility with Prior Versions
4711

48-
All existing configuration files, user input files,
49-
and command-line scripts will need to be revamped
50-
to be compatible with the new formats. Here is a quick
51-
cheat sheet of what needs to be done.
52-
53-
### Configuration Files
54-
55-
* replace `dashboard:` with `adobe_users:`
56-
* replace `directory:` with `directory_users:`
57-
* add a `connectors:` section under `adobe_users:` similar
58-
to the one under `directory_users`
59-
* change `owning` to be `umapi` and put it under `connectors`
60-
* if you access multiple organizations, remove
61-
`secondaries`, and put
62-
all the umapi specifications under `umapi` as a list,
63-
like this:
64-
```yaml
65-
adobe_users:
66-
connectors:
67-
umapi:
68-
- primary-config.yml
69-
- org1: org1-config.yml
70-
- org2: org2-config.yml
71-
```
72-
* change `dashboard_groups` to `adobe_groups`
73-
* under `limits`, change `max_missing_users` to
74-
`max_adobe_only_users` and remove all other
75-
settings
76-
* if you have an extension, do the following:
77-
* remove the per-context: user setting
78-
* move all the settings under it to the top level in
79-
a new file, call it `extension.yaml`
80-
* change `extensions` to `extension`, move it into
81-
the `directory_users` section, and put the relative
82-
path to the new `extension.yaml` file as its value.
83-
84-
### User Input Files
85-
86-
If you have a file that lists users for input (`--users file` _f_),
87-
the column head `user` should be changed to `username`.
88-
89-
### Removed User Input Files
90-
91-
The format for files containing users to be removed/deleted has
92-
changed, and you will need to regenerate these files rather than
93-
using any existing ones.
94-
95-
### Command Line Scripts
96-
97-
* All of the options related to Adobe user removal have been
98-
changed to use the new ``--adobe-only-user-action` argument.
99-
* The `--source-filter` argument has been removed. Use the
100-
configuration setting `all_users_filter` instead.
12+
This version is fully backward-compatible with version 2.0. There may be subtle behavioral changes due to bug fixes around support for non-Ascii characters. There are also new configuration file options and a new command line argument that didn't exist in 2.0.

docs/user-manual/index.md

Lines changed: 135 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ title: User Manual
44
advertise: User Manual
55
---
66

7-
Version 2.0, released 2017-03-29
7+
Version 2.1rc1, released 2017-05-05
88

99
This document has all the information you need to get up and
1010
running with User Sync. It presumes familiarity with the use of
@@ -286,6 +286,13 @@ on both the enterprise and Adobe sides, its use involves a number
286286
of different files that contain sensitive information. Great care
287287
should be take to keep these files safe from unauthorized access.
288288

289+
User Sync release 2.1 or later allow you to store credentials in
290+
the operating system's secure credential store as an alternative
291+
to storing them in files and securing those files, or to store
292+
umapi and ldap configuration files in a secure way that you can
293+
define. See section [Security recommendations](#security-recommendations)
294+
for more details.
295+
289296
##### Configuration files
290297

291298
Configuration files must include sensitive information, such as
@@ -297,6 +304,12 @@ able to access them. In particular: do not allow read access to
297304
any file containing sensitive information except from the user
298305
account that runs the sync process.
299306

307+
If you choose to use the operating system to store credentials,
308+
you still create the same configuration files but rather than storing
309+
the actual credentials, they store key ids that are used to look up
310+
the actual credentials. Details are shown in
311+
[Security recommendations](#security-recommendations).
312+
300313
If you are having User Sync access your corporate directory, it
301314
must be configured to read from the directory server using a
302315
service account. This service account only needs read access and
@@ -431,7 +444,18 @@ secure them properly**, as described in the
431444
[Security Considerations](#security-considerations) section of
432445
this document.
433446
434-
#### Configure connection to the Adobe Admin Console
447+
There are three techniques supported by User Sync for securing credentials.
448+
449+
1. Credentials can be placed in the connector-umapi.yml and connector-ldap.yml files directly and the files protected with operating system access control.
450+
2. Credentials can be placed in the operating system secure credential store and referenced from the two configuration files.
451+
3. The two files in their entirety can be stored securely or encrypted and a program that returns their contents is referenced from the main configuration file.
452+
453+
454+
The example configuration files include entries that illustrate each of
455+
these techniques. You would keep only one set of configuration items
456+
and comment out or remove the others.
457+
458+
#### Configure connection to the Adobe Admin Console (UMAPI)
435459
436460
When you have obtained access and set up an integration with User
437461
Management in the Adobe I/O
@@ -445,7 +469,7 @@ have been assigned to your organization:
445469
- Technical Account ID
446470
- Private Certificate
447471
448-
Open your copy of the adobe-user-config.yml file in a plain-text
472+
Open your copy of the connector-umapi.yml file in a plain-text
449473
editor, and enter these values in the “enterprise” section:
450474
451475
```YAML
@@ -461,6 +485,19 @@ enterprise:
461485
specified in `priv_key_path`, and that it is readable only to the
462486
user account that runs the tool.
463487

488+
In User Sync 2.1 or later there is an alternative to storing the private key in a separate file; you can place
489+
the private key directly in the configuration file. Rather than using the
490+
`priv_key_path` key, use `priv_key_data` as follows:
491+
492+
priv_key_data: |
493+
-----BEGIN RSA PRIVATE KEY-----
494+
MIIJKAIBAAKCAge85H76SDKJ8273HHSDKnnfhd88837aWwE2O2LGGz7jLyZWSscH
495+
...
496+
Fz2i8y6qhmfhj48dhf84hf3fnGrFP2mX2Bil48BoIVc9tXlXFPstJe1bz8xpo=
497+
-----END RSA PRIVATE KEY-----
498+
499+
500+
464501
#### Configure connection to your enterprise directory
465502

466503
Open your copy of the connector-ldap.yml file in a plain-text
@@ -742,6 +779,7 @@ enterprise:
742779
client_secret: "Client secret goes here"
743780
tech_acct: "Tech account ID goes here"
744781
priv_key_path: "Path to private.key goes here"
782+
# priv_key_data: "actual key data goes here" # This is an alternative to priv_key_path
745783
```
746784

747785
### Testing your configuration
@@ -1660,6 +1698,100 @@ reaches the rate limit. It is normal to see messages in the
16601698
console indicating that the script has paused for a short amount
16611699
of time before trying to execute again.
16621700

1701+
Starting in User Sync 2.1, there are two additional techniques available
1702+
for protecting credentials. The first uses the operating system credential
1703+
store to store individual configuration credential values. The second uses
1704+
a mechanism you must provide to store the entire configuration file for umapi
1705+
and/or ldap which includes all the credentials required. These are
1706+
detailed in the next two sections.
1707+
1708+
#### Storing Credentials in OS Level Storage
1709+
1710+
To setup User Sync to pull credentials from the Python Keyring OS credential store, set the connector-umapi.yml and connector-ldap.yml files as follows:
1711+
1712+
connector-umapi.yml
1713+
1714+
server:
1715+
1716+
enterprise:
1717+
org_id: your org id
1718+
secure_api_key_key: umapi_api_key
1719+
secure_client_secret_key: umapi_client_secret
1720+
tech_acct: your tech [email protected]
1721+
secure_priv_key_data_key: umapi_private_key_data
1722+
1723+
Note the change of `api_key`, `client_secret`, and `priv_key_path` to `secure_api_key_key`, `secure_client_secret_key`, and `secure_priv_key_data_key`, respectively. These alternate configuration values give the key names to be looked up in the user keychain (or the equivalent service on other platforms) to retrieve the actual credential values. In this example, the credential key names are `umapi_api_key`, `umapi_client_secret`, and `umapi_private_key_data`.
1724+
1725+
The contents of the private key file is used as the value of `umapi_private_key_data` in the credential store.
1726+
1727+
The credential values will be looked up using the specified key names with the user being the org_id value.
1728+
1729+
1730+
connector-ldap.yml
1731+
1732+
username: "your ldap account username"
1733+
secure_password_key: ldap_password
1734+
host: "ldap://ldap server name"
1735+
base_dn: "DC=domain name,DC=com"
1736+
1737+
The LDAP access password will be looked up using the specified key name
1738+
(`ldap_password` in this example) with the user being the specified username
1739+
config value.
1740+
1741+
Credentials are stored in the underlying operating system secure store. The specific storage system depends in the operating system.
1742+
1743+
| OS | Credential Store |
1744+
|------------|--------------|
1745+
|Windows | Windows Credential Vault |
1746+
| Mac OS X | Keychain |
1747+
| Linux | Freedesktop Secret Service or KWallet |
1748+
1749+
On Linux, the secure storage application would have been installed and configured by the OS vendor.
1750+
1751+
The credentials are added to the OS secure storage and given the username and credential id that you will use to specify the credential. For umapi credentials, the username is the organization id. For the LDAP password credential, the username is the LDAP username. You can pick any identifier you wish for the specific credentials; they must match between what is in the credential store and the name used in the configuration file. Suggested values for the key names are shown in the examples above.
1752+
1753+
1754+
#### Storing Credential Files in External Management Systems
1755+
1756+
As an alternative to storing credentials in the local credential store, it is possible to integrate User Sync with some other system or encryption mechanism. To support such integrations, it is possible to store the entire configuration files for umapi and ldap externally in some other system or format.
1757+
1758+
This is done by specifying, in the main User Sync configuration file, a command to be executed whose output is used as the umapi or ldap configuration file contents. You will need to provide the command that fetches the configuration information and sends it to standard output in yaml format, matching what the configuration file would have contained.
1759+
1760+
To set this up, use the following items in the main configuration file.
1761+
1762+
1763+
user-sync-config.yml (showing partial file only)
1764+
1765+
adobe_users:
1766+
connectors:
1767+
# umapi: connector-umapi.yml # instead of this file reference, use:
1768+
umapi: $(read_umapi_config_from_s3)
1769+
1770+
directory_users:
1771+
connectors:
1772+
# ldap: connector-ldap.yml # instead of this file reference, use:
1773+
ldap: $(read_ldap_config_from_server)
1774+
1775+
The general format for external command references is
1776+
1777+
$(command args)
1778+
1779+
The above examples assume there is a command with the name `read_umapi_config_from_s3`
1780+
and `read_ldap_config_from_server` that you have supplied.
1781+
1782+
A command shell is launched by User Sync which
1783+
runs the command. The standard output from the command is captured and that
1784+
output is used as the umapi or ldap configuration file.
1785+
1786+
The command is run with the working directory as the directory containing the configuration file.
1787+
1788+
If the command terminates abnormally, User Sync will terminate with an error.
1789+
1790+
The command can reference a new or existing program or a script.
1791+
1792+
Note: If you use this technique for the connector-umapi.yml file, you will want to embed the private key data in connector-umapi-yml directly by using the priv_key_data key and the private key value. If you use the priv_key_path and the filename containing the private key, you would also need to store the private key somewhere
1793+
secure and have a command that retrieves it in the file reference.
1794+
16631795
### Scheduled task examples
16641796

16651797
You can use a scheduler provided by your operating system to run

examples/config files - basic/1 user-sync-config.yml

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,14 @@ adobe_users:
6565
# location of this configuration file, not relative to the
6666
# working directory of your User Sync process.
6767
umapi: "connector-umapi.yml"
68+
# An alternate form for referencing the umapi configuration allows for storage
69+
# of the umapi credentials in a secure way:
70+
#umapi: $(cat connector-umapi.yml) # This runs the indicated command and uses
71+
# the output as the configuration file. In this example we are simply
72+
# echoing the file contents so it is no more secure than the other form
73+
# of file reference. To make it more secure, you need to provide a
74+
# command or script that fetches the data from a secure source.
75+
# ("cat" would need to be "type" on a Windows platform.)
6876

6977
# The directory_users section controls how enterprise-side users are accessed,
7078
# sets default values for attributes not specified in the enterprise directory,
@@ -122,6 +130,14 @@ directory_users:
122130
# location of this configuration file, not relative to the
123131
# working directory of your User Sync process.
124132
ldap: "connector-ldap.yml"
133+
# An alternate form for referencing the ldap configuration allows for storage
134+
# of the ldap credentials in a secure way:
135+
#ldap: $(cat connector-ldap.yml) # This form runs the indicated command and uses
136+
# the output as the configuration file. In this example we are simply
137+
# echoing the file contents so it is no more secure than the other form
138+
# of file reference. To make it more secure, you need to provide a
139+
# command or script that fetches the data from a secure source.
140+
# ("cat" would need to be "type" on a Windows platform.)
125141

126142
# (optional) csv (no default value)
127143
# csv stands for "comma-separated values", which is the most common form

examples/config files - basic/2 connector-umapi.yml

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,3 +34,25 @@ enterprise:
3434
client_secret: "Client secret goes here"
3535
tech_acct: "Tech account ID goes here"
3636
priv_key_path: "path/to/private/key/file"
37+
38+
# (optional) As an alternative to priv_key_path, you can place the private key
39+
# data directly in this file. To do this, remove the priv_key_path entry above
40+
# and uncomment the following entry. Replace the sample data with the data
41+
# from your private key file (which will be much longer).
42+
#priv_key_data: |
43+
# -----BEGIN RSA PRIVATE KEY-----
44+
# MIIf74jfd84oAgEA6brj4uZ2f1Nkf84j843jfjjJGHYJ8756GHHGGz7jLyZWSscH
45+
# CoifurKJY763GHKL98mJGYxWSBvhlWskdjdatagoeshere986fKFUNGd74kdfuEH
46+
# -----END RSA PRIVATE KEY-----
47+
48+
# (optional) You can store credentials in the operating system credential store
49+
# (Windows Credential Manager, Mac Keychain, Linux Freedesktop Secret Service
50+
# or KWallet - these will be built into the Linux distribution).
51+
# To use this feature, uncomment the following entries and remove the
52+
# api_key, client_secret, and priv_key_data above.
53+
# The actual credential values are placed in the credential store with the
54+
# username as the org_id value, and the key name (perhaps called internet
55+
# or network address) as one of the values below.
56+
#secure_api_key_key: umapi_api_key
57+
#secure_client_secret_key: umapi_client_secret
58+
#secure_priv_key_data_key: umapi_private_key_data

0 commit comments

Comments
 (0)