cloudx-proxy 0.3.3__tar.gz → 0.3.4__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (22) hide show
  1. {cloudx_proxy-0.3.3 → cloudx_proxy-0.3.4}/CHANGELOG.md +2 -0
  2. {cloudx_proxy-0.3.3 → cloudx_proxy-0.3.4}/PKG-INFO +60 -32
  3. {cloudx_proxy-0.3.3 → cloudx_proxy-0.3.4}/README.md +59 -31
  4. {cloudx_proxy-0.3.3 → cloudx_proxy-0.3.4}/cloudx_proxy/_version.py +2 -2
  5. {cloudx_proxy-0.3.3 → cloudx_proxy-0.3.4}/cloudx_proxy.egg-info/PKG-INFO +60 -32
  6. {cloudx_proxy-0.3.3 → cloudx_proxy-0.3.4}/.github/workflows/release.yml +0 -0
  7. {cloudx_proxy-0.3.3 → cloudx_proxy-0.3.4}/.gitignore +0 -0
  8. {cloudx_proxy-0.3.3 → cloudx_proxy-0.3.4}/.releaserc +0 -0
  9. {cloudx_proxy-0.3.3 → cloudx_proxy-0.3.4}/CONTRIBUTING.md +0 -0
  10. {cloudx_proxy-0.3.3 → cloudx_proxy-0.3.4}/LICENSE +0 -0
  11. {cloudx_proxy-0.3.3 → cloudx_proxy-0.3.4}/cloudx_proxy/__init__.py +0 -0
  12. {cloudx_proxy-0.3.3 → cloudx_proxy-0.3.4}/cloudx_proxy/cli.py +0 -0
  13. {cloudx_proxy-0.3.3 → cloudx_proxy-0.3.4}/cloudx_proxy/core.py +0 -0
  14. {cloudx_proxy-0.3.3 → cloudx_proxy-0.3.4}/cloudx_proxy/setup.py +0 -0
  15. {cloudx_proxy-0.3.3 → cloudx_proxy-0.3.4}/cloudx_proxy.egg-info/SOURCES.txt +0 -0
  16. {cloudx_proxy-0.3.3 → cloudx_proxy-0.3.4}/cloudx_proxy.egg-info/dependency_links.txt +0 -0
  17. {cloudx_proxy-0.3.3 → cloudx_proxy-0.3.4}/cloudx_proxy.egg-info/entry_points.txt +0 -0
  18. {cloudx_proxy-0.3.3 → cloudx_proxy-0.3.4}/cloudx_proxy.egg-info/requires.txt +0 -0
  19. {cloudx_proxy-0.3.3 → cloudx_proxy-0.3.4}/cloudx_proxy.egg-info/top_level.txt +0 -0
  20. {cloudx_proxy-0.3.3 → cloudx_proxy-0.3.4}/package.json +0 -0
  21. {cloudx_proxy-0.3.3 → cloudx_proxy-0.3.4}/pyproject.toml +0 -0
  22. {cloudx_proxy-0.3.3 → cloudx_proxy-0.3.4}/setup.cfg +0 -0
@@ -1,3 +1,5 @@
1
+ ## [0.3.4](https://github.com/easytocloud/cloudX-proxy/compare/v0.3.3...v0.3.4) (2025-02-09)
2
+
1
3
  ## [0.3.3](https://github.com/easytocloud/cloudX-proxy/compare/v0.3.2...v0.3.3) (2025-02-09)
2
4
 
3
5
  ## [0.3.2](https://github.com/easytocloud/cloudX-proxy/compare/v0.3.1...v0.3.2) (2025-02-09)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: cloudx-proxy
3
- Version: 0.3.3
3
+ Version: 0.3.4
4
4
  Summary: SSH proxy command to connect VSCode with Cloud9/CloudX instance using AWS Systems Manager
5
5
  Author-email: easytocloud <info@easytocloud.com>
6
6
  License: MIT License
@@ -95,14 +95,9 @@ cloudX-proxy enables seamless SSH connections from VSCode to EC2 instances using
95
95
  - Uses the SSH configuration to connect to instances
