From 88df52edfd97c72021638149be34d3ea9c581ea8 Mon Sep 17 00:00:00 2001 From: Elysa Hall Date: Mon, 23 Dec 2024 18:57:48 +0000 Subject: [PATCH] CLI examples iam, ivs, sts --- ...anizations-root-credentials-management.rst | 16 +++ .../disable-organizations-root-sessions.rst | 16 +++ ...anizations-root-credentials-management.rst | 16 +++ .../enable-organizations-root-sessions.rst | 16 +++ .../iam/list-organizations-features.rst | 17 +++ awscli/examples/ivs/batch-get-channel.rst | 16 ++- awscli/examples/ivs/create-channel.rst | 79 ++++++++++- awscli/examples/ivs/get-channel.rst | 21 ++- awscli/examples/ivs/get-stream-session.rst | 61 ++++++-- awscli/examples/ivs/update-channel.rst | 134 ++++++++++++++++-- awscli/examples/sts/assume-root.rst | 22 +++ 11 files changed, 372 insertions(+), 42 deletions(-) create mode 100644 awscli/examples/iam/disable-organizations-root-credentials-management.rst create mode 100644 awscli/examples/iam/disable-organizations-root-sessions.rst create mode 100644 awscli/examples/iam/enable-organizations-root-credentials-management.rst create mode 100644 awscli/examples/iam/enable-organizations-root-sessions.rst create mode 100644 awscli/examples/iam/list-organizations-features.rst create mode 100644 awscli/examples/sts/assume-root.rst diff --git a/awscli/examples/iam/disable-organizations-root-credentials-management.rst b/awscli/examples/iam/disable-organizations-root-credentials-management.rst new file mode 100644 index 000000000000..8c5d0adb0729 --- /dev/null +++ b/awscli/examples/iam/disable-organizations-root-credentials-management.rst @@ -0,0 +1,16 @@ +**To disable the RootCredentialsManagement feature in your organization** + +The following ``disable-organizations-root-credentials-management`` command disables the management of privileged root user credentials across member accounts in your organization. :: + + aws iam disable-organizations-root-credentials-management + +Output:: + + { + "EnabledFeatures": [ + "RootSessions" + ] + "OrganizationId": "o-aa111bb222" + } + +For more information, see `Centralize root access for member accounts `__ in the *AWS IAM User Guide*.g \ No newline at end of file diff --git a/awscli/examples/iam/disable-organizations-root-sessions.rst b/awscli/examples/iam/disable-organizations-root-sessions.rst new file mode 100644 index 000000000000..e0d545d0b3a0 --- /dev/null +++ b/awscli/examples/iam/disable-organizations-root-sessions.rst @@ -0,0 +1,16 @@ +**To disable the RootSessions feature in your organization** + +The following ``disable-organizations-root-sessions`` command disables root user sessions for privileged tasks across member accounts in your organization. :: + + aws iam disable-organizations-root-sessions + +Output:: + + { + "EnabledFeatures": [ + "RootCredentialsManagement" + ] + "OrganizationId": "o-aa111bb222" + } + +For more information, see `Centralize root access for member accounts `__ in the *AWS IAM User Guide*. diff --git a/awscli/examples/iam/enable-organizations-root-credentials-management.rst b/awscli/examples/iam/enable-organizations-root-credentials-management.rst new file mode 100644 index 000000000000..95d7d819c2b6 --- /dev/null +++ b/awscli/examples/iam/enable-organizations-root-credentials-management.rst @@ -0,0 +1,16 @@ +**To enable the RootCredentialsManagement feature in your organization** + +The following ``enable-organizations-root-credentials-management`` command enables the management of privileged root user credentials across member accounts in your organization. :: + + aws iam enable-organizations-root-credentials-management + +Output:: + + { + "EnabledFeatures": [ + "RootCredentialsManagement" + ] + "OrganizationId": "o-aa111bb222" + } + +For more information, see `Centralize root access for member accounts `__ in the *AWS IAM User Guide*. \ No newline at end of file diff --git a/awscli/examples/iam/enable-organizations-root-sessions.rst b/awscli/examples/iam/enable-organizations-root-sessions.rst new file mode 100644 index 000000000000..e2bf7fb9ef22 --- /dev/null +++ b/awscli/examples/iam/enable-organizations-root-sessions.rst @@ -0,0 +1,16 @@ +**To enable the RootSessions feature in your organization** + +The following ``enable-organizations-root-sessions`` command allows the management account or delegated administrator to perform privileged tasks on member accounts in your organization. :: + + aws iam enable-organizations-root-sessions + +Output:: + + { + "EnabledFeatures": [ + "RootSessions" + ] + "OrganizationId": "o-aa111bb222" + } + +For more information, see `Centralize root access for member accounts `__ in the *AWS IAM User Guide*. \ No newline at end of file diff --git a/awscli/examples/iam/list-organizations-features.rst b/awscli/examples/iam/list-organizations-features.rst new file mode 100644 index 000000000000..a3bd5739946b --- /dev/null +++ b/awscli/examples/iam/list-organizations-features.rst @@ -0,0 +1,17 @@ +**To list the centralized root access features enabled for your organization** + +The following ``list-organizations-features`` command lists the centralized root access features enabled for your organization. :: + + aws iam list-organizations-features + +Output:: + + { + "EnabledFeatures": [ + "RootCredentialsManagement", + "RootSessions" + ] + "OrganizationId": "o-aa111bb222" + } + +For more information, see `Centrally manage root access for member accounts `__ in the *AWS IAM User Guide*. \ No newline at end of file diff --git a/awscli/examples/ivs/batch-get-channel.rst b/awscli/examples/ivs/batch-get-channel.rst index 99b7ab46d339..9c97daf96c82 100644 --- a/awscli/examples/ivs/batch-get-channel.rst +++ b/awscli/examples/ivs/batch-get-channel.rst @@ -13,9 +13,15 @@ Output:: { "arn": "arn:aws:ivs:us-west-2:123456789012:channel/abcdABCDefgh", "authorized": false, + "containerFormat": "TS", "ingestEndpoint": "a1b2c3d4e5f6.global-contribute.live-video.net", "insecureIngest": false, "latencyMode": "LOW", + "multitrackInputConfiguration": { + "enabled": false, + "maximumResolution": "FULL_HD", + "policy": "ALLOW" + }, "name": "channel-1", "playbackUrl": "https://a1b2c3d4e5f6.us-west-2.playback.live-video.net/api/video/v1/us-west-2.123456789012.channel-1.abcdEFGH.m3u8", "preset": "", @@ -31,9 +37,15 @@ Output:: { "arn": "arn:aws:ivs:us-west-2:123456789012:channel/efghEFGHijkl", "authorized": false, + "containerFormat": "FRAGMENTED_MP4", "ingestEndpoint": "a1b2c3d4e5f6.global-contribute.live-video.net", - "insecureIngest": true, + "insecureIngest": false, "latencyMode": "LOW", + "multitrackInputConfiguration": { + "enabled": true, + "maximumResolution": "FULL_HD", + "policy": "ALLOW" + }, "name": "channel-2", "playbackUrl": "https://a1b2c3d4e5f6.us-west-2.playback.live-video.net/api/video/v1/us-west-2.123456789012.channel-2.abcdEFGH.m3u8", "preset": "", @@ -49,4 +61,4 @@ Output:: ] } -For more information, see `Create a Channel `__ in the *IVS Low-Latency User Guide*. \ No newline at end of file +For more information, see `Create a Channel `__ in the *IVS Low-Latency User Guide*. diff --git a/awscli/examples/ivs/create-channel.rst b/awscli/examples/ivs/create-channel.rst index a96b09bae4ab..1248f54a718b 100644 --- a/awscli/examples/ivs/create-channel.rst +++ b/awscli/examples/ivs/create-channel.rst @@ -3,7 +3,7 @@ The following ``create-channel`` example creates a new channel and an associated stream key to start streaming. :: aws ivs create-channel \ - --name "test-channel" \ + --name 'test-channel' \ --no-insecure-ingest Output:: @@ -12,8 +12,14 @@ Output:: "channel": { "arn": "arn:aws:ivs:us-west-2:123456789012:channel/abcdABCDefgh", "authorized": false, + "containerFormat": "TS", "name": "test-channel", "latencyMode": "LOW", + "multitrackInputConfiguration": { + "enabled": false, + "maximumResolution": "FULL_HD", + "policy": "ALLOW" + }, "playbackRestrictionPolicyArn": "", "recordingConfigurationArn": "", "srt": { @@ -39,20 +45,26 @@ For more information, see `Create a Channel `__ in the *IVS Low-Latency User Guide*. \ No newline at end of file +For more information, see `Undesired Content and Viewers `__ in the *IVS Low-Latency User Guide*. + +**Example 4: To create a channel with multitrack enabled** + +The following ``create-channel`` example creates a new channel and an associated stream key to start streaming, and enables multitrack. :: + + aws ivs create-channel \ + --name 'test-channel' \ + --no-insecure-ingest \ + --container-format 'FRAGMENTED_MP4' \ + --multitrack-input-configuration '{"enabled": true,"maximumResolution": "FULL_HD","policy": "ALLOW"}' + +Output:: + + { + "channel": { + "arn": "arn:aws:ivs:us-west-2:123456789012:channel/abcdABCDefgh", + "authorized": false, + "containerFormat": "FRAGMENTED_MP4", + "name": "test-channel", + "latencyMode": "LOW", + "multitrackInputConfiguration": { + "enabled": true, + "maximumResolution": "FULL_HD", + "policy": "ALLOW" + }, + "playbackRestrictionPolicyArn": "", + "recordingConfigurationArn": "", + "srt": { + "endpoint": "a1b2c3d4e5f6.srt.live-video.net", + "passphrase": "AB1C2defGHijkLMNo3PqQRstUvwxyzaBCDEfghh4ijklMN5opqrStuVWxyzAbCDEfghIJ" + }, + "ingestEndpoint": "a1b2c3d4e5f6.global-contribute.live-video.net", + "insecureIngest": false, + "playbackUrl": "https://a1b2c3d4e5f6.us-west-2.playback.live-video.net/api/video/v1/us-west-2.123456789012.channel.abcdEFGH.m3u8", + "preset": "", + "tags": {}, + "type": "STANDARD" + }, + "streamKey": { + "arn": "arn:aws:ivs:us-west-2:123456789012:stream-key/g1H2I3j4k5L6", + "value": "sk_us-west-2_abcdABCDefgh_567890abcdef", + "channelArn": "arn:aws:ivs:us-west-2:123456789012:channel/abcdABCDefgh", + "tags": {} + } + } + +For more information, see `Create a Channel `__ in the *IVS Low-Latency User Guide*. \ No newline at end of file diff --git a/awscli/examples/ivs/get-channel.rst b/awscli/examples/ivs/get-channel.rst index a875e4557bba..40e43b644555 100644 --- a/awscli/examples/ivs/get-channel.rst +++ b/awscli/examples/ivs/get-channel.rst @@ -3,27 +3,34 @@ The following ``get-channel`` example gets the channel configuration for a specified channel ARN (Amazon Resource Name). :: aws ivs get-channel \ - --arn arn:aws:ivs:us-west-2:123456789012:channel/abcdABCDefgh + --arn 'arn:aws:ivs:us-west-2:123456789012:channel/abcdABCDefgh' Output:: { "channel": { "arn": "arn:aws:ivs:us-west-2:123456789012:channel/abcdABCDefgh", - "name": "channel-1", + "authorized": false, + "containerFormat": "TS", + "ingestEndpoint": "a1b2c3d4e5f6.global-contribute.live-video.net", + "insecureIngest": false, "latencyMode": "LOW", - "type": "STANDARD", + "multitrackInputConfiguration": { + "enabled": false, + "maximumResolution": "FULL_HD", + "policy": "ALLOW" + }, + "name": "channel-1", "playbackRestrictionPolicyArn": "", + "playbackUrl": "https://a1b2c3d4e5f6.us-west-2.playback.live-video.net/api/video/v1/us-west-2.123456789012.channel.abcdEFGH.m3u8", "preset": "", - "recordingConfigurationArn": "arn:aws:ivs:us-west-2:123456789012:recording-configuration/ABCD12cdEFgh", + "recordingConfigurationArn": "", "srt": { "endpoint": "a1b2c3d4e5f6.srt.live-video.net", "passphrase": "AB1C2defGHijkLMNo3PqQRstUvwxyzaBCDEfghh4ijklMN5opqrStuVWxyzAbCDEfghIJ" }, - "ingestEndpoint": "a1b2c3d4e5f6.global-contribute.live-video.net", - "insecureIngest": false, - "playbackUrl": "https://a1b2c3d4e5f6.us-west-2.playback.live-video.net/api/video/v1/us-west-2.123456789012.channel.abcdEFGH.m3u8", "tags": {} + "type": "STANDARD", } } diff --git a/awscli/examples/ivs/get-stream-session.rst b/awscli/examples/ivs/get-stream-session.rst index 2b9b90b00626..fe270b5ec94a 100644 --- a/awscli/examples/ivs/get-stream-session.rst +++ b/awscli/examples/ivs/get-stream-session.rst @@ -1,10 +1,10 @@ **To get metadata for a specified stream** -The following ``get-stream-session`` example gets the metadata configuration for the specified channel ARN (Amazon Resource Name) and the specified stream; if streamId is not provided, the most recent stream for the channel is selected. :: +The following ``get-stream-session`` example gets the metadata configuration for the specified channel ARN (Amazon Resource Name) and the specified stream; if ``streamId`` is not provided, the most recent stream for the channel is selected. :: aws ivs get-stream-session \ - --channel-arn arn:aws:ivs:us-west-2:123456789012:channel/abcdABCDefgh \ - --stream-id "mystream" + --channel-arn 'arn:aws:ivs:us-west-2:123456789012:channel/abcdABCDefgh' \ + --stream-id 'mystream' Output:: @@ -18,10 +18,6 @@ Output:: "latencyMode": "LOW", "type": "STANDARD", "recordingConfigurationArn": "arn:aws:ivs:us-west-2:123456789012:recording-configuration/ABcdef34ghIJ", - "srt": { - "endpoint": "a1b2c3d4e5f6.srt.live-video.net", - "passphrase": "AB1C2defGHijkLMNo3PqQRstUvwxyzaBCDEfghh4ijklMN5opqrStuVWxyzAbCDEfghIJ" - }, "ingestEndpoint": "a1b2c3d4e5f6.global-contribute.live-video.net", "playbackUrl": "url-string", "authorized": false, @@ -29,23 +25,51 @@ Output:: "preset": "" }, "ingestConfiguration": { + "audio": { + "channels": 2, + "codec": "mp4a.40.2", + "sampleRate": 8000, + "targetBitrate": 46875, + "track": "Track0" + }, "video": { "avcProfile": "Baseline", "avcLevel": "4.2", "codec": "avc1.42C02A", "encoder": "Lavf58.45.100", + "level": "4.2", + "profile": "Baseline", "targetBitrate": 8789062, "targetFramerate": 60, + "track": "Track0", "videoHeight": 1080, "videoWidth": 1920 - }, - "audio": { - "codec": "mp4a.40.2", - "targetBitrate": 46875, - "sampleRate": 8000, - "channels": 2 } }, + "ingestConfigurations": { + "audioConfigurations": [ + { + "channels": 2, + "codec": "mp4a.40.2", + "sampleRate": 8000, + "targetBitrate": 46875, + "track": "Track0" + } + ], + "videoConfigurations": [ + { + "codec": "avc1.42C02A", + "encoder": "Lavf58.45.100", + "level": "4.2", + "profile": "Baseline", + "targetBitrate": 8789062, + "targetFramerate": 60, + "track": "Track0", + "videoHeight": 1080, + "videoWidth": 1920 + } + ] + }, "recordingConfiguration": { "arn": "arn:aws:ivs:us-west-2:123456789012:recording-configuration/ABcdef34ghIJ", "name": "test-recording-config", @@ -76,6 +100,17 @@ Output:: } }, "truncatedEvents": [ + { + "code": "StreamTakeoverInvalidPriority", + "name": "Stream Takeover Failure", + "type": "IVS Stream State Change", + "eventTime": "2023-06-26T19:09:48+00:00" + }, + { + "name": "Stream Takeover", + "type": "IVS Stream State Change", + "eventTime": "2023-06-26T19:09:47+00:00" + }, { "name": "Recording Start", "type": "IVS Recording State Change", diff --git a/awscli/examples/ivs/update-channel.rst b/awscli/examples/ivs/update-channel.rst index 075e44a7a3e7..e5fd733ef3e0 100644 --- a/awscli/examples/ivs/update-channel.rst +++ b/awscli/examples/ivs/update-channel.rst @@ -3,8 +3,8 @@ The following ``update-channel`` example updates the channel configuration for a specified channel ARN to change the channel name. This does not affect an ongoing stream of this channel; you must stop and restart the stream for the changes to take effect. :: aws ivs update-channel \ - --arn arn:aws:ivs:us-west-2:123456789012:channel/abcdABCDefgh \ - --name "channel-1" \ + --arn 'arn:aws:ivs:us-west-2:123456789012:channel/abcdABCDefgh' \ + --name 'channel-1' \ --insecure-ingest Output:: @@ -14,6 +14,12 @@ Output:: "arn": "arn:aws:ivs:us-west-2:123456789012:channel/abcdABCDefgh", "name": "channel-1", "latencyMode": "LOW", + "containerFormat": "TS", + "multitrackInputConfiguration": { + "enabled": false, + "maximumResolution": "FULL_HD", + "policy": "ALLOW" + }, "type": "STANDARD", "playbackRestrictionPolicyArn": "", "recordingConfigurationArn": "", @@ -36,9 +42,9 @@ For more information, see `Create a Channel `__ in the *IVS Low-Latency User Guide*. - - **Example 4: To update a channel's configuration to enable playback restriction** The following ``update-channel`` example updates the channel configuration for a specified channel ARN to apply a playback restriction policy. This does not affect an ongoing stream of this channel; you must stop and restart the stream for the changes to take effect. :: aws ivs update-channel \ - --arn "arn:aws:ivs:us-west-2:123456789012:channel/abcdABCDefgh" \ + --arn 'arn:aws:ivs:us-west-2:123456789012:channel/abcdABCDefgh' \ --no-insecure-ingest \ - --playback-restriction-policy-arn "arn:aws:ivs:us-west-2:123456789012:playback-restriction-policy/ABcdef34ghIJ" + --playback-restriction-policy-arn 'arn:aws:ivs:us-west-2:123456789012:playback-restriction-policy/ABcdef34ghIJ' Output:: @@ -116,6 +132,12 @@ Output:: "arn": "arn:aws:ivs:us-west-2:123456789012:channel/abcdABCDefgh", "name": "test-channel-with-playback-restriction-policy", "latencyMode": "LOW", + "containerFormat": "TS", + "multitrackInputConfiguration": { + "enabled": false, + "maximumResolution": "FULL_HD", + "policy": "ALLOW" + }, "type": "STANDARD", "playbackRestrictionPolicyArn": "arn:aws:ivs:us-west-2:123456789012:playback-restriction-policy/ABcdef34ghIJ", "recordingConfigurationArn": "", @@ -139,8 +161,8 @@ For more information, see `Undesired Content and Viewers `__ in the *IVS Low-Latency User Guide*. \ No newline at end of file +For more information, see `Undesired Content and Viewers `__ in the *IVS Low-Latency User Guide*. + +**Example 6: To update a channel's configuration to enable multitrack** + +The following ``update-channel`` example updates the channel configuration for a specified channel ARN to enable multitrack. This does not affect an ongoing stream of this channel; you must stop and restart the stream for the changes to take effect. :: + + aws ivs update-channel \ + --arn 'arn:aws:ivs:us-west-2:123456789012:channel/abcdABCDefgh' \ + --container-format 'FRAGMENTED_MP4' \ + --multitrack-input-configuration '{"enabled": true,"maximumResolution": "FULL_HD","policy": "ALLOW"}' + +Output:: + + { + "channel": { + "arn": "arn:aws:ivs:us-west-2:123456789012:channel/abcdABCDefgh", + "containerFormat": "FRAGMENTED_MP4", + "name": "test-channel-with-multitrack", + "latencyMode": "LOW", + "multitrackInputConfiguration": { + "enabled": true, + "maximumResolution": "FULL_HD", + "policy": "ALLOW" + }, + "type": "STANDARD", + "playbackRestrictionPolicyArn": "", + "recordingConfigurationArn": "", + "srt": { + "endpoint": "a1b2c3d4e5f6.srt.live-video.net", + "passphrase": "AB1C2defGHijkLMNo3PqQRstUvwxyzaCBDEfghh4ijklMN5opqrStuVWxyzAbCDEfghIJ" + }, + "ingestEndpoint": "a1b2c3d4e5f6.global-contribute.live-video.net", + "insecureIngest": false, + "playbackUrl": "https://a1b2c3d4e5f6.us-west-2.playback.live-video.net/api/video/v1/us-west-2.123456789012.channel.abcdEFGH.m3u8", + "preset": "", + "authorized": false, + "tags": {} + } + } + +For more information, see `Undesired Content and Viewers `__ in the *IVS Low-Latency User Guide*. + +**Example 7: To update a channel's configuration to disable playback restriction** + +The following ``update-channel`` example updates the channel configuration for a specified channel ARN to disable multitrack. This does not affect an ongoing stream of this channel; you must stop and restart the stream for the changes to take effect. :: + + aws ivs update-channel \ + --arn 'arn:aws:ivs:us-west-2:123456789012:channel/abcdABCDefgh' \ + --container-format 'TS' \ + --multitrack-input-configuration '{"enabled": false}' + +Output:: + + { + "channel": { + ""arn": "arn:aws:ivs:us-west-2:123456789012:channel/abcdABCDefgh", + "containerFormat": "TS", + "name": "test-channel-with-multitrack", + "latencyMode": "LOW", + "multitrackInputConfiguration": { + "enabled": false, + "maximumResolution": "FULL_HD", + "policy": "ALLOW" + }, + "type": "STANDARD", + "playbackRestrictionPolicyArn": "", + "recordingConfigurationArn": "", + "srt": { + "endpoint": "a1b2c3d4e5f6.srt.live-video.net", + "passphrase": "AB1C2defGHijkLMNo3PqQRstUvwxyzaCBDEfghh4ijklMN5opqrStuVWxyzAbCDEfghIJ" + }, + "ingestEndpoint": "a1b2c3d4e5f6.global-contribute.live-video.net", + "insecureIngest": false, + "playbackUrl": "https://a1b2c3d4e5f6.us-west-2.playback.live-video.net/api/video/v1/us-west-2.123456789012.channel.abcdEFGH.m3u8", + "preset": "", + "authorized": false, + "tags": {} + } + } + +For more information, see `Undesired Content and Viewers `__ in the *IVS Low-Latency User Guide*. \ No newline at end of file diff --git a/awscli/examples/sts/assume-root.rst b/awscli/examples/sts/assume-root.rst new file mode 100644 index 000000000000..56ec7fd4b6b7 --- /dev/null +++ b/awscli/examples/sts/assume-root.rst @@ -0,0 +1,22 @@ +**To launch a privileged session** + +The following ``assume-root`` command retrieves a set of short-term credentials you can use to remove a misconfigured Amazon S3 bucket policy for a member account in your organization. :: + + aws sts assume-root \ + --duration-seconds 900 \ + --target-principal 111122223333 \ + --task-policy-arn arn=arn:aws:iam::aws:policy/root-task/S3UnlockBucketPolicy + +Output:: + + { + "Credentials": { + "SecretAccessKey": "9drTJvcXLB89EXAMPLELB8923FB892xMFI", + "SessionToken": "AQoXdzELDDY//////////wEaoAK1wvxJY12r2IrDFT2IvAzTCn3zHoZ7YNtpiQLF0MqZye/qwjzP2iEXAMPLEbw/m3hsj8VBTkPORGvr9jM5sgP+w9IZWZnU+LWhmg+a5fDi2oTGUYcdg9uexQ4mtCHIHfi4citgqZTgco40Yqr4lIlo4V2b2Dyauk0eYFNebHtYlFVgAUj+7Indz3LU0aTWk1WKIjHmmMCIoTkyYp/k7kUG7moeEYKSitwQIi6Gjn+nyzM+PtoA3685ixzv0R7i5rjQi0YE0lf1oeie3bDiNHncmzosRM6SFiPzSvp6h/32xQuZsjcypmwsPSDtTPYcs0+YN/8BRi2/IcrxSpnWEXAMPLEXSDFTAQAM6Dl9zR0tXoybnlrZIwMLlMi1Kcgo5OytwU=", + "Expiration": "2024-11-15T00:05:07Z", + "AccessKeyId": "ASIAJEXAMPLEXEG2JICEA" + }, + "SourceIdentity": "Alice", + } + +The output of the command contains an access key, secret key, and session token that you can use to to perform privileged actions in the member account. For more information, see `Perform a privileged task on an AWS Organizations member account `__ in the *AWS IAM User Guide*. \ No newline at end of file