aws2-wrap


Nameaws2-wrap JSON
Version 1.4.0 PyPI version JSON
download
home_pagehttps://github.com/linaro-its/aws2-wrap
SummaryA wrapper for executing a command with AWS CLI v2 and SSO
upload_time2023-12-09 15:51:17
maintainer
docs_urlNone
authorPhilip Colmer
requires_python>=3.8
licenseGPL-3.0-or-later
keywords aws profile sso assume role
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # aws2-wrap

[![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=linaro-its_aws2-wrap&metric=alert_status)](https://sonarcloud.io/dashboard?id=linaro-its_aws2-wrap)

This is a simple script to make it easier to use AWS Single Sign On credentials with tools that don't understand the `sso` entries in an AWS profile.

The script provides the following capabilities:

* Run a command using AWS SSO credentials
* Generate a temporary profile in the $AWS_CONFIG_FILE and $AWS_SHARED_CREDENTIALS_FILE file
* Exporting the AWS SSO credentials
* Use the credentials via .aws/config
* Assume a role via AWS SSO
* Supports automatic authentication refresh via AWS IAM Identity Center (https://docs.aws.amazon.com/cli/latest/userguide/sso-configure-profile-token.html)

Please note that the script is called `aws2-wrap` to show that it works with AWS CLI v2, even though the CLI tool is no longer called `aws2`.

## Install

### Using `pip`

<https://pypi.org/project/aws2-wrap>

```
pip3 install aws2-wrap
```

### Using `brew`

```
brew install aws2-wrap
```

## Run a command using AWS SSO credentials

`aws2-wrap [--profile <awsprofilename>] [--exec] <command>`

Note that if you are using `--exec` and `<command>` contains spaces, it must be surrounded with double-quotation marks.

You can also specify the profile to be used via AWS_PROFILE which then allows the same profile to be used by subsequent tools and commands.

Examples:

`aws2-wrap --profile MySSOProfile terraform plan`

`aws2-wrap --profile MySSOProfile --exec "terraform plan"`

`AWS_PROFILE=MySSOProfile aws2-wrap terraform plan`

If you are having problems with the use of quotes in the command, you may find one of the other methods works better for you.

## Generate a temporary profile in the $AWS_CONFIG_FILE and $AWS_SHARED_CREDENTIALS_FILE file

There are some utilities which work better with the configuration files rather than the environment variables. For example, if you need to access more than one profile at a time.

`aws2-wrap --generate --profile $AWS_PROFILE --credentialsfile $AWS_SHARED_CREDENTIALS_FILE --configfile $AWS_CONFIG_FILE --outprofile $DESTINATION_PROFILE`

Optionally, you can specify `--generatestdout` instead of `--generate`. `--outprofile` is still required in order to name the section but `--credentialsfile` and `--configfile` are ignored. With this command option, the generated credentials will then be output to the console.

## Export the AWS SSO credentials

There may be circumstances when it is easier/better to set the appropriate environment variables so that they can be re-used by any `aws` command.

Since the script cannot directly set the environment variables in the calling shell process, it is necessary to use the following syntax:

`eval "$(aws2-wrap [--profile <awsprofilename>] --export)"`

For example:

`eval "$(aws2-wrap --profile MySSOProfile --export)"`

If you are using PowerShell, the equivalent command is:

`aws2-wrap --profile MySSOProfile --export | invoke-expression`

## Use the credentials via .aws/config

If you are using a tool that works with normal AWS credentials but doesn't understand the new AWS SSO credentials, another option is to add a profile to `.aws/config` that calls the `aws2-wrap` script.

For example, add the following block to `.aws/config`:

```text
[profile Wrapped]
credential_process = aws2-wrap --process --profile <awsprofilename>
```

then, after authentication, you can run any command that uses AWS credentials by specifying the "Wrapped" profile:

```text
aws sso login --profile <awsprofilename>
export AWS_PROFILE=Wrapped
export AWS_SDK_LOAD_CONFIG=1
terraform plan
```

Note that because the profile is being specified via `AWS_PROFILE`, it is sometimes necessary (as shown above) to set `AWS_SDK_LOAD_CONFIG` in order to get tools like `terraform` to successfully retrieve the credentials.

## Assume a role via AWS SSO

Your `.aws/config` file can look like this:

```text
[default]
sso_start_url = xxxxxxxxxxxx
sso_region = us-west-2
sso_account_id = xxxxxxxxxxxx
sso_role_name = SSORoleName

[profile account1]
role_arn = arn:aws:iam::xxxxxxxxxxxx:role/role-to-be-assumed
source_profile = default
region = ap-northeast-1
```

allowing you to then run:

`aws2-wrap --profile account1 <command>`

and `<command>` will be run under `role-to-be-assumed`.

## Contributing

Contributions are more than welcome, particularly if you are able to expand on the test code. Please ensure, though, that before you submit a Pull Request, you run `make test` to ensure that your changes don't break any of the existing tests and `make pylint` to ensure that the linter is happy. Please note that the CI/CD pylint test *may* use different pylint rules from your own local setup.

Please also note that `make pylint` will only report errors. You *may* want to explicitly run `python3 -m pylint setup.py aws2wrap`

## Credits

Thanks to @matan129, @nitrocode, @chenrui333, @l1n, @sodul, @damian-bisignano, @flyinprogrammer, @abeluck, @topu, @bigwheel, @krabbit, @jscook2345, @hieki, @blazdivjak, @fukushun1994, @johann8384, @ppezoldt, @atwoodjw, @lummish, @life36-vinny, @lukemassa and @axelri for their contributions.



            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/linaro-its/aws2-wrap",
    "name": "aws2-wrap",
    "maintainer": "",
    "docs_url": null,
    "requires_python": ">=3.8",
    "maintainer_email": "",
    "keywords": "aws profile sso assume role",
    "author": "Philip Colmer",
    "author_email": "it-support@linaro.org",
    "download_url": "https://files.pythonhosted.org/packages/6d/c7/8afdf4d0c7c6e2072c73a0150f9789445af33381a611d33333f4c9bf1ef6/aws2-wrap-1.4.0.tar.gz",
    "platform": null,
    "description": "# aws2-wrap\n\n[![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=linaro-its_aws2-wrap&metric=alert_status)](https://sonarcloud.io/dashboard?id=linaro-its_aws2-wrap)\n\nThis is a simple script to make it easier to use AWS Single Sign On credentials with tools that don't understand the `sso` entries in an AWS profile.\n\nThe script provides the following capabilities:\n\n* Run a command using AWS SSO credentials\n* Generate a temporary profile in the $AWS_CONFIG_FILE and $AWS_SHARED_CREDENTIALS_FILE file\n* Exporting the AWS SSO credentials\n* Use the credentials via .aws/config\n* Assume a role via AWS SSO\n* Supports automatic authentication refresh via AWS IAM Identity Center (https://docs.aws.amazon.com/cli/latest/userguide/sso-configure-profile-token.html)\n\nPlease note that the script is called `aws2-wrap` to show that it works with AWS CLI v2, even though the CLI tool is no longer called `aws2`.\n\n## Install\n\n### Using `pip`\n\n<https://pypi.org/project/aws2-wrap>\n\n```\npip3 install aws2-wrap\n```\n\n### Using `brew`\n\n```\nbrew install aws2-wrap\n```\n\n## Run a command using AWS SSO credentials\n\n`aws2-wrap [--profile <awsprofilename>] [--exec] <command>`\n\nNote that if you are using `--exec` and `<command>` contains spaces, it must be surrounded with double-quotation marks.\n\nYou can also specify the profile to be used via AWS_PROFILE which then allows the same profile to be used by subsequent tools and commands.\n\nExamples:\n\n`aws2-wrap --profile MySSOProfile terraform plan`\n\n`aws2-wrap --profile MySSOProfile --exec \"terraform plan\"`\n\n`AWS_PROFILE=MySSOProfile aws2-wrap terraform plan`\n\nIf you are having problems with the use of quotes in the command, you may find one of the other methods works better for you.\n\n## Generate a temporary profile in the $AWS_CONFIG_FILE and $AWS_SHARED_CREDENTIALS_FILE file\n\nThere are some utilities which work better with the configuration files rather than the environment variables. For example, if you need to access more than one profile at a time.\n\n`aws2-wrap --generate --profile $AWS_PROFILE --credentialsfile $AWS_SHARED_CREDENTIALS_FILE --configfile $AWS_CONFIG_FILE --outprofile $DESTINATION_PROFILE`\n\nOptionally, you can specify `--generatestdout` instead of `--generate`. `--outprofile` is still required in order to name the section but `--credentialsfile` and `--configfile` are ignored. With this command option, the generated credentials will then be output to the console.\n\n## Export the AWS SSO credentials\n\nThere may be circumstances when it is easier/better to set the appropriate environment variables so that they can be re-used by any `aws` command.\n\nSince the script cannot directly set the environment variables in the calling shell process, it is necessary to use the following syntax:\n\n`eval \"$(aws2-wrap [--profile <awsprofilename>] --export)\"`\n\nFor example:\n\n`eval \"$(aws2-wrap --profile MySSOProfile --export)\"`\n\nIf you are using PowerShell, the equivalent command is:\n\n`aws2-wrap --profile MySSOProfile --export | invoke-expression`\n\n## Use the credentials via .aws/config\n\nIf you are using a tool that works with normal AWS credentials but doesn't understand the new AWS SSO credentials, another option is to add a profile to `.aws/config` that calls the `aws2-wrap` script.\n\nFor example, add the following block to `.aws/config`:\n\n```text\n[profile Wrapped]\ncredential_process = aws2-wrap --process --profile <awsprofilename>\n```\n\nthen, after authentication, you can run any command that uses AWS credentials by specifying the \"Wrapped\" profile:\n\n```text\naws sso login --profile <awsprofilename>\nexport AWS_PROFILE=Wrapped\nexport AWS_SDK_LOAD_CONFIG=1\nterraform plan\n```\n\nNote that because the profile is being specified via `AWS_PROFILE`, it is sometimes necessary (as shown above) to set `AWS_SDK_LOAD_CONFIG` in order to get tools like `terraform` to successfully retrieve the credentials.\n\n## Assume a role via AWS SSO\n\nYour `.aws/config` file can look like this:\n\n```text\n[default]\nsso_start_url = xxxxxxxxxxxx\nsso_region = us-west-2\nsso_account_id = xxxxxxxxxxxx\nsso_role_name = SSORoleName\n\n[profile account1]\nrole_arn = arn:aws:iam::xxxxxxxxxxxx:role/role-to-be-assumed\nsource_profile = default\nregion = ap-northeast-1\n```\n\nallowing you to then run:\n\n`aws2-wrap --profile account1 <command>`\n\nand `<command>` will be run under `role-to-be-assumed`.\n\n## Contributing\n\nContributions are more than welcome, particularly if you are able to expand on the test code. Please ensure, though, that before you submit a Pull Request, you run `make test` to ensure that your changes don't break any of the existing tests and `make pylint` to ensure that the linter is happy. Please note that the CI/CD pylint test *may* use different pylint rules from your own local setup.\n\nPlease also note that `make pylint` will only report errors. You *may* want to explicitly run `python3 -m pylint setup.py aws2wrap`\n\n## Credits\n\nThanks to @matan129, @nitrocode, @chenrui333, @l1n, @sodul, @damian-bisignano, @flyinprogrammer, @abeluck, @topu, @bigwheel, @krabbit, @jscook2345, @hieki, @blazdivjak, @fukushun1994, @johann8384, @ppezoldt, @atwoodjw, @lummish, @life36-vinny, @lukemassa and @axelri for their contributions.\n\n\n",
    "bugtrack_url": null,
    "license": "GPL-3.0-or-later",
    "summary": "A wrapper for executing a command with AWS CLI v2 and SSO",
    "version": "1.4.0",
    "project_urls": {
        "Homepage": "https://github.com/linaro-its/aws2-wrap"
    },
    "split_keywords": [
        "aws",
        "profile",
        "sso",
        "assume",
        "role"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "42bd323faf593629df069a08221a3c7cf099c56a7a0a150ebfce03c2c8b45275",
                "md5": "ba2e32187ee70cb7d0c6de0e1712081d",
                "sha256": "824b9d9527a0b3fb6359429d9b1db12cb6b2de815fa72aff41fd35dad4a6daba"
            },
            "downloads": -1,
            "filename": "aws2_wrap-1.4.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "ba2e32187ee70cb7d0c6de0e1712081d",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.8",
            "size": 22670,
            "upload_time": "2023-12-09T15:51:15",
            "upload_time_iso_8601": "2023-12-09T15:51:15.244152Z",
            "url": "https://files.pythonhosted.org/packages/42/bd/323faf593629df069a08221a3c7cf099c56a7a0a150ebfce03c2c8b45275/aws2_wrap-1.4.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "6dc78afdf4d0c7c6e2072c73a0150f9789445af33381a611d33333f4c9bf1ef6",
                "md5": "37c4fa24affbe29939d59dcce38c4ed3",
                "sha256": "77613ae13423a6407e79760bdd35843ddd128612672a0ad3a934ecade76aa7fc"
            },
            "downloads": -1,
            "filename": "aws2-wrap-1.4.0.tar.gz",
            "has_sig": false,
            "md5_digest": "37c4fa24affbe29939d59dcce38c4ed3",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.8",
            "size": 22417,
            "upload_time": "2023-12-09T15:51:17",
            "upload_time_iso_8601": "2023-12-09T15:51:17.175204Z",
            "url": "https://files.pythonhosted.org/packages/6d/c7/8afdf4d0c7c6e2072c73a0150f9789445af33381a611d33333f4c9bf1ef6/aws2-wrap-1.4.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2023-12-09 15:51:17",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "linaro-its",
    "github_project": "aws2-wrap",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "lcname": "aws2-wrap"
}
        
Elapsed time: 0.15082s