96
96
  - Handles file synchronization and terminal sessions
97
97
 
98
- ## AWS Credentials Setup
98
+ ## Installation
99
99
 
100
- The proxy expects to find AWS credentials in a profile named 'vscode' by default. These credentials should be the Access Key and Secret Key that were created by deploying the cloudX-user stack in your AWS account. The cloudX-user stack creates an IAM user with the minimal permissions required for:
101
- - Starting/stopping EC2 instances
102
- - Establishing SSM sessions
103
- - Pushing SSH keys via EC2 Instance Connect
104
-
105
- The proxy supports easytocloud's AWS profile organizer for managing multiple AWS environments. You can store your AWS configuration and credentials in `~/.aws/aws-envs/<environment>` directories and use the `--aws-env` option to specify which environment to use.
100
+ The cloudX-proxy package is available on PyPI and can run using uvx without explicit installation.
106
101
 
107
102
  ## Setup
108
103
 
@@ -122,7 +117,7 @@ uvx cloudx-proxy setup --aws-env prod
122
117
  The setup command will:
123
118
 
124
119
  1. Configure AWS Profile:
125
- - Creates/validates AWS profile with cloudX-{env}-{user} format
120
+ - Creates/validates AWS profile for IAM user in cloudX-{env}-{user} format
126
121
  - Supports AWS environment directories via --aws-env
127
122
  - Uses aws configure for credential input
128
123
 
@@ -145,7 +140,40 @@ The setup command will:
145
140
 
146
141
  ### SSH Configuration
147
142
 
148
- The setup command configures SSH to use cloudX-proxy as a ProxyCommand, enabling seamless connections through AWS Systems Manager. It creates:
143
+ The setup command configures SSH to use cloudX-proxy as a ProxyCommand, enabling seamless connections through AWS Systems Manager. For example, running:
144
+
145
+ ```bash
146
+ uvx cloudx-proxy setup --profile myprofile --ssh-key mykey
147
+ ```
148
+
149
+ Will create a configuration like this:
150
+
151
+ ```
152
+ # Base environment config (created once per environment)
153
+ Host cloudx-dev-*
154
+ User ec2-user
155
+ IdentityFile ~/.ssh/vscode/mykey
156
+ ProxyCommand uvx cloudx-proxy connect %h %p --profile myprofile --ssh-key mykey
157
+
158
+ # Host entry (added for specific instance)
159
+ Host cloudx-dev-myserver
160
+ HostName i-0123456789abcdef0
161
+ ```
162
+
163
+ Allowing the user to:
164
+
165
+ ```bash
166
+ ssh cloudx-dev-myserver
167
+ scp cloudx-dev-myserver:/path/to/file /local/path/to/file
168
+ ```
169
+ without the need to provide any further credentials.
170
+
171
+ In these examples, ssh will use cloudx-proxy to connect to AWS with the `myprofile` credentials, allowing it to check the instance state and start the instance if it's stopped. Next cloudx-proxy will use `myprofile` to push the public part of the key `mykey` to the instance using SSM. Finally a tunnel is created between the local machine and the instance, using the SSM plugin, allowing SSH to connect to the instance using the private part of the `mykey` key.
172
+
173
+ VSCode will be able to connect to the instance using the same SSH configuration.
174
+
175
+ ### SSH Configuration Details
176
+ The setup command creates:
149
177
 
150
178
  1. A base configuration for each environment (cloudx-{env}-*) with:
151
179
  - User and key settings
@@ -171,7 +199,7 @@ When adding new instances to an existing environment, you can choose to:
171
199
  "remote.SSH.connectTimeout": 90
172
200
  }
