diff --git a/README.md b/README.md index cf35a82..0128e3a 100644 --- a/README.md +++ b/README.md @@ -37,16 +37,23 @@ Usage: aws-credential-process [OPTIONS] Options: --access-key-id TEXT --secret-access-key TEXT - --mfa-oath-slot TEXT - --mfa-serial-number TEXT - --mfa-session-duration INTEGER + --mfa-oath-slot TEXT how the MFA slot is named, check using ykman + oath code + + --mfa-serial-number TEXT MFA serial number, see IAM console + --mfa-session-duration INTEGER duration in seconds, use zero to assume role + without session + --assume-session-duration INTEGER - --assume-role-arn TEXT + duration in seconds + --assume-role-arn TEXT IAM Role to be assumed, optional --force-renew - --credentials-section TEXT - --pin-entry TEXT + --credentials-section TEXT Use this section from ~/.aws/credentials + --pin-entry TEXT pin-entry helper, should be compatible with + Assuan protocol (GPG) + --log-file TEXT - --config-section TEXT + --config-section TEXT Use this section in config-file --config-file TEXT --help Show this message and exit. ``` @@ -59,12 +66,6 @@ aws-credential-process is meant to be used as `credential_process` in your credential_process = /home/user/venv/aws_credential_process/bin/aws-credential-process --mfa-oath-slot "Amazon Web Services:test@example.com" --mfa-serial-number arn:aws:iam::123456789012:mfa/john.doe --assume-role-arn arn:aws:iam::123456789012:role/YourRole ``` -If you've supplied the secret-access-key once you can omit it with the next call, -it will be cached in your keyring. - -When you don't supply the access-key-id it will be loaded from `~/.aws/credentials`. -You can use another section than "default" by using the credentials-section argument. - ## Configuration aws-credential-process can also use a configuration file, the default location of @@ -133,3 +134,19 @@ credential_process = /home/user/venv/aws_credential_process/bin/aws-credential-p [profile profile2] credential_process = /home/user/venv/aws_credential_process/bin/aws-credential-process --config-section=567890123456 ``` + +## Optional arguments + +If you've supplied the secret-access-key once you can omit it with the next call, +it will be cached in your keyring. + +When you don't supply the access-key-id it will be loaded from `~/.aws/credentials`. +You can use another section than "default" by using the credentials-section argument. + +If you don't specify `*-session-duration` the default value from AWS will be used +(3600 seconds). When `--mfa-session-duration` is set to `0` and you use `--assume-role-arn` +a role will be assumed without using a session. Some API calls can't be made when the role +is assumed using an MFA session. + +You can also omit the `--assume-role-arn`, then you can use an MFA authenticated session +using your permanent IAM credentials. diff --git a/aws_credential_process.py b/aws_credential_process.py index 1026f0a..8bbcdbd 100755 --- a/aws_credential_process.py +++ b/aws_credential_process.py @@ -147,8 +147,10 @@ def get_mfa_session( if duration_seconds is not None: request["DurationSeconds"] = duration_seconds - request["SerialNumber"] = serial_number - request["TokenCode"] = token_code() + if serial_number: + request["SerialNumber"] = serial_number + if token_code: + request["TokenCode"] = token_code() client = boto3.client( "sts", @@ -182,7 +184,14 @@ def get_mfa_session_cached( return mfa_session -def get_assume_session(access_key, session, role_arn, duration_seconds=None): +def get_assume_session( + access_key, + session, + role_arn, + duration_seconds=None, + serial_number=None, + token_code=None, +): """ Get session for assumed role """ @@ -191,12 +200,25 @@ def get_assume_session(access_key, session, role_arn, duration_seconds=None): if duration_seconds is not None: request["DurationSeconds"] = duration_seconds - client = boto3.client( - "sts", - aws_access_key_id=session.awscred.access_key_id, - aws_secret_access_key=session.awscred.secret_access_key, - aws_session_token=session.session_token, - ) + if serial_number: + request["SerialNumber"] = serial_number + + if token_code: + request["TokenCode"] = token_code() + + if session is None: + client = boto3.client( + "sts", + aws_access_key_id=access_key.access_key_id, + aws_secret_access_key=access_key.secret_access_key, + ) + else: + client = boto3.client( + "sts", + aws_access_key_id=session.awscred.access_key_id, + aws_secret_access_key=session.awscred.secret_access_key, + aws_session_token=session.session_token, + ) response = client.assume_role(**request) @@ -208,7 +230,9 @@ def get_assume_session(access_key, session, role_arn, duration_seconds=None): return assume_session -def get_assume_session_cached(access_key, session, role_arn, duration_seconds): +def get_assume_session_cached( + access_key, session, role_arn, duration_seconds, serial_number=None, token_code=None +): """ Get session for assumed role with caching """ @@ -218,7 +242,7 @@ def get_assume_session_cached(access_key, session, role_arn, duration_seconds): if assume_session is None: assume_session = get_assume_session( - access_key, session, role_arn, duration_seconds + access_key, session, role_arn, duration_seconds, serial_number, token_code ) return assume_session @@ -302,6 +326,9 @@ def main( access_key = AWSCred(access_key_id, secret_access_key) + if mfa_session_duration is not None: + mfa_session_duration = int(mfa_session_duration) + def token_code(): for _ in range(5): token_code = None @@ -330,12 +357,18 @@ def token_code(): return token_code - mfa_session_request = ( - access_key, - mfa_session_duration, - mfa_serial_number, - token_code, - ) + if mfa_session_duration == 0: + mfa_session_request = ( + access_key, + mfa_session_duration, + ) + else: + mfa_session_request = ( + access_key, + mfa_session_duration, + mfa_serial_number, + token_code, + ) if assume_role_arn: if force_renew: @@ -346,18 +379,31 @@ def token_code(): ) if assume_session is None: - if force_renew: - mfa_session = get_mfa_session(*mfa_session_request) + if mfa_session_duration == 0: + mfa_session = None else: - mfa_session = get_mfa_session_cached(*mfa_session_request) - - if mfa_session is None: - logging.warning("Failed to get MFA session") - sys.exit(1) - - assume_session = get_assume_session( - access_key, mfa_session, assume_role_arn, assume_session_duration - ) + if force_renew: + mfa_session = get_mfa_session(*mfa_session_request) + else: + mfa_session = get_mfa_session_cached(*mfa_session_request) + + if mfa_session is None: + logging.warning("Failed to get MFA session") + sys.exit(1) + + if mfa_session_duration == 0: + assume_session = get_assume_session( + access_key, + mfa_session, + assume_role_arn, + assume_session_duration, + mfa_serial_number, + token_code, + ) + else: + assume_session = get_assume_session( + access_key, mfa_session, assume_role_arn, assume_session_duration + ) if assume_session is None: logging.warning("Failed to get assume session") @@ -365,6 +411,10 @@ def token_code(): else: print(assume_session.json_credentials()) else: + if mfa_session_duration == 0: + logging.warning("Cannot do MFA without session") + sys.exit(1) + if force_renew: mfa_session = get_mfa_session(*mfa_session_request) else: @@ -380,16 +430,25 @@ def token_code(): @click.command() @click.option("--access-key-id") @click.option("--secret-access-key") -@click.option("--mfa-oath-slot") -@click.option("--mfa-serial-number") -@click.option("--mfa-session-duration", type=int) -@click.option("--assume-session-duration", type=int) -@click.option("--assume-role-arn") +@click.option( + "--mfa-oath-slot", help="how the MFA slot is named, check using ykman oath code" +) +@click.option("--mfa-serial-number", help="MFA serial number, see IAM console") +@click.option( + "--mfa-session-duration", + type=int, + help="duration in seconds, use zero to assume role without session", +) +@click.option("--assume-session-duration", help="duration in seconds", type=int) +@click.option("--assume-role-arn", help="IAM Role to be assumed, optional") @click.option("--force-renew", is_flag=True) -@click.option("--credentials-section") -@click.option("--pin-entry") +@click.option("--credentials-section", help="Use this section from ~/.aws/credentials") +@click.option( + "--pin-entry", + help="pin-entry helper, should be compatible with Assuan protocol (GPG)", +) @click.option("--log-file") -@click.option("--config-section") +@click.option("--config-section", help="Use this section in config-file") @click.option("--config-file", default="~/.config/aws-credential-process/config.toml") def click_main( access_key_id, @@ -434,7 +493,7 @@ def click_main( config["mfa_serial_number"] = mfa_serial_number if mfa_oath_slot: config["mfa_oath_slot"] = mfa_oath_slot - if mfa_session_duration: + if mfa_session_duration is not None: config["mfa_session_duration"] = mfa_session_duration if secret_access_key: config["secret_access_key"] = secret_access_key @@ -443,7 +502,7 @@ def click_main( if assume_role_arn: config["assume_role_arn"] = assume_role_arn if force_renew: - config["force_renew=False"] = force_renew + config["force_renew"] = force_renew if credentials_section: config["credentials_section"] = credentials_section if pin_entry: diff --git a/poetry.lock b/poetry.lock index e5adf7d..b116cd4 100644 --- a/poetry.lock +++ b/poetry.lock @@ -36,7 +36,7 @@ tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (> [[package]] name = "aws-sam-translator" -version = "1.34.0" +version = "1.35.0" description = "AWS SAM Translator is a library that transform SAM templates into AWS CloudFormation templates" category = "dev" optional = false @@ -48,7 +48,7 @@ jsonschema = ">=3.2,<4.0" six = ">=1.15,<2.0" [package.extras] -dev = ["coverage (>=5.3,<6.0)", "flake8 (>=3.8.4,<3.9.0)", "tox (>=3.20.1,<3.21.0)", "pytest-cov (>=2.10.1,<2.11.0)", "pylint (>=1.7.2,<2.0)", "pyyaml (>=5.3.1,<5.4.0)", "mock (>=3.0.5,<4.0.0)", "parameterized (>=0.7.4,<0.8.0)", "requests (>=2.24.0,<2.25.0)", "docopt (>=0.6.2,<0.7.0)", "pytest (>=4.6.11,<4.7.0)", "pytest (>=6.1.1,<6.2.0)", "black (==20.8b1)"] +dev = ["coverage (>=5.3,<6.0)", "flake8 (>=3.8.4,<3.9.0)", "tox (>=3.20.1,<3.21.0)", "pytest-cov (>=2.10.1,<2.11.0)", "pylint (>=1.7.2,<2.0)", "pyyaml (>=5.3.1,<5.4.0)", "mock (>=3.0.5,<4.0.0)", "parameterized (>=0.7.4,<0.8.0)", "click (>=7.1,<8.0)", "dateparser (>=0.7,<1.0)", "requests (>=2.24.0,<2.25.0)", "docopt (>=0.6.2,<0.7.0)", "pathlib2 (>=2.3.5)", "pytest (>=4.6.11,<4.7.0)", "pytest (>=6.1.1,<6.2.0)", "black (==20.8b1)"] [[package]] name = "aws-xray-sdk" @@ -119,14 +119,14 @@ pycparser = "*" [[package]] name = "cfn-lint" -version = "0.45.0" +version = "0.47.2" description = "Checks CloudFormation templates for practices and behaviour that could potentially be improved" category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" [package.dependencies] -aws-sam-translator = ">=1.25.0" +aws-sam-translator = ">=1.34.0" importlib-resources = {version = ">=1.4,<4", markers = "python_version < \"3.7\" and python_version != \"3.4\""} jsonpatch = {version = "*", markers = "python_version != \"3.4\""} jsonschema = ">=3.0,<4.0" @@ -196,7 +196,7 @@ python-versions = ">=2.6, !=3.0.*, !=3.1.*" [[package]] name = "docker" -version = "4.4.3" +version = "4.4.4" description = "A Python library for the Docker Engine API." category = "dev" optional = false @@ -269,7 +269,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" [[package]] name = "importlib-metadata" -version = "3.4.0" +version = "3.7.3" description = "Read metadata from Python packages" category = "main" optional = false @@ -354,7 +354,7 @@ python-versions = "*" [[package]] name = "jsonpatch" -version = "1.28" +version = "1.32" description = "Apply JSON-Patches (RFC 6902)" category = "dev" optional = false @@ -381,7 +381,7 @@ testing = ["coverage (<5)", "pytest (>=3.5,!=3.7.3)", "pytest-checkdocs (>=1.2.3 [[package]] name = "jsonpointer" -version = "2.0" +version = "2.1" description = "Identify specific nodes in a JSON document (RFC 6901)" category = "dev" optional = false @@ -418,21 +418,21 @@ six = "*" [[package]] name = "keyring" -version = "22.0.1" +version = "23.0.0" description = "Store and access your passwords safely." category = "main" optional = false python-versions = ">=3.6" [package.dependencies] -importlib-metadata = {version = ">=1", markers = "python_version < \"3.8\""} +importlib-metadata = ">=3.6" jeepney = {version = ">=0.4.2", markers = "sys_platform == \"linux\""} pywin32-ctypes = {version = "<0.1.0 || >0.1.0,<0.1.1 || >0.1.1", markers = "sys_platform == \"win32\""} SecretStorage = {version = ">=3.2", markers = "sys_platform == \"linux\""} [package.extras] docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"] -testing = ["pytest (>=3.5,!=3.7.3)", "pytest-checkdocs (>=1.2.3)", "pytest-flake8", "pytest-cov", "pytest-enabler", "pytest-black (>=0.3.7)", "pytest-mypy"] +testing = ["pytest (>=4.6)", "pytest-checkdocs (>=1.2.3)", "pytest-flake8", "pytest-cov", "pytest-enabler", "pytest-black (>=0.3.7)", "pytest-mypy"] [[package]] name = "lazy-object-proxy" @@ -823,7 +823,7 @@ pyasn1 = ">=0.1.3" [[package]] name = "s3transfer" -version = "0.3.4" +version = "0.3.6" description = "An Amazon S3 Transfer Manager" category = "main" optional = false @@ -921,8 +921,8 @@ python-versions = "*" [[package]] name = "websocket-client" -version = "0.57.0" -description = "WebSocket client for Python. hybi13 is supported." +version = "0.58.0" +description = "WebSocket client for Python with low level API options" category = "dev" optional = false python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" @@ -977,15 +977,15 @@ six = "*" [[package]] name = "zipp" -version = "3.4.0" +version = "3.4.1" description = "Backport of pathlib-compatible object wrapper for zip files" category = "main" optional = false python-versions = ">=3.6" [package.extras] -docs = ["sphinx", "jaraco.packaging (>=3.2)", "rst.linker (>=1.9)"] -testing = ["pytest (>=3.5,!=3.7.3)", "pytest-checkdocs (>=1.2.3)", "pytest-flake8", "pytest-cov", "jaraco.test (>=3.2.0)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy"] +docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"] +testing = ["pytest (>=4.6)", "pytest-checkdocs (>=1.2.3)", "pytest-flake8", "pytest-cov", "pytest-enabler", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy"] [metadata] lock-version = "1.1" @@ -1006,9 +1006,9 @@ attrs = [ {file = "attrs-20.3.0.tar.gz", hash = "sha256:832aa3cde19744e49938b91fea06d69ecb9e649c93ba974535d08ad92164f700"}, ] aws-sam-translator = [ - {file = "aws-sam-translator-1.34.0.tar.gz", hash = "sha256:857c62a03e3bb4a3f7074e867f52ced636dc06192c8216e00732122f21a206c2"}, - {file = "aws_sam_translator-1.34.0-py2-none-any.whl", hash = "sha256:a22d505ddc0c48e3cf0ff0127096bdc1231d20c852509201ffba47dc8e683a1a"}, - {file = "aws_sam_translator-1.34.0-py3-none-any.whl", hash = "sha256:1cfc8ba13c43e8c425fdcd6c246fdd90899a3ed89310d84a72ccdf082e4146d7"}, + {file = "aws-sam-translator-1.35.0.tar.gz", hash = "sha256:5cf7faab3566843f3b44ef1a42a9c106ffb50809da4002faab818076dcc7bff8"}, + {file = "aws_sam_translator-1.35.0-py2-none-any.whl", hash = "sha256:2f8904fd4a631752bc441a8fd928c444ed98ceb86b94d25ed7b84982e2eff1cd"}, + {file = "aws_sam_translator-1.35.0-py3-none-any.whl", hash = "sha256:c35075e7e804490d6025598ed4878ad3ab8668e37cafb7ae75120b1c37a6d212"}, ] aws-xray-sdk = [ {file = "aws-xray-sdk-2.6.0.tar.gz", hash = "sha256:abf5b90f740e1f402e23414c9670e59cb9772e235e271fef2bce62b9100cbc77"}, @@ -1070,8 +1070,8 @@ cffi = [ {file = "cffi-1.14.5.tar.gz", hash = "sha256:fd78e5fee591709f32ef6edb9a015b4aa1a5022598e36227500c8f4e02328d9c"}, ] cfn-lint = [ - {file = "cfn-lint-0.45.0.tar.gz", hash = "sha256:b3791d6a56cfbc0a9d316957c89a2efe3a9eb3dbbd9db89c38e1d8df44f0d970"}, - {file = "cfn_lint-0.45.0-py3-none-any.whl", hash = "sha256:ad61e1b4c7507353fa285887c4069b7a18c2909922a6bfe01a72c4712be9a86e"}, + {file = "cfn-lint-0.47.2.tar.gz", hash = "sha256:91e323a87db35ec56e34fd627f0bb76eff80d089f2b947ae4785dce8873d34ac"}, + {file = "cfn_lint-0.47.2-py3-none-any.whl", hash = "sha256:2f226f5d3c9aa4d6dd806d168618973dcb6c645c3aecbdaea596ae07068fbad4"}, ] chardet = [ {file = "chardet-4.0.0-py2.py3-none-any.whl", hash = "sha256:f864054d66fd9118f2e67044ac8981a54775ec5b67aed0441892edb553d21da5"}, @@ -1141,8 +1141,8 @@ decorator = [ {file = "decorator-4.4.2.tar.gz", hash = "sha256:e3a62f0520172440ca0dcc823749319382e377f37f140a0b99ef45fecb84bfe7"}, ] docker = [ - {file = "docker-4.4.3-py2.py3-none-any.whl", hash = "sha256:d4625e70e3d5a12d7cbf1fd68cef2e081ac86b83889e00e5466d975f90e50dad"}, - {file = "docker-4.4.3.tar.gz", hash = "sha256:de5753b7f6486dd541a98393e423e387579b8974a5068748b83f852cc76a89d6"}, + {file = "docker-4.4.4-py2.py3-none-any.whl", hash = "sha256:f3607d5695be025fa405a12aca2e5df702a57db63790c73b927eb6a94aac60af"}, + {file = "docker-4.4.4.tar.gz", hash = "sha256:d3393c878f575d3a9ca3b94471a3c89a6d960b35feb92f033c0de36cc9d934db"}, ] ecdsa = [ {file = "ecdsa-0.14.1-py2.py3-none-any.whl", hash = "sha256:e108a5fe92c67639abae3260e43561af914e7fd0d27bae6d2ec1312ae7934dfe"}, @@ -1163,8 +1163,8 @@ idna = [ {file = "idna-2.10.tar.gz", hash = "sha256:b307872f855b18632ce0c21c5e45be78c0ea7ae4c15c828c20788b26921eb3f6"}, ] importlib-metadata = [ - {file = "importlib_metadata-3.4.0-py3-none-any.whl", hash = "sha256:ace61d5fc652dc280e7b6b4ff732a9c2d40db2c0f92bc6cb74e07b73d53a1771"}, - {file = "importlib_metadata-3.4.0.tar.gz", hash = "sha256:fa5daa4477a7414ae34e95942e4dd07f62adf589143c875c133c1e53c4eff38d"}, + {file = "importlib_metadata-3.7.3-py3-none-any.whl", hash = "sha256:b74159469b464a99cb8cc3e21973e4d96e05d3024d337313fedb618a6e86e6f4"}, + {file = "importlib_metadata-3.7.3.tar.gz", hash = "sha256:742add720a20d0467df2f444ae41704000f50e1234f46174b51f9c6031a1bd71"}, ] importlib-resources = [ {file = "importlib_resources-3.3.1-py2.py3-none-any.whl", hash = "sha256:42068585cc5e8c2bf0a17449817401102a5125cbfbb26bb0f43cde1568f6f2df"}, @@ -1190,16 +1190,16 @@ jsondiff = [ {file = "jsondiff-1.2.0.tar.gz", hash = "sha256:34941bc431d10aa15828afe1cbb644977a114e75eef6cc74fb58951312326303"}, ] jsonpatch = [ - {file = "jsonpatch-1.28-py2.py3-none-any.whl", hash = "sha256:da3831be60919e8c98564acfc1fa918cb96e7c9750b0428388483f04d0d1c5a7"}, - {file = "jsonpatch-1.28.tar.gz", hash = "sha256:e930adc932e4d36087dbbf0f22e1ded32185dfb20662f2e3dd848677a5295a14"}, + {file = "jsonpatch-1.32-py2.py3-none-any.whl", hash = "sha256:26ac385719ac9f54df8a2f0827bb8253aa3ea8ab7b3368457bcdb8c14595a397"}, + {file = "jsonpatch-1.32.tar.gz", hash = "sha256:b6ddfe6c3db30d81a96aaeceb6baf916094ffa23d7dd5fa2c13e13f8b6e600c2"}, ] jsonpickle = [ {file = "jsonpickle-2.0.0-py2.py3-none-any.whl", hash = "sha256:c1010994c1fbda87a48f8a56698605b598cb0fc6bb7e7927559fc1100e69aeac"}, {file = "jsonpickle-2.0.0.tar.gz", hash = "sha256:0be49cba80ea6f87a168aa8168d717d00c6ca07ba83df3cec32d3b30bfe6fb9a"}, ] jsonpointer = [ - {file = "jsonpointer-2.0-py2.py3-none-any.whl", hash = "sha256:ff379fa021d1b81ab539f5ec467c7745beb1a5671463f9dcc2b2d458bd361c1e"}, - {file = "jsonpointer-2.0.tar.gz", hash = "sha256:c192ba86648e05fdae4f08a17ec25180a9aef5008d973407b581798a83975362"}, + {file = "jsonpointer-2.1-py2.py3-none-any.whl", hash = "sha256:150f80c5badd02c757da6644852f612f88e8b4bc2f9852dcbf557c8738919686"}, + {file = "jsonpointer-2.1.tar.gz", hash = "sha256:5a34b698db1eb79ceac454159d3f7c12a451a91f6334a4f638454327b7a89962"}, ] jsonschema = [ {file = "jsonschema-3.2.0-py2.py3-none-any.whl", hash = "sha256:4e5b3cf8216f577bee9ce139cbe72eca3ea4f292ec60928ff24758ce626cd163"}, @@ -1209,8 +1209,8 @@ junit-xml = [ {file = "junit_xml-1.9-py2.py3-none-any.whl", hash = "sha256:ec5ca1a55aefdd76d28fcc0b135251d156c7106fa979686a4b48d62b761b4732"}, ] keyring = [ - {file = "keyring-22.0.1-py3-none-any.whl", hash = "sha256:9f44660a5d4931bdc14c08a1d01ef30b18a7a8147380710d8c9f9531e1f6c3c0"}, - {file = "keyring-22.0.1.tar.gz", hash = "sha256:9acb3e1452edbb7544822b12fd25459078769e560fa51f418b6d00afaa6178df"}, + {file = "keyring-23.0.0-py3-none-any.whl", hash = "sha256:29f407fd5509c014a6086f17338c70215c8d1ab42d5d49e0254273bc0a64bbfc"}, + {file = "keyring-23.0.0.tar.gz", hash = "sha256:237ff44888ba9b3918a7dcb55c8f1db909c95b6f071bfb46c6918f33f453a68a"}, ] lazy-object-proxy = [ {file = "lazy-object-proxy-1.4.3.tar.gz", hash = "sha256:f3900e8a5de27447acbf900b4750b0ddfd7ec1ea7fbaf11dfa911141bc522af0"}, @@ -1427,8 +1427,8 @@ rsa = [ {file = "rsa-4.4.tar.gz", hash = "sha256:5d95293bbd0fbee1dd9cb4b72d27b723942eb50584abc8c4f5f00e4bcfa55307"}, ] s3transfer = [ - {file = "s3transfer-0.3.4-py2.py3-none-any.whl", hash = "sha256:1e28620e5b444652ed752cf87c7e0cb15b0e578972568c6609f0f18212f259ed"}, - {file = "s3transfer-0.3.4.tar.gz", hash = "sha256:7fdddb4f22275cf1d32129e21f056337fd2a80b6ccef1664528145b72c49e6d2"}, + {file = "s3transfer-0.3.6-py2.py3-none-any.whl", hash = "sha256:5d48b1fd2232141a9d5fb279709117aaba506cacea7f86f11bc392f06bfa8fc2"}, + {file = "s3transfer-0.3.6.tar.gz", hash = "sha256:c5dadf598762899d8cfaecf68eba649cd25b0ce93b6c954b156aaa3eed160547"}, ] secretstorage = [ {file = "SecretStorage-3.3.1-py3-none-any.whl", hash = "sha256:422d82c36172d88d6a0ed5afdec956514b189ddbfb72fefab0c8a1cee4eaf71f"}, @@ -1495,8 +1495,8 @@ wcwidth = [ {file = "wcwidth-0.2.5.tar.gz", hash = "sha256:c4d647b99872929fdb7bdcaa4fbe7f01413ed3d98077df798530e5b04f116c83"}, ] websocket-client = [ - {file = "websocket_client-0.57.0-py2.py3-none-any.whl", hash = "sha256:0fc45c961324d79c781bab301359d5a1b00b13ad1b10415a4780229ef71a5549"}, - {file = "websocket_client-0.57.0.tar.gz", hash = "sha256:d735b91d6d1692a6a181f2a8c9e0238e5f6373356f561bb9dc4c7af36f452010"}, + {file = "websocket_client-0.58.0-py2.py3-none-any.whl", hash = "sha256:44b5df8f08c74c3d82d28100fdc81f4536809ce98a17f0757557813275fbb663"}, + {file = "websocket_client-0.58.0.tar.gz", hash = "sha256:63509b41d158ae5b7f67eb4ad20fecbb4eee99434e73e140354dc3ff8e09716f"}, ] werkzeug = [ {file = "Werkzeug-1.0.1-py2.py3-none-any.whl", hash = "sha256:2de2a5db0baeae7b2d2664949077c2ac63fbd16d98da0ff71837f7d1dea3fd43"}, @@ -1513,6 +1513,6 @@ yubikey-manager = [ {file = "yubikey-manager-3.1.1.tar.gz", hash = "sha256:68ef41ac3cd2e891019e755a492427ecdd63d8816525d05f2f32c37b8c440cfa"}, ] zipp = [ - {file = "zipp-3.4.0-py3-none-any.whl", hash = "sha256:102c24ef8f171fd729d46599845e95c7ab894a4cf45f5de11a44cc7444fb1108"}, - {file = "zipp-3.4.0.tar.gz", hash = "sha256:ed5eee1974372595f9e416cc7bbeeb12335201d8081ca8a0743c954d4446e5cb"}, + {file = "zipp-3.4.1-py3-none-any.whl", hash = "sha256:51cb66cc54621609dd593d1787f286ee42a5c0adbb4b29abea5a63edc3e03098"}, + {file = "zipp-3.4.1.tar.gz", hash = "sha256:3607921face881ba3e026887d8150cca609d517579abe052ac81fc5aeffdbd76"}, ] diff --git a/pyproject.toml b/pyproject.toml index f835942..957ed1e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "aws-credential-process" -version = "0.10.0" +version = "0.11.0" description = "AWS Credential Process" authors = ["Dick Marinus "] readme = "README.md"