You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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.
12
4
13
5
## New Features
14
6
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.
45
9
46
10
## Compatibility with Prior Versions
47
11
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.
If you are having User Sync access your corporate directory, it
301
314
must be configured to read from the directory server using a
302
315
service account. This service account only needs read access and
@@ -431,7 +444,18 @@ secure them properly**, as described in the
431
444
[Security Considerations](#security-considerations) section of
432
445
this document.
433
446
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)
435
459
436
460
When you have obtained access and set up an integration with User
437
461
Management in the Adobe I/O
@@ -445,7 +469,7 @@ have been assigned to your organization:
445
469
- Technical Account ID
446
470
- Private Certificate
447
471
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
449
473
editor, and enter these values in the “enterprise” section:
450
474
451
475
```YAML
@@ -461,6 +485,19 @@ enterprise:
461
485
specified in `priv_key_path`, and that it is readable only to the
462
486
user account that runs the tool.
463
487
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:
#### Configure connection to your enterprise directory
465
502
466
503
Open your copy of the connector-ldap.yml file in a plain-text
@@ -742,6 +779,7 @@ enterprise:
742
779
client_secret: "Client secret goes here"
743
780
tech_acct: "Tech account ID goes here"
744
781
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
745
783
```
746
784
747
785
### Testing your configuration
@@ -1660,6 +1698,100 @@ reaches the rate limit. It is normal to see messages in the
1660
1698
console indicating that the script has paused for a short amount
1661
1699
of time before trying to execute again.
1662
1700
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:
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
+
1663
1795
### Scheduled task examples
1664
1796
1665
1797
You can use a scheduler provided by your operating system to run
0 commit comments