173
201
  ```
174
-
202
+ This extra long timeout is necessary to account for the time it takes to start the instance and establish the connection.
175
203
  ## Usage
176
204
 
177
205
  ### Command Line Options
@@ -239,28 +267,28 @@ Note: The connect command is typically used through the SSH ProxyCommand configu
239
267
  5. VSCode will handle the rest, using cloudX-proxy to establish the connection
240
268
 
241
269
  ## AWS Permissions
270
+ ### IAM User Permissions
242
271
 
243
- The AWS user needs these permissions:
244
-
245
- ```json
246
- {
247
- "Version": "2012-10-17",
248
- "Statement": [
249
- {
250
- "Effect": "Allow",
251
- "Action": [
252
- "ec2:StartInstances",
253
- "ec2:DescribeInstances",
254
- "ssm:StartSession",
255
- "ssm:DescribeInstanceInformation",
256
- "ec2-instance-connect:SendSSHPublicKey"
257
- ],
258
- "Resource": "*"
259
- }
260
- ]
261
- }
262
- ```
263
- Note: This user should be created using the cloudX-user product from Service Catalog in the AWS Console. This assures proper permissions and naming conventions.
272
+ The AWS IAM user has to be member of the AWS IAM Group that is created as part of the cloudX environment.
273
+ The group uses ABAC (Attribute Based Access Control) to allow access to the instances based on the tags.
274
+ The ABAC tag defaults to `cloudxuser` and should have the value of the username of the user that owns the instance.
275
+
276
+ Example:
277
+ - AWS IAM User `cloudx-dev-user1` is connecting to an instance with the tag `cloudxuser=cloudx-dev-user1`
278
+
279
+ Note: This user should be created using the cloudX-user product from Service Catalog in the AWS Console. This assures proper permissions and naming conventions. The user in the example is member of the `dev` group, part as part of the `cloudx-dev` environment.
280
+
281
+ The EC2 instance should have the tag `cloudxuser` with the value of the username of the user that is connecting to the instance. This is automatically set when the instance is created using the cloudX-instance product from Service Catalog in the AWS Console.
282
+
283
+ ### EC2 Instance Permissions
284
+
285
+ The EC2 instance has a profile/role that provides enough permissions to allow the AWS SSM agent to connect to the instance, as well as
286
+ - CodeArtifact read only access, to use as a source for pip
287
+ - CodeCommit read only access, to pull code from the repository for installation
288
+ - Organizations read only access, to create aws sso configuration
289
+ - EC2 basic access, to allow the instance to introspect for tags and other metadata
290
+
291
+ These permissions are required to bootstrap the instance, so that after creation the instance can perform software installation and configuration without a user being present.
264
292
 
265
293
  ## Troubleshooting
266
294
 
@@ -45,14 +45,9 @@ cloudX-proxy enables seamless SSH connections from VSCode to EC2 instances using
45
45
  - Uses the SSH configuration to connect to instances
46
46
  - Handles file synchronization and terminal sessions
47
47
 
48
- ## AWS Credentials Setup
48
+ ## Installation
49
49
 
50
- The proxy expects to find AWS credentials in a profile named 'vscode' by default. These credentials should be the Access Key and Secret Key that were created by deploying the cloudX-user stack in your AWS account. The cloudX-user stack creates an IAM user with the minimal permissions required for:
51
- - Starting/stopping EC2 instances
52
- - Establishing SSM sessions
53
- - Pushing SSH keys via EC2 Instance Connect
54
-
55
- The proxy supports easytocloud's AWS profile organizer for managing multiple AWS environments. You can store your AWS configuration and credentials in `~/.aws/aws-envs/<environment>` directories and use the `--aws-env` option to specify which environment to use.
50
+ The cloudX-proxy package is available on PyPI and can run using uvx without explicit installation.
56
51
 
57
52
  ## Setup
58
53
 
@@ -72,7 +67,7 @@ uvx cloudx-proxy setup --aws-env prod
72
67
  The setup command will:
73
68
 
74
69
  1. Configure AWS Profile:
75
- - Creates/validates AWS profile with cloudX-{env}-{user} format
70
+ - Creates/validates AWS profile for IAM user in cloudX-{env}-{user} format
76
71
  - Supports AWS environment directories via --aws-env
77
72
  - Uses aws configure for credential input
78
73
 
@@ -95,7 +90,40 @@ The setup command will:
95
90
 
96
91
  ### SSH Configuration
97
92
 
98
- The setup command configures SSH to use cloudX-proxy as a ProxyCommand, enabling seamless connections through AWS Systems Manager. It creates:
93
+ The setup command configures SSH to use cloudX-proxy as a ProxyCommand, enabling seamless connections through AWS Systems Manager. For example, running:
94
+
95
+ ```bash
96
+ uvx cloudx-proxy setup --profile myprofile --ssh-key mykey
97
+ ```
98
+
99
+ Will create a configuration like this:
100
+
101
+ ```
102
+ # Base environment config (created once per environment)
103
+ Host cloudx-dev-*
104
+ User ec2-user
105
+ IdentityFile ~/.ssh/vscode/mykey
106
+ ProxyCommand uvx cloudx-proxy connect %h %p --profile myprofile --ssh-key mykey
107
+
108
+ # Host entry (added for specific instance)
109
+ Host cloudx-dev-myserver
110
+ HostName i-0123456789abcdef0
111
+ ```
112
+
113
+ Allowing the user to:
114
+
115
+ ```bash
116
+ ssh cloudx-dev-myserver
117
+ scp cloudx-dev-myserver:/path/to/file /local/path/to/file
118
+ ```
119
+ without the need to provide any further credentials.
120
+
121
+ In these examples, ssh will use cloudx-proxy to connect to AWS with the `myprofile` credentials, allowing it to check the instance state and start the instance if it's stopped. Next cloudx-proxy will use `myprofile` to push the public part of the key `mykey` to the instance using SSM. Finally a tunnel is created between the local machine and the instance, using the SSM plugin, allowing SSH to connect to the instance using the private part of the `mykey` key.
122
+
123
+ VSCode will be able to connect to the instance using the same SSH configuration.
124
+
125
+ ### SSH Configuration Details
126
+ The setup command creates:
99
127
 
100
128
  1. A base configuration for each environment (cloudx-{env}-*) with:
101
129
  - User and key settings
@@ -121,7 +149,7 @@ When adding new instances to an existing environment, you can choose to:
121
149
  "remote.SSH.connectTimeout": 90
122
150
  }
123
151
  ```
124
-
152
+ This extra long timeout is necessary to account for the time it takes to start the instance and establish the connection.
125
153
  ## Usage
126
154
 
127
155
  ### Command Line Options
@@ -189,28 +217,28 @@ Note: The connect command is typically used through the SSH ProxyCommand configu
189
217
  5. VSCode will handle the rest, using cloudX-proxy to establish the connection
190
218
 
191
219
  ## AWS Permissions
220
+ ### IAM User Permissions
192
221
 
193
- The AWS user needs these permissions:
194
-
195
- ```json
196
- {
197
- "Version": "2012-10-17",
198
- "Statement": [
199
- {
200
- "Effect": "Allow",
201
- "Action": [
202
- "ec2:StartInstances",
203
- "ec2:DescribeInstances",
204
- "ssm:StartSession",
205
- "ssm:DescribeInstanceInformation",
206
- "ec2-instance-connect:SendSSHPublicKey"
207
- ],
208
- "Resource": "*"
209
- }
210
- ]
211
- }
212
- ```
213
- Note: This user should be created using the cloudX-user product from Service Catalog in the AWS Console. This assures proper permissions and naming conventions.
222
+ The AWS IAM user has to be member of the AWS IAM Group that is created as part of the cloudX environment.
223
+ The group uses ABAC (Attribute Based Access Control) to allow access to the instances based on the tags.
224
+ The ABAC tag defaults to `cloudxuser` and should have the value of the username of the user that owns the instance.
225
+
226
+ Example:
227
+ - AWS IAM User `cloudx-dev-user1` is connecting to an instance with the tag `cloudxuser=cloudx-dev-user1`
228
+
229
+ Note: This user should be created using the cloudX-user product from Service Catalog in the AWS Console. This assures proper permissions and naming conventions. The user in the example is member of the `dev` group, part as part of the `cloudx-dev` environment.
230
+
231
+ The EC2 instance should have the tag `cloudxuser` with the value of the username of the user that is connecting to the instance. This is automatically set when the instance is created using the cloudX-instance product from Service Catalog in the AWS Console.
232
+
233
+ ### EC2 Instance Permissions
234
+
235
+ The EC2 instance has a profile/role that provides enough permissions to allow the AWS SSM agent to connect to the instance, as well as
236
+ - CodeArtifact read only access, to use as a source for pip
237
+ - CodeCommit read only access, to pull code from the repository for installation
238
+ - Organizations read only access, to create aws sso configuration
239
+ - EC2 basic access, to allow the instance to introspect for tags and other metadata
240
+
241
+ These permissions are required to bootstrap the instance, so that after creation the instance can perform software installation and configuration without a user being present.
214
242
 
215
243
  ## Troubleshooting
216
244
 
@@ -12,5 +12,5 @@ __version__: str
12
12
  __version_tuple__: VERSION_TUPLE
13
13
  version_tuple: VERSION_TUPLE
14
14
 
15
- __version__ = version = '0.3.3'
16
- __version_tuple__ = version_tuple = (0, 3, 3)
15
+ __version__ = version = '0.3.4'
16
+ __version_tuple__ = version_tuple = (0, 3, 4)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: cloudx-proxy
3
- Version: 0.3.3
3
+ Version: 0.3.4
4
4
  Summary: SSH proxy command to connect VSCode with Cloud9/CloudX instance using AWS Systems Manager
5
5
  Author-email: easytocloud <info@easytocloud.com>
6
6
  License: MIT License
@@ -95,14 +95,9 @@ cloudX-proxy enables seamless SSH connections from VSCode to EC2 instances using
95
95
  - Uses the SSH configuration to connect to instances
96
96
  - Handles file synchronization and terminal sessions
97
97
 
98
- ## AWS Credentials Setup
98
+ ## Installation
99
99
 
100
- The proxy expects to find AWS credentials in a profile named 'vscode' by default. These credentials should be the Access Key and Secret Key that were created by deploying the cloudX-user stack in your AWS account. The cloudX-user stack creates an IAM user with the minimal permissions required for:
101
- - Starting/stopping EC2 instances
102
- - Establishing SSM sessions
103
- - Pushing SSH keys via EC2 Instance Connect
104
-
105
- The proxy supports easytocloud's AWS profile organizer for managing multiple AWS environments. You can store your AWS configuration and credentials in `~/.aws/aws-envs/<environment>` directories and use the `--aws-env` option to specify which environment to use.
100
+ The cloudX-proxy package is available on PyPI and can run using uvx without explicit installation.
106
101
 
107
102
  ## Setup
108
103
 
@@ -122,7 +117,7 @@ uvx cloudx-proxy setup --aws-env prod
122
117
  The setup command will:
123
118
 
124
119
  1. Configure AWS Profile:
125
- - Creates/validates AWS profile with cloudX-{env}-{user} format
120
+ - Creates/validates AWS profile for IAM user in cloudX-{env}-{user} format
126
121
  - Supports AWS environment directories via --aws-env
127
122
  - Uses aws configure for credential input
128
123
 
@@ -145,7 +140,40 @@ The setup command will:
145
140
 
146
141
  ### SSH Configuration
147
142
 
148
- The setup command configures SSH to use cloudX-proxy as a ProxyCommand, enabling seamless connections through AWS Systems Manager. It creates:
143
+ The setup command configures SSH to use cloudX-proxy as a ProxyCommand, enabling seamless connections through AWS Systems Manager. For example, running:
144
+
145
+ ```bash
146
+ uvx cloudx-proxy setup --profile myprofile --ssh-key mykey
147
+ ```
148
+
149
+ Will create a configuration like this:
150
+
151
+ ```
152
+ # Base environment config (created once per environment)
153
+ Host cloudx-dev-*
154
+ User ec2-user
155
+ IdentityFile ~/.ssh/vscode/mykey
156
+ ProxyCommand uvx cloudx-proxy connect %h %p --profile myprofile --ssh-key mykey
157
+
158
+ # Host entry (added for specific instance)
159
+ Host cloudx-dev-myserver
160
+ HostName i-0123456789abcdef0
161
+ ```
162
+
163
+ Allowing the user to:
164
+
165
+ ```bash
166
+ ssh cloudx-dev-myserver
167
+ scp cloudx-dev-myserver:/path/to/file /local/path/to/file
168
+ ```
169
+ without the need to provide any further credentials.
170
+
171
+ In these examples, ssh will use cloudx-proxy to connect to AWS with the `myprofile` credentials, allowing it to check the instance state and start the instance if it's stopped. Next cloudx-proxy will use `myprofile` to push the public part of the key `mykey` to the instance using SSM. Finally a tunnel is created between the local machine and the instance, using the SSM plugin, allowing SSH to connect to the instance using the private part of the `mykey` key.
172
+
173
+ VSCode will be able to connect to the instance using the same SSH configuration.
174
+
175
+ ### SSH Configuration Details
176
+ The setup command creates:
149
177
 
150
178
  1. A base configuration for each environment (cloudx-{env}-*) with:
151
179
  - User and key settings
@@ -171,7 +199,7 @@ When adding new instances to an existing environment, you can choose to:
171
199
  "remote.SSH.connectTimeout": 90
172
200
  }
173
201
  ```
174
-
202
+ This extra long timeout is necessary to account for the time it takes to start the instance and establish the connection.
175
203
  ## Usage
176
204
 
177
205
  ### Command Line Options
@@ -239,28 +267,28 @@ Note: The connect command is typically used through the SSH ProxyCommand configu
239
267
  5. VSCode will handle the rest, using cloudX-proxy to establish the connection
240
268
 
241
269
  ## AWS Permissions
270
+ ### IAM User Permissions
242
271
 
243
- The AWS user needs these permissions:
244
-
245
- ```json
246
- {
247
- "Version": "2012-10-17",
248
- "Statement": [
249
- {
250
- "Effect": "Allow",
251
- "Action": [
252
- "ec2:StartInstances",
253
- "ec2:DescribeInstances",
254
- "ssm:StartSession",
255
- "ssm:DescribeInstanceInformation",
256
- "ec2-instance-connect:SendSSHPublicKey"
257
- ],
258
- "Resource": "*"
259
- }
260
- ]
261
- }
262
- ```
263
- Note: This user should be created using the cloudX-user product from Service Catalog in the AWS Console. This assures proper permissions and naming conventions.
272
+ The AWS IAM user has to be member of the AWS IAM Group that is created as part of the cloudX environment.
273
+ The group uses ABAC (Attribute Based Access Control) to allow access to the instances based on the tags.
274
+ The ABAC tag defaults to `cloudxuser` and should have the value of the username of the user that owns the instance.
275
+
276
+ Example:
277
+ - AWS IAM User `cloudx-dev-user1` is connecting to an instance with the tag `cloudxuser=cloudx-dev-user1`
278
+
279
+ Note: This user should be created using the cloudX-user product from Service Catalog in the AWS Console. This assures proper permissions and naming conventions. The user in the example is member of the `dev` group, part as part of the `cloudx-dev` environment.
280
+
281
+ The EC2 instance should have the tag `cloudxuser` with the value of the username of the user that is connecting to the instance. This is automatically set when the instance is created using the cloudX-instance product from Service Catalog in the AWS Console.
282
+
283
+ ### EC2 Instance Permissions
284
+
285
+ The EC2 instance has a profile/role that provides enough permissions to allow the AWS SSM agent to connect to the instance, as well as
286
+ - CodeArtifact read only access, to use as a source for pip
287
+ - CodeCommit read only access, to pull code from the repository for installation
288
+ - Organizations read only access, to create aws sso configuration
289
+ - EC2 basic access, to allow the instance to introspect for tags and other metadata
290
+
291
+ These permissions are required to bootstrap the instance, so that after creation the instance can perform software installation and configuration without a user being present.
264
292
 
265
293
  ## Troubleshooting
266
294
 
File without changes
File without changes
File without changes
File without changes
File without changes