From 31d98ab78a3413d87164d494a126308599188bfc Mon Sep 17 00:00:00 2001 From: Julio Delgado Jr Date: Fri, 10 Dec 2021 13:44:10 -0500 Subject: [PATCH] common_prerequisites solution, deployment-methods doc, staging script for packaging --- CHANGELOG.md | 27 +- README.md | 3 + aws_sra_examples/docs/DEPLOYMENT-METHODS.md | 90 ++ .../common/common_prerequisites/README.md | 157 +++ .../README.md | 7 + .../manifest-v2.yaml | 91 ++ .../manifest.yaml | 33 + .../sra-common-prerequisites-main-ssm.json | 30 + .../sra-common-prerequisites-main.json | 70 ++ ...uisites-management-account-parameters.json | 22 + .../documentation/common-prerequisites.png | Bin 0 -> 200157 bytes .../documentation/common-prerequisites.pptx | Bin 0 -> 126667 bytes .../common_prerequisites/lambda/src/app.py | 433 +++++++ .../lambda/src/inline_lambda.py | 47 + .../lambda/src/requirements.txt | 2 + ...quisites-control-tower-execution-role.yaml | 102 ++ .../sra-common-prerequisites-main-ssm.yaml | 357 ++++++ .../sra-common-prerequisites-main.yaml | 341 ++++++ ...uisites-management-account-parameters.yaml | 286 +++++ ...erequisites-member-account-parameters.yaml | 277 +++++ ...ommon-prerequisites-staging-s3-bucket.yaml | 394 +++++++ .../utils/packaging_scripts/stage_solution.sh | 183 +++ poetry.lock | 1000 +++++++++-------- pyproject.toml | 2 +- 24 files changed, 3481 insertions(+), 473 deletions(-) create mode 100644 aws_sra_examples/docs/DEPLOYMENT-METHODS.md create mode 100644 aws_sra_examples/solutions/common/common_prerequisites/README.md create mode 100644 aws_sra_examples/solutions/common/common_prerequisites/customizations_for_aws_control_tower/README.md create mode 100644 aws_sra_examples/solutions/common/common_prerequisites/customizations_for_aws_control_tower/manifest-v2.yaml create mode 100644 aws_sra_examples/solutions/common/common_prerequisites/customizations_for_aws_control_tower/manifest.yaml create mode 100644 aws_sra_examples/solutions/common/common_prerequisites/customizations_for_aws_control_tower/parameters/sra-common-prerequisites-main-ssm.json create mode 100644 aws_sra_examples/solutions/common/common_prerequisites/customizations_for_aws_control_tower/parameters/sra-common-prerequisites-main.json create mode 100644 aws_sra_examples/solutions/common/common_prerequisites/customizations_for_aws_control_tower/parameters/sra-common-prerequisites-management-account-parameters.json create mode 100644 aws_sra_examples/solutions/common/common_prerequisites/documentation/common-prerequisites.png create mode 100644 aws_sra_examples/solutions/common/common_prerequisites/documentation/common-prerequisites.pptx create mode 100644 aws_sra_examples/solutions/common/common_prerequisites/lambda/src/app.py create mode 100644 aws_sra_examples/solutions/common/common_prerequisites/lambda/src/inline_lambda.py create mode 100644 aws_sra_examples/solutions/common/common_prerequisites/lambda/src/requirements.txt create mode 100644 aws_sra_examples/solutions/common/common_prerequisites/templates/sra-common-prerequisites-control-tower-execution-role.yaml create mode 100644 aws_sra_examples/solutions/common/common_prerequisites/templates/sra-common-prerequisites-main-ssm.yaml create mode 100644 aws_sra_examples/solutions/common/common_prerequisites/templates/sra-common-prerequisites-main.yaml create mode 100644 aws_sra_examples/solutions/common/common_prerequisites/templates/sra-common-prerequisites-management-account-parameters.yaml create mode 100644 aws_sra_examples/solutions/common/common_prerequisites/templates/sra-common-prerequisites-member-account-parameters.yaml create mode 100644 aws_sra_examples/solutions/common/common_prerequisites/templates/sra-common-prerequisites-staging-s3-bucket.yaml create mode 100755 aws_sra_examples/utils/packaging_scripts/stage_solution.sh diff --git a/CHANGELOG.md b/CHANGELOG.md index 540ccd87..c303eae1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ ## Table of Contents - [Introduction](#introduction) +- [2021-12-10](#2021-12-10) - [2021-11-22](#2021-11-22) - [2021-11-20](#2021-11-20) - [2021-11-19](#2021-11-19) @@ -17,11 +18,27 @@ All notable changes to this project will be documented in this file. --- +## 2021-12-10 + +### Added + +- [Common Prerequisites](aws_sra_examples/solutions/common/common_prerequisites/) solution +- [Deployment Methods](aws_sra_examples/docs/DEPLOYMENT-METHODS.md) documentation +- [Staging Script](aws_sra_examples/utils/packaging_scripts/) - `stage_solution.sh` + +### Changed + +- Nothing Changed + +### Fixed + +- Nothing Fixed + ## 2021-11-22 ### Added -- EC2 Default EBS Encryption solution +- [EC2 Default EBS Encryption](aws_sra_examples/solutions/ec2/ec2_default_ebs_encryption) solution ### Changed @@ -31,7 +48,7 @@ All notable changes to this project will be documented in this file. ### Added -- S3 Block Account Public Access solution +- [S3 Block Account Public Access](aws_sra_examples/solutions/s3/s3_block_account_public_access) solution ### Changed @@ -76,9 +93,9 @@ All notable changes to this project will be documented in this file. ### Added -- AWS IAM Access Analyzer solution -- Organization AWS Config Aggregator Solution -- Common Register Delegated Administrator Solution +- [AWS IAM Access Analyzer](aws_sra_examples/solutions/iam/iam_access_analyzer/) solution +- [Organization AWS Config Aggregator](aws_sra_examples/solutions/config/config_aggregator_org/) solution +- [Common Register Delegated Administrator](aws_sra_examples/solutions/common/common_register_delegated_administrator/) solution ### Changed diff --git a/README.md b/README.md index 93049fad..711b7717 100644 --- a/README.md +++ b/README.md @@ -27,6 +27,9 @@ The examples within this repository have been deployed and tested using the corr - CloudTrail - [Organization CloudTrail](aws_sra_examples/solutions/cloudtrail/cloudtrail_org) +- Common + - [Common Prerequisites](aws_sra_examples/solutions/common/common_prerequisites) + - [Common Register Delegated Administrator](aws_sra_examples/solutions/common/common_register_delegated_administrator) - Config - [Organization Aggregator](aws_sra_examples/solutions/config/config_aggregator_org) - [Organization Conformance Pack](aws_sra_examples/solutions/config/config_conformance_pack_org) diff --git a/aws_sra_examples/docs/DEPLOYMENT-METHODS.md b/aws_sra_examples/docs/DEPLOYMENT-METHODS.md new file mode 100644 index 00000000..2ae5867b --- /dev/null +++ b/aws_sra_examples/docs/DEPLOYMENT-METHODS.md @@ -0,0 +1,90 @@ +# Deployment Methods + +Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. SPDX-License-Identifier: CC-BY-SA-4.0 + +--- + +## Table of Contents + +- [Customizations for AWS Control Tower Deployment Instructions](#customizations-for-aws-control-tower-deployment-instructions) +- [References](#references) + +## Customizations for AWS Control Tower Deployment Instructions + +### Prerequisites + +1. Move the `Organizations Management Account` to an Organizational Unit (OU) (e.g. Management), so that CloudFormation StackSets can be deployed to the `Management Account` + 1. Within the AWS Control Tower console page, select `Organizational units` from the side menu, click the `Add an OU` button, and set the `OU name = Management` + 2. Within the AWS Organizations console page, select `AWS accounts` from the side menu + 1. Select the checkbox next to the `Management Account` + 2. From the `Actions` menu, select `Move` and select the new `Management OU` that was created above + 3. Select `Move AWS account` +2. Within the AWS CloudFormation StackSets console page, `Enable trusted access` with AWS Organizations to use service-managed permissions. To verify that the trusted access is enabled: + 1. Within the AWS Organizations console page, select `Services` from the side menu + 2. Verify that `CloudFormation StackSets` has `Trusted access = Access enabled` +3. Deploy the [Customizations for AWS Control Tower](https://aws.amazon.com/solutions/implementations/customizations-for-aws-control-tower/) solution following the below instructions. + 1. In the `Management account (home region)`, deploy a new CloudFormation stack with the below recommended settings: + + - `Amazon S3 URL` = https://s3.amazonaws.com/solutions-reference/customizations-for-aws-control-tower/latest/custom-control-tower-initiation.template + - `Stack name` = custom-control-tower-initiation + - `AWS CodePipeline Source` = AWS CodeCommit + - `Failure Tolerance Percentage` = 0 + - Acknowledge that AWS CloudFormation might create IAM resources with custom names + 2. On the local machine install [git](https://git-scm.com/downloads) and [git-remote-codecommit](https://docs.aws.amazon.com/codecommit/latest/userguide/how-to-connect.html). + 3. Clone the AWS CodeCommit repository via `git clone codecommit::://custom-control-tower-configuration custom-control-tower-configuration` + +### Deployment Instructions + +1. Determine which version of the [Customizations for AWS Control Tower](https://aws.amazon.com/solutions/implementations/customizations-for-aws-control-tower/) solution you have deployed: + 1. Within the `management account (home region)` find the **CloudFormation Stack** for the Customizations for Control Tower (e.g. custom-control-tower-initiation) + 2. Select the `Outputs` tab + 3. The `CustomControlTowerSolutionVersion` **Value** is the version running in the environment + 1. Version 1 = v1.x.x = manifest.yaml version 2020-01-01 + 2. Version 2 = v2.x.x = manifest.yaml version 2021-03-15 +2. Create the `AWSControlTowerExecution` IAM role in the `management account (home region)` by launching an AWS CloudFormation **Stack** using the + [sra-common-prerequisites-control-tower-execution-role.yaml](../solutions/common/common_prerequisites/templates/sra-common-prerequisites-control-tower-execution-role.yaml) template file as the source. +3. Follow the instructions for the cooresponding version: + - [Version 1 Deployment Instructions](#version-1-deployment-instructions) + - [Version 2 Deployment Instructions](#version-2-deployment-instructions) + +#### Version 1 Deployment Instructions + +1. Copy the files to the Customizations for AWS Control Tower configuration `custom-control-tower-configuration` + - parameters [**required for manifest version 2020-01-01**] + - Copy the parameter files from the `parameters` folder + - Only one of the main parameter files is required. We recommend using the main-ssm file. + - policies [optional] + - service control policies files (\*.json) + - templates [**required**] + - Copy the template files from the `templates` folder + - Only one of the main template files is required. We recommend using the main-ssm file. + - `manifest.yaml` [**required**] +2. Verify and update the parameters within each of the parameter json files to match the target environment +3. Update the manifest.yaml file with the `organizational unit names`, `account names` and `SSM parameters` for the target environment +4. Deploy the Customizations for AWS Control Tower configuration by pushing the code to the `AWS CodeCommit` repository or uploading to the `AWS S3 Bucket` + +#### Version 2 Deployment Instructions + +1. Copy the files to the Customizations for AWS Control Tower configuration `custom-control-tower-configuration` + - policies [optional] + - service control policies files (\*.json) + - templates [**required**] + - Copy the template files from the `templates` folder + - `manifest-v2.yaml` [**required**] +2. Rename the `manifest-v2.yaml` to `manifest.yaml` +3. Update the manifest.yaml file with the `parameters`, `organizational unit names`, `account names` and `SSM parameters` for the target environment +4. Deploy the Customizations for AWS Control Tower configuration by pushing the code to the `AWS CodeCommit` repository or uploading to the `AWS S3 Bucket` + +### Delete Instructions + +1. Within the Customizations for AWS Control Tower configuration + 1. Remove the solution configuration from the `manifest.yaml` file + 2. (Optional) Delete the parameter (Version 1 only) and template files for the solution +2. Deploy the Customizations for AWS Control Tower configuration +3. After the pipeline completes, log into the `management account` and navigate to the `CloudFormation StackSet` page + 1. Delete the Stack Instances from the `CustomControlTower-*` CloudFormation StackSets + 2. After the Stack Instances are deleted, delete the `CustomControlTower-*` CloudFormation StackSets + +## References + +- [Customizations for AWS Control Tower](https://aws.amazon.com/solutions/implementations/customizations-for-aws-control-tower/) diff --git a/aws_sra_examples/solutions/common/common_prerequisites/README.md b/aws_sra_examples/solutions/common/common_prerequisites/README.md new file mode 100644 index 00000000..f4856a78 --- /dev/null +++ b/aws_sra_examples/solutions/common/common_prerequisites/README.md @@ -0,0 +1,157 @@ +# SRA Prerequisites + +Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. SPDX-License-Identifier: CC-BY-SA-4.0 + +## Table of Contents + +- [Introduction](#introduction) +- [Deployed Resource Details](#deployed-resource-details) +- [Implementation Instructions](#implementation-instructions) +- [References](#references) + +## Introduction + +The `SRA Prerequisites Solution` creates the resources (`Staging S3 Buckets` and `Execution IAM Role`) and configuration (`SSM Parameters`) for simplifying the deployment of SRA solutions within an AWS Control Tower environment. All resources that support tags are provided a tag keypair of `sra-solution: sra-common-prerequisites`. + +## Deployed Resource Details + +![Architecture](./documentation/common-prerequisites.png) + +### 1.0 Organization Management Account + +#### 1.1 AWS CloudFormation + +- All resources are deployed via AWS CloudFormation as a StackSet and Stack Instance within the management account or a CloudFormation Stack within a specific account. +- The [Customizations for AWS Control Tower](https://aws.amazon.com/solutions/implementations/customizations-for-aws-control-tower/) solution deploys all templates as a CloudFormation `StackSet`. +- For parameter details, review the AWS [CloudFormation templates](templates/). + +#### 1.2 Org ID AWS Lambda IAM Role + +- The AWS Org ID Lambda IAM Role allows the AWS Lambda service to assume the role and perform actions defined in the attached IAM policies. + +#### 1.3 Org ID AWS Lambda Function + +- An external deployment package is used in the AWS Lambda Function in the [sra-common-prerequisites-staging-s3-bucket.yaml](templates/sra-common-prerequisites-staging-s3-bucket.yaml) that contains the logic to determine the AWS Organization ID +- The function is triggered by CloudFormation Create, Update, and Delete events. + +#### 1.4 AWS Lambda CloudWatch Log Group + +- `AWS Lambda Function` logs are sent to a CloudWatch Log Group `` to help with debugging and traceability of the actions performed. +- By default the `AWS Lambda Function` will create the CloudWatch Log Group with a `Retention` (Never expire) and the logs are encrypted with a CloudWatch Logs service managed encryption key. +- Optional parameters are included to allow creating the CloudWatch Log Group, which allows setting `KMS Encryption` using a customer managed KMS key and setting the `Retention` to a specific value (e.g. 14 days). + +#### 1.5 AWS SSM Parameter Store + +- Configuration parameters are created/updated within the `SSM Parameter Store` on CloudFormation events and the parameters are used to simplify deployment of this solution and future SRA solutions. +- All parameters are created under the `/sra/` hierarchy path in all regions of the `management account`. +- Optional parameters are included to create the parameters in all `member accounts` in the same regions that are enabled in the `management account`. + - This allows for common SSM parameters to be resolved in the `member accounts` for future SRA solutions, and customer workload solutions. +- Common parameters created will be retained even if the CloudFormation stacks from this solution are deleted. + +#### 1.6 Staging S3 Bucket + +- The S3 Bucket is used to store solution files (Lambda Zip files, CloudFormation templates, and other deployment files) that will be used for staging. +- S3 bucket is created in all regions of the `management account` with a name following this syntax: `sra-staging--`. +- Optional parameters are included to create an S3 bucket in all `member accounts` in the same regions that are enabled in the `management account` with a name following this syntax: `sra-staging--`. + - This allows for a staging S3 bucket to be used in the `member accounts` for future SRA solutions, and customer workload solutions. + +#### 1.7 Parameter AWS Lambda IAM Role + +- The AWS Lambda Function Role allows the AWS Lambda service to assume the role and perform actions defined in the attached IAM policies. + +#### 1.8 Parameter AWS Lambda Function + +- An inline AWS Lambda Function in the [sra-common-prerequisites-management-account-parameters.yaml](templates/sra-common-prerequisites-management-account-parameters.yaml) contains the logic for discovering common values in your Control Tower landing + zone. (e.g., Root Organizational Unit ID, Control Tower Home Region, Audit Account ID) +- The function is triggered by CloudFormation Create, Update, and Delete events. + +#### 1.9 AWS Lambda CloudWatch Log Group + +- See [1.4 AWS Lambda CloudWatch Log Group](#14-aws-lambda-cloudwatch-log-group) + +#### 1.10 AWS Control Tower Execution Role + +- The `AWSControlTowerExecution` Role provides the support needed to deploy solutions to the `management account` across regions as CloudFormation `StackSets`. + +#### 1.11 AWS SSM Parameter Store + +- See [1.5 AWS SSM Parameter Store](#15-aws-ssm-parameter-store) + +#### 1.12 Staging S3 Bucket + +- See [1.6 Staging S3 Bucket](#16-staging-s3-bucket) + +### All Existing and Future Organization Member Accounts + +#### 2.1 AWS CloudFormation + +- See [1.1 AWS CloudFormation](#11-aws-cloudformation) + +#### 2.2 AWS SSM Parameter Store + +- See [1.5 AWS SSM Parameter Store](#15-aws-ssm-parameter-store) + +#### 2.3 Staging S3 Bucket + +- See [1.6 Staging S3 Bucket](#16-staging-s3-bucket) + +## Implementation Instructions + +### Prerequisites + +- AWS Control Tower is deployed. +- `aws-security-reference-architecture-examples` repository is stored on your local machine or pipeline where you will be deploying from. +- **Note:** If the parameter `Create SRA Staging S3 Bucket in Member Accounts = true`, make sure the following elective AWS Control Tower guardrails are disabled for all OUs: + - Disallow Changes to Encryption Configuration for Amazon S3 Buckets + - Disallow Changes to Logging Configuration for Amazon S3 Buckets + - Disallow Changes to Bucket Policy for Amazon S3 Buckets + - Disallow Changes to Lifecycle Configuration for Amazon S3 Buckets + +### Solution Deployment + +1. In the `management account (home region)`, launch the AWS CloudFormation **Stack** using the [sra-common-prerequisites-staging-s3-bucket.yaml](templates/sra-common-prerequisites-staging-s3-bucket.yaml) template file as the source. +2. Package the solution, see the [Staging](#staging) instructions. +3. Choose a Deployment Method: + - [AWS CloudFormation](#aws-cloudformation) + - [Customizations for AWS Control Tower](../../../docs/DEPLOYMENT-METHODS.md#customizations-for-aws-control-tower-deployment-instructions) + +#### AWS CloudFormation + +1. In the `management account (home region)`, launch the AWS CloudFormation **Stack** using the [sra-common-prerequisites-management-account-parameters.yaml](templates/sra-common-prerequisites-management-account-parameters.yaml) template file as the + source. +2. In the `management account (home region)`, launch the AWS CloudFormation **Stack** using the template file as the source from the below chosen options: + - **Option 1:** (Recommended) Use this template, [sra-common-prerequisites-main-ssm.yaml](templates/sra-common-prerequisites-main-ssm.yaml), for a more automated approach where CloudFormation parameters resolve SSM parameters. + - **Option 2:** Use this template, [sra-common-prerequisites-main.yaml](templates/sra-common-prerequisites-main.yaml), where input is required for the CloudFormation parameters, without resolving SSM parameters. + +### Staging + +1. Package the Lambda code into a zip file and upload the solution files (Lambda Zip files, CloudFormation templates, and other deployment files) to the SRA Staging S3 bucket (from above step), using the + [Packaging script](../../../utils/packaging_scripts/stage_solution.sh). + + - `SRA_REPO` environment variable should point to the folder where `aws-security-reference-architecture-examples` repository is stored. + - `BUCKET` environment variable should point to the S3 Bucket where the solution files are stored. + - See CloudFormation Output from Step 1 in the [Solution Deployment](#solution-deployment) instructions. Or follow this syntax: `sra-staging--` + + ```bash + # Example (assumes repository was downloaded to your home directory) + export SRA_REPO="$HOME"/aws-security-reference-architecture-examples/aws_sra_examples + export BUCKET=sra-staging-123456789012-us-east-1 + sh "$SRA_REPO"/utils/packaging_scripts/stage_solution.sh \ + --staging_bucket_name $BUCKET \ + --solution_directory "$SRA_REPO"/solutions/common/common_prerequisites + ``` + + ```bash + # Use template below and set the 'SRA_REPO' and 'SRA_BUCKET' with your values. + export SRA_REPO= + export BUCKET= + sh "$SRA_REPO"/utils/packaging_scripts/stage_solution.sh \ + --staging_bucket_name $BUCKET \ + --solution_directory "$SRA_REPO"/solutions/common/common_prerequisites + ``` + +## References + +- [How AWS Control Tower works with roles to create and manage accounts](https://docs.aws.amazon.com/controltower/latest/userguide/roles-how.html) +- [AWS Systems Manager Parameter Store](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-parameter-store.html) +- [Working with AWS CloudFormation StackSets](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/what-is-cfnstacksets.html) diff --git a/aws_sra_examples/solutions/common/common_prerequisites/customizations_for_aws_control_tower/README.md b/aws_sra_examples/solutions/common/common_prerequisites/customizations_for_aws_control_tower/README.md new file mode 100644 index 00000000..a96b715d --- /dev/null +++ b/aws_sra_examples/solutions/common/common_prerequisites/customizations_for_aws_control_tower/README.md @@ -0,0 +1,7 @@ +# Customizations for AWS Control Tower + +Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. SPDX-License-Identifier: CC-BY-SA-4.0 + +--- + +[Customizations for AWS Control Tower Deployment Instructions](../../../docs/DEPLOYMENT-METHODS.md#customizations-for-aws-control-tower-deployment-instructions) diff --git a/aws_sra_examples/solutions/common/common_prerequisites/customizations_for_aws_control_tower/manifest-v2.yaml b/aws_sra_examples/solutions/common/common_prerequisites/customizations_for_aws_control_tower/manifest-v2.yaml new file mode 100644 index 00000000..15286c35 --- /dev/null +++ b/aws_sra_examples/solutions/common/common_prerequisites/customizations_for_aws_control_tower/manifest-v2.yaml @@ -0,0 +1,91 @@ +--- +#Default region for deploying Custom Control Tower: Code Pipeline, Step functions, Lambda, SSM parameters, and StackSets +region: us-east-1 +version: 2021-03-15 + +# Control Tower Custom Resources (Service Control Policies or CloudFormation) +resources: + # ----------------------------------------------------------------------------- + # Common Prerequisites + # ----------------------------------------------------------------------------- + - name: sra-common-prerequisites-management-account-parameters + resource_file: templates/sra-common-prerequisites-management-account-parameters.yaml + parameters: + - parameter_key: pCreateLambdaLogGroup + parameter_value: 'false' + - parameter_key: pLambdaLogGroupKmsKey + parameter_value: '' + - parameter_key: pLambdaLogGroupRetention + parameter_value: '14' + - parameter_key: pLambdaLogLevel + parameter_value: INFO + - parameter_key: pSRAStagingS3BucketName + parameter_value: + deploy_method: stack_set + deployment_targets: + accounts: + - REPLACE_ME_ORG_MANAGEMENT_ACCOUNT_NAME + + - name: sra-common-prerequisites-main-ssm + resource_file: templates/sra-common-prerequisites-main-ssm.yaml + parameters: + - parameter_key: pCreateAWSControlTowerExecutionRole + parameter_value: 'false' + - parameter_key: pCreateLambdaLogGroup + parameter_value: 'false' + - parameter_key: pCreateSRAStagingS3BucketInMemberAccounts + parameter_value: 'false' + - parameter_key: pCreateSSMParametersInMemberAccounts + parameter_value: 'true' + - parameter_key: pLambdaLogGroupKmsKey + parameter_value: '' + - parameter_key: pLambdaLogGroupRetention + parameter_value: '14' + - parameter_key: pLambdaLogLevel + parameter_value: INFO + deploy_method: stack_set + deployment_targets: + accounts: + - REPLACE_ME_ORG_MANAGEMENT_ACCOUNT_NAME + + # - name: sra-common-prerequisites-main + # resource_file: templates/sra-common-prerequisites-main.yaml + # parameters: + # - parameter_key: pAuditAccountId + # parameter_value: '' + # - parameter_key: pCreateAWSControlTowerExecutionRole + # parameter_value: 'false' + # - parameter_key: pCreateLambdaLogGroup + # parameter_value: 'false' + # - parameter_key: pCreateSRAStagingS3BucketInMemberAccounts + # parameter_value: 'false' + # - parameter_key: pCreateSSMParametersInMemberAccounts + # parameter_value: 'true' + # - parameter_key: pCustomerControlTowerRegions + # parameter_value: '' + # - parameter_key: pCustomerControlTowerRegionsWithoutHomeRegion + # parameter_value: '' + # - parameter_key: pEnabledRegions + # parameter_value: '' + # - parameter_key: pEnabledRegionsWithoutHomeRegion + # parameter_value: '' + # - parameter_key: pHomeRegion + # parameter_value: '' + # - parameter_key: pLambdaLogGroupKmsKey + # parameter_value: '' + # - parameter_key: pLambdaLogGroupRetention + # parameter_value: '14' + # - parameter_key: pLambdaLogLevel + # parameter_value: INFO + # - parameter_key: pLogArchiveAccountId + # parameter_value: '' + # - parameter_key: pManagementAccountId + # parameter_value: '' + # - parameter_key: pOrganizationId + # parameter_value: '' + # - parameter_key: pRootOrganizationalUnitId + # parameter_value: '' + # deploy_method: stack_set + # deployment_targets: + # accounts: + # - REPLACE_ME_ORG_MANAGEMENT_ACCOUNT_NAME diff --git a/aws_sra_examples/solutions/common/common_prerequisites/customizations_for_aws_control_tower/manifest.yaml b/aws_sra_examples/solutions/common/common_prerequisites/customizations_for_aws_control_tower/manifest.yaml new file mode 100644 index 00000000..026c46b3 --- /dev/null +++ b/aws_sra_examples/solutions/common/common_prerequisites/customizations_for_aws_control_tower/manifest.yaml @@ -0,0 +1,33 @@ +--- +#Default region for deploying Custom Control Tower: Code Pipeline, Step functions, Lambda, SSM parameters, and StackSets +region: us-east-1 +version: 2020-01-01 + +# Control Tower Custom Service Control Policies +organization_policies: [] + +# Control Tower Custom CloudFormation Resources +cloudformation_resources: + # ----------------------------------------------------------------------------- + # Common Prerequisites + # ----------------------------------------------------------------------------- + - name: sra-common-prerequisites-management-account-parameters + template_file: templates/sra-common-prerequisites-management-account-parameters.yaml + parameter_file: parameters/sra-common-prerequisites-management-account-parameters.json + deploy_method: stack_set + deploy_to_account: + - REPLACE_ME_ORG_MANAGEMENT_ACCOUNT_NAME + + - name: sra-common-prerequisites-main-ssm + template_file: templates/sra-common-prerequisites-main-ssm.yaml + parameter_file: parameters/sra-common-prerequisites-main-ssm.json + deploy_method: stack_set + deploy_to_account: + - REPLACE_ME_ORG_MANAGEMENT_ACCOUNT_NAME + + # - name: sra-common-prerequisites-main + # template_file: templates/sra-common-prerequisites-main.yaml + # parameter_file: parameters/sra-common-prerequisites-main.json + # deploy_method: stack_set + # deploy_to_account: + # - REPLACE_ME_ORG_MANAGEMENT_ACCOUNT_NAME diff --git a/aws_sra_examples/solutions/common/common_prerequisites/customizations_for_aws_control_tower/parameters/sra-common-prerequisites-main-ssm.json b/aws_sra_examples/solutions/common/common_prerequisites/customizations_for_aws_control_tower/parameters/sra-common-prerequisites-main-ssm.json new file mode 100644 index 00000000..59d3db8e --- /dev/null +++ b/aws_sra_examples/solutions/common/common_prerequisites/customizations_for_aws_control_tower/parameters/sra-common-prerequisites-main-ssm.json @@ -0,0 +1,30 @@ +[ + { + "ParameterKey": "pCreateAWSControlTowerExecutionRole", + "ParameterValue": "false" + }, + { + "ParameterKey": "pCreateLambdaLogGroup", + "ParameterValue": "false" + }, + { + "ParameterKey": "pCreateSRAStagingS3BucketInMemberAccounts", + "ParameterValue": "false" + }, + { + "ParameterKey": "pCreateSSMParametersInMemberAccounts", + "ParameterValue": "true" + }, + { + "ParameterKey": "pLambdaLogGroupKmsKey", + "ParameterValue": "" + }, + { + "ParameterKey": "pLambdaLogGroupRetention", + "ParameterValue": "14" + }, + { + "ParameterKey": "pLambdaLogLevel", + "ParameterValue": "INFO" + } +] \ No newline at end of file diff --git a/aws_sra_examples/solutions/common/common_prerequisites/customizations_for_aws_control_tower/parameters/sra-common-prerequisites-main.json b/aws_sra_examples/solutions/common/common_prerequisites/customizations_for_aws_control_tower/parameters/sra-common-prerequisites-main.json new file mode 100644 index 00000000..57e82cd9 --- /dev/null +++ b/aws_sra_examples/solutions/common/common_prerequisites/customizations_for_aws_control_tower/parameters/sra-common-prerequisites-main.json @@ -0,0 +1,70 @@ +[ + { + "ParameterKey": "pAuditAccountId", + "ParameterValue": "" + }, + { + "ParameterKey": "pCreateAWSControlTowerExecutionRole", + "ParameterValue": "false" + }, + { + "ParameterKey": "pCreateLambdaLogGroup", + "ParameterValue": "false" + }, + { + "ParameterKey": "pCreateSRAStagingS3BucketInMemberAccounts", + "ParameterValue": "false" + }, + { + "ParameterKey": "pCreateSSMParametersInMemberAccounts", + "ParameterValue": "true" + }, + { + "ParameterKey": "pCustomerControlTowerRegions", + "ParameterValue": "" + }, + { + "ParameterKey": "pCustomerControlTowerRegionsWithoutHomeRegion", + "ParameterValue": "" + }, + { + "ParameterKey": "pEnabledRegions", + "ParameterValue": "" + }, + { + "ParameterKey": "pEnabledRegionsWithoutHomeRegion", + "ParameterValue": "" + }, + { + "ParameterKey": "pHomeRegion", + "ParameterValue": "" + }, + { + "ParameterKey": "pLambdaLogGroupKmsKey", + "ParameterValue": "" + }, + { + "ParameterKey": "pLambdaLogGroupRetention", + "ParameterValue": "14" + }, + { + "ParameterKey": "pLambdaLogLevel", + "ParameterValue": "INFO" + }, + { + "ParameterKey": "pLogArchiveAccountId", + "ParameterValue": "" + }, + { + "ParameterKey": "pManagementAccountId", + "ParameterValue": "" + }, + { + "ParameterKey": "pOrganizationId", + "ParameterValue": "" + }, + { + "ParameterKey": "pRootOrganizationalUnitId", + "ParameterValue": "" + } +] \ No newline at end of file diff --git a/aws_sra_examples/solutions/common/common_prerequisites/customizations_for_aws_control_tower/parameters/sra-common-prerequisites-management-account-parameters.json b/aws_sra_examples/solutions/common/common_prerequisites/customizations_for_aws_control_tower/parameters/sra-common-prerequisites-management-account-parameters.json new file mode 100644 index 00000000..521c1099 --- /dev/null +++ b/aws_sra_examples/solutions/common/common_prerequisites/customizations_for_aws_control_tower/parameters/sra-common-prerequisites-management-account-parameters.json @@ -0,0 +1,22 @@ +[ + { + "ParameterKey": "pCreateLambdaLogGroup", + "ParameterValue": "false" + }, + { + "ParameterKey": "pLambdaLogGroupKmsKey", + "ParameterValue": "" + }, + { + "ParameterKey": "pLambdaLogGroupRetention", + "ParameterValue": "14" + }, + { + "ParameterKey": "pLambdaLogLevel", + "ParameterValue": "INFO" + }, + { + "ParameterKey": "pSRAStagingS3BucketName", + "ParameterValue": "" + } +] \ No newline at end of file diff --git a/aws_sra_examples/solutions/common/common_prerequisites/documentation/common-prerequisites.png b/aws_sra_examples/solutions/common/common_prerequisites/documentation/common-prerequisites.png new file mode 100644 index 0000000000000000000000000000000000000000..4e2a89940448a18c7922b286b6e33eb016245ed1 GIT binary patch literal 200157 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 ug`h&^9lag?MRj3shsIG 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%0Dh2xf0nfhpf;JXmbe4ap+c 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 literal 0 HcmV?d00001 diff --git a/aws_sra_examples/solutions/common/common_prerequisites/documentation/common-prerequisites.pptx b/aws_sra_examples/solutions/common/common_prerequisites/documentation/common-prerequisites.pptx new file mode 100644 index 0000000000000000000000000000000000000000..153e37f32ccb5583b58d0c4a89b6517c08cb3576 GIT binary patch literal 126667 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

MYNceB$LihBtWb?6`(#ut>Qxl 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

  • xq1oLyZgdtJt> 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 literal 0 HcmV?d00001 diff --git a/aws_sra_examples/solutions/common/common_prerequisites/lambda/src/app.py b/aws_sra_examples/solutions/common/common_prerequisites/lambda/src/app.py new file mode 100644 index 00000000..f694b745 --- /dev/null +++ b/aws_sra_examples/solutions/common/common_prerequisites/lambda/src/app.py @@ -0,0 +1,433 @@ +"""Custom Resource to gather data and create SSM paramters in the Control Tower management account. +Version: 1.0 + +'common_prerequisites' solution in the repo, https://github.com/aws-samples/aws-security-reference-architecture-examples + +Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +SPDX-License-Identifier: MIT-0 +""" +from __future__ import annotations + +import logging +import os +import re +from time import sleep +from typing import TYPE_CHECKING, Literal, Sequence, Union + +import boto3 +from botocore.exceptions import ClientError, EndpointConnectionError +from crhelper import CfnResource + +if TYPE_CHECKING: + from aws_lambda_typing.context import Context + from aws_lambda_typing.events import CloudFormationCustomResourceEvent + from mypy_boto3_cloudformation import CloudFormationClient + from mypy_boto3_organizations import OrganizationsClient + from mypy_boto3_ssm import SSMClient + from mypy_boto3_ssm.type_defs import TagTypeDef + +# Setup Default Logger +LOGGER = logging.getLogger(__name__) +log_level = os.environ.get("LOG_LEVEL", logging.ERROR) +LOGGER.setLevel(log_level) + +# Global Variables +CLOUDFORMATION_THROTTLE_PERIOD = 0.2 +CLOUDFORMATION_PAGE_SIZE = 100 +SSM_DELETE_PARAMETERS_MAX = 10 +SRA_CONTROL_TOWER_SSM_PATH = "/sra/control-tower" +SRA_REGIONS_SSM_PATH = "/sra/regions" +SRA_SSM_PARAMETERS = [ + "/sra/control-tower/root-organizational-unit-id", + "/sra/control-tower/organization-id", + "/sra/control-tower/management-account-id", + "/sra/control-tower/home-region", + "/sra/control-tower/audit-account-id", + "/sra/control-tower/log-archive-account-id", + "/sra/regions/enabled-regions", + "/sra/regions/enabled-regions-without-home-region", + "/sra/regions/customer-control-tower-regions", + "/sra/regions/customer-control-tower-regions-without-home-region", +] + +# Initialize the helper +helper = CfnResource(json_logging=True, log_level=log_level, boto_level="CRITICAL", sleep_on_delete=120) + +try: + MANAGEMENT_ACCOUNT_SESSION = boto3.Session() + ORG_CLIENT: OrganizationsClient = MANAGEMENT_ACCOUNT_SESSION.client("organizations") + CFN_CLIENT: CloudFormationClient = MANAGEMENT_ACCOUNT_SESSION.client("cloudformation") +except Exception as error: + LOGGER.error({"Unexpected_Error": error}) + raise ValueError("Unexpected error executing Lambda function. Review CloudWatch logs for details.") from None + + +def add_tags_to_ssm_parameter(ssm_client: SSMClient, resource_id: str, tags: Sequence[TagTypeDef]) -> None: + """Add tags to SSM parameter. + + Args: + ssm_client: Boto3 SSM client + resource_id: SSM parameter name + tags: Tags to apply to SSM parameter + """ + response = ssm_client.add_tags_to_resource(ResourceType="Parameter", ResourceId=resource_id, Tags=tags) + LOGGER.debug({"API_Call": "ssm:AddTagsToResource", "API_Response": response}) + + +def create_ssm_parameter(ssm_client: SSMClient, name: str, value: str, parameter_type: Union[Literal["String"], Literal["StringList"]]) -> None: + """Create SSM parameter. + + Args: + ssm_client: Boto3 SSM client + name: SSM parameter name + value: SSM parameter value + parameter_type: SSM parameter type + """ + response = ssm_client.put_parameter(Name=name, Value=value, Type=parameter_type, Overwrite=True) + LOGGER.debug({"API_Call": "ssm:PutParameter", "API_Response": response}) + + +def delete_ssm_parameters(ssm_client: SSMClient, names: list) -> None: + """Delete SSM parameters. + + Args: + ssm_client: Boto3 SSM client + names: SSM parameter names + """ + response = ssm_client.delete_parameters(Names=names) + LOGGER.debug({"API_Call": "ssm:DeleteParameters", "API_Response": response}) + + +def get_customer_control_tower_regions() -> list: # noqa: CCR001 + """Query 'AWSControlTowerBP-BASELINE-CLOUDWATCH' CloudFormation stack to identify customer regions. + + Returns: + Customer regions chosen in Control Tower + """ + paginator = CFN_CLIENT.get_paginator("list_stack_instances") + customer_regions = [] + aws_account = "" + all_regions_identified = False + for page in paginator.paginate(StackSetName="AWSControlTowerBP-BASELINE-CLOUDWATCH", PaginationConfig={"PageSize": CLOUDFORMATION_PAGE_SIZE}): + for instance in page["Summaries"]: + if not aws_account: + aws_account = instance["Account"] + customer_regions.append(instance["Region"]) + continue + if aws_account == instance["Account"]: + customer_regions.append(instance["Region"]) + continue + all_regions_identified = True + break + if all_regions_identified: + break + sleep(CLOUDFORMATION_THROTTLE_PERIOD) + + return customer_regions + + +def get_enabled_regions() -> list: # noqa: CCR001 + """Query STS to identify enabled regions. + + Raises: + EndpointConnectionError: region is not valid. + + Returns: + Enabled regions + """ + # available_regions = management_account_session.get_available_regions("sts") # noqa: E800 + default_available_regions = [ + "eu-central-1", + "ap-northeast-1", + "sa-east-1", + "ap-southeast-1", + "us-east-1", + "us-east-2", + "ca-central-1", + "us-west-2", + "us-west-1", + "ap-northeast-3", + "ap-northeast-2", + "ap-south-1", + "eu-west-2", + "eu-north-1", + "eu-west-1", + "ap-southeast-2", + "eu-west-3", + ] + LOGGER.info({"Default_Available_Regions": default_available_regions}) + + enabled_regions = [] + disabled_regions = [] + region_session = boto3.Session() + for region in default_available_regions: + try: + sts_client = region_session.client("sts", endpoint_url=f"https://sts.{region}.amazonaws.com", region_name=region) + sts_client.get_caller_identity() + enabled_regions.append(region) + except EndpointConnectionError: + LOGGER.error(f"Region: '{region}' is not valid.") + raise + except ClientError as error: + if error.response["Error"]["Code"] == "InvalidClientTokenId": + disabled_regions.append(region) + continue + raise + + LOGGER.info({"Disabled_Regions": disabled_regions}) + return enabled_regions + + +def get_org_ssm_parameter_info(path: str) -> dict: + """Query AWS Organizations, and get info needed to create the SSM parameters. + + Args: + path: SSM parameter hierarchy path + + Returns: + Info needed to create SSM parameters and helper data for custom resource + """ + ssm_data: dict = {"info": []} + org = ORG_CLIENT.describe_organization()["Organization"] + root_id = ORG_CLIENT.list_roots()["Roots"][0]["Id"] + + ssm_data["info"].append({"name": f"{path}/root-organizational-unit-id", "value": root_id, "parameter_type": "String"}) + ssm_data["info"].append({"name": f"{path}/organization-id", "value": org["Id"], "parameter_type": "String"}) + ssm_data["info"].append({"name": f"{path}/management-account-id", "value": org["MasterAccountId"], "parameter_type": "String"}) + ssm_data["helper"] = {"ManagementAccountId": org["MasterAccountId"], "OrganizationId": org["Id"], "RootOrganizationalUnitId": root_id} + LOGGER.info(ssm_data["helper"]) + return ssm_data + + +def get_cloudformation_ssm_parameter_info(path: str) -> dict: # noqa: CCR001 + """Query AWS CloudFormation stacksets, and get info needed to create the SSM parameters. + + Args: + path: SSM parameter hierarchy path + + Returns: + Info needed to create SSM parameters and helper data for custom resource + """ + ssm_data: dict = {"info": [], "helper": {}} + response = CFN_CLIENT.describe_stack_set(StackSetName="AWSControlTowerBP-BASELINE-CONFIG") + for parameter in response["StackSet"]["Parameters"]: + if parameter["ParameterKey"] == "HomeRegionName": + ssm_data["info"].append({"name": f"{path}/home-region", "value": parameter["ParameterValue"], "parameter_type": "String"}) + ssm_data["helper"]["HomeRegion"] = parameter["ParameterValue"] + if parameter["ParameterKey"] == "SecurityAccountId": + ssm_data["info"].append({"name": f"{path}/audit-account-id", "value": parameter["ParameterValue"], "parameter_type": "String"}) + ssm_data["helper"]["AuditAccountId"] = parameter["ParameterValue"] + + paginator = CFN_CLIENT.get_paginator("list_stack_instances") + for page in paginator.paginate(StackSetName="AWSControlTowerLoggingResources", PaginationConfig={"PageSize": CLOUDFORMATION_PAGE_SIZE}): + for instance in page["Summaries"]: + ssm_data["info"].append({"name": f"{path}/log-archive-account-id", "value": instance["Account"], "parameter_type": "String"}) + ssm_data["helper"]["LogArchiveAccountId"] = instance["Account"] + sleep(CLOUDFORMATION_THROTTLE_PERIOD) + + LOGGER.info(ssm_data["helper"]) + return ssm_data + + +def get_enabled_regions_ssm_parameter_info(home_region: str, path: str) -> dict: # noqa: CCR001 + """Query STS for enabled regions, and get info needed to create the SSM parameters. + + Args: + home_region: Control Tower home region + path: SSM parameter hierarchy path + + Returns: + Info needed to create SSM parameters and helper data for custom resource + """ + ssm_data: dict = {"info": []} + enabled_regions = get_enabled_regions() + enabled_regions_without_home_region = enabled_regions.copy() + enabled_regions_without_home_region.remove(home_region) + + ssm_data["info"].append({"name": f"{path}/enabled-regions", "value": ",".join(enabled_regions), "parameter_type": "StringList"}) + ssm_data["info"].append( + { + "name": f"{path}/enabled-regions-without-home-region", + "value": ",".join(enabled_regions_without_home_region), + "parameter_type": "StringList", + } + ) + + ssm_data["helper"] = {"EnabledRegions": enabled_regions, "EnabledRegionsWithoutHomeRegion": enabled_regions_without_home_region} + LOGGER.info(ssm_data["helper"]) + return ssm_data + + +def get_customer_control_tower_regions_ssm_parameter_info(home_region: str, path: str) -> dict: + """Query customer regions chosen in Control Tower, and get info needed to create the SSM parameters. + + Args: + home_region: Control Tower home region + path: SSM parameter hierarchy path + + Returns: + Info needed to create SSM parameters and helper data for custom resource + """ + ssm_data: dict = {"info": []} + customer_regions = get_customer_control_tower_regions() + customer_regions_without_home_region = customer_regions.copy() + customer_regions_without_home_region.remove(home_region) + + ssm_data["info"].append({"name": f"{path}/customer-control-tower-regions", "value": ",".join(customer_regions), "parameter_type": "StringList"}) + ssm_data["info"].append( + { + "name": f"{path}/customer-control-tower-regions-without-home-region", + "value": ",".join(customer_regions_without_home_region), + "parameter_type": "StringList", + } + ) + + ssm_data["helper"] = { + "CustomerControlTowerRegions": customer_regions, + "CustomerControlTowerRegionsWithoutHomeRegion": customer_regions_without_home_region, + } + LOGGER.info(ssm_data["helper"]) + return ssm_data + + +def create_ssm_parameters_in_regions(ssm_parameters: list, tags: Sequence[TagTypeDef], regions: list) -> None: + """Create SSM parameters in regions. + + Args: + ssm_parameters: Info for the SSM parameters + tags: Tags to be applied to the SSM parameters + regions: Regions + """ + parameters_created = set() + for region in regions: + region_ssm_client: SSMClient = MANAGEMENT_ACCOUNT_SESSION.client("ssm", region_name=region) + for parameter in ssm_parameters: + create_ssm_parameter(region_ssm_client, name=parameter["name"], value=parameter["value"], parameter_type=parameter["parameter_type"]) + add_tags_to_ssm_parameter(region_ssm_client, resource_id=parameter["name"], tags=tags) + parameters_created.add(parameter["name"]) + + LOGGER.info(f"Completed the creation of SSM Parameters for '{region}' region.") + LOGGER.info({"Created Parameters": list(parameters_created)}) + + +def delete_ssm_parameters_in_regions(regions: list) -> None: # noqa: CCR001 + """Delete SSM parameters in regions. + + Args: + regions: Regions + """ + for region in regions: + region_ssm_client: SSMClient = MANAGEMENT_ACCOUNT_SESSION.client("ssm", region_name=region) + + parameters_to_delete = [] + count = 0 + for parameter in SRA_SSM_PARAMETERS: + count += 1 # noqa: SIM113 + if count <= SSM_DELETE_PARAMETERS_MAX: + parameters_to_delete.append(parameter) + if count == SSM_DELETE_PARAMETERS_MAX: + count = 0 + delete_ssm_parameters(region_ssm_client, parameters_to_delete) + parameters_to_delete = [] + if parameters_to_delete: + delete_ssm_parameters(region_ssm_client, parameters_to_delete) + + LOGGER.info(f"Completed the deletion of SSM Parameters for '{region}' region.") + LOGGER.info({"Deleted Parameters": SRA_SSM_PARAMETERS}) + + +def parameter_pattern_validator(parameter_name: str, parameter_value: Union[str, None], pattern: str) -> None: + """Validate CloudFormation Custom Resource Parameters. + + Args: + parameter_name: CloudFormation custom resource parameter name + parameter_value: CloudFormation custom resource parameter value + pattern: REGEX pattern to validate against. + + Raises: + ValueError: Parameter is missing + ValueError: Parameter does not follow the allowed pattern + """ + if not parameter_value: + raise ValueError(f"'{parameter_name}' parameter is missing.") + elif not re.match(pattern, parameter_value): + raise ValueError(f"'{parameter_name}' parameter with value of '{parameter_value}' does not follow the allowed pattern: {pattern}.") + + +def get_validated_parameters() -> dict: + """Validate AWS CloudFormation parameters. + + Returns: + Validated parameters + """ + tag_key = os.getenv("TAG_KEY", "sra-solution") + tag_value = os.getenv("TAG_VALUE", "sra-common-prerequisites") + + parameter_pattern_validator("TAG_KEY", tag_key, pattern=r"^.{1,128}$") + parameter_pattern_validator("TAG_VALUE", tag_value, pattern=r"^.{1,256}$") + + return {"TAG_KEY": tag_key, "TAG_VALUE": tag_value} + + +@helper.create +@helper.update +def create_update_event(event: CloudFormationCustomResourceEvent, context: Context) -> str: # noqa: U100 + """Create/Update Event from AWS CloudFormation. + + Args: + event: event data + context: runtime information + + Returns: + AWS CloudFormation physical resource id + """ + event_info = {"Event": event} + LOGGER.info(event_info) + + params = get_validated_parameters() + tags: Sequence[TagTypeDef] = [{"Key": params["TAG_KEY"], "Value": params["TAG_VALUE"]}] + + ssm_data1 = get_org_ssm_parameter_info(path=SRA_CONTROL_TOWER_SSM_PATH) + ssm_data2 = get_cloudformation_ssm_parameter_info(path=SRA_CONTROL_TOWER_SSM_PATH) + ssm_data3 = get_customer_control_tower_regions_ssm_parameter_info(ssm_data2["helper"]["HomeRegion"], path=SRA_REGIONS_SSM_PATH) + ssm_data4 = get_enabled_regions_ssm_parameter_info(ssm_data2["helper"]["HomeRegion"], path=SRA_REGIONS_SSM_PATH) + + ssm_parameters = ssm_data1["info"] + ssm_data2["info"] + ssm_data3["info"] + ssm_data4["info"] + create_ssm_parameters_in_regions(ssm_parameters, tags, ssm_data4["helper"]["EnabledRegions"]) + + helper.Data = ssm_data1["helper"] | ssm_data2["helper"] | ssm_data3["helper"] | ssm_data4["helper"] + return "MANAGEMENT-ACCOUNT-PARAMETERS" + + +@helper.delete +def delete_event(event: CloudFormationCustomResourceEvent, context: Context) -> None: # noqa: U100 + """Delete Event from AWS CloudFormation. + + Args: + event: event data + context: runtime information + """ + event_info = {"Event": event} + LOGGER.info(event_info) + LOGGER.info("SRA SSM Parameters are being retained.") + # delete_ssm_parameters_in_regions(get_enabled_regions()) # noqa: E800 + + +def lambda_handler(event: CloudFormationCustomResourceEvent, context: Context) -> None: + """Lambda Handler. + + Args: + event: event data + context: runtime information + + Raises: + ValueError: Unexpected error executing Lambda function + """ + LOGGER.info("....Lambda Handler Started....") + try: + event_info = {"Event": event} + LOGGER.info(event_info) + helper(event, context) + except Exception as error: + LOGGER.error({"Unexpected Error": error}) + raise ValueError(f"See the details in CloudWatch Log Stream: '{context.log_group_name}'") from None diff --git a/aws_sra_examples/solutions/common/common_prerequisites/lambda/src/inline_lambda.py b/aws_sra_examples/solutions/common/common_prerequisites/lambda/src/inline_lambda.py new file mode 100644 index 00000000..50e5ddb5 --- /dev/null +++ b/aws_sra_examples/solutions/common/common_prerequisites/lambda/src/inline_lambda.py @@ -0,0 +1,47 @@ +# type: ignore +"""Custom Resource to get AWS Organization ID. +Version: 1.0 + +'common_prerequisites' solution in the repo, https://github.com/aws-samples/aws-security-reference-architecture-examples + +Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +SPDX-License-Identifier: MIT-0 +""" +import logging +import os + +import boto3 +import cfnresponse + +LOGGER = logging.getLogger(__name__) +log_level = os.environ.get("LOG_LEVEL", logging.ERROR) +LOGGER.setLevel(log_level) + + +def get_org_id(): + """Get AWS Organization ID. + + Returns: + Response data for custom resource + """ + management_account_session = boto3.Session() + org_client = management_account_session.client("organizations") + response = org_client.describe_organization()["Organization"] + LOGGER.debug({"API_Call": "organizations:DescribeOrganization", "API_Response": response}) + return {"OrganizationId": response["Id"]} + + +def lambda_handler(event, context): + """Lambda Handler. + + Args: + event: event data + context: runtime information + """ + try: + data = get_org_id() + cfnresponse.send(event, context, cfnresponse.SUCCESS, data, data["OrganizationId"]) + except Exception as error: + LOGGER.error({"Unexpected Error": error}) + reason = f"See the details in CloudWatch Log Stream: '{context.log_group_name}'" + cfnresponse.send(event, context, cfnresponse.FAILED, {}, data["OrganizationId"], reason=reason) diff --git a/aws_sra_examples/solutions/common/common_prerequisites/lambda/src/requirements.txt b/aws_sra_examples/solutions/common/common_prerequisites/lambda/src/requirements.txt new file mode 100644 index 00000000..a674f2c6 --- /dev/null +++ b/aws_sra_examples/solutions/common/common_prerequisites/lambda/src/requirements.txt @@ -0,0 +1,2 @@ +# install latest +crhelper diff --git a/aws_sra_examples/solutions/common/common_prerequisites/templates/sra-common-prerequisites-control-tower-execution-role.yaml b/aws_sra_examples/solutions/common/common_prerequisites/templates/sra-common-prerequisites-control-tower-execution-role.yaml new file mode 100644 index 00000000..690c1bf7 --- /dev/null +++ b/aws_sra_examples/solutions/common/common_prerequisites/templates/sra-common-prerequisites-control-tower-execution-role.yaml @@ -0,0 +1,102 @@ +######################################################################## +# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +# SPDX-License-Identifier: MIT-0 +######################################################################## +AWSTemplateFormatVersion: 2010-09-09 +Description: + AWS Control Tower Execution IAM Role Creation. - 'common_prerequisites' solution in the repo, + https://github.com/aws-samples/aws-security-reference-architecture-examples +Metadata: + SRA: + Version: '1.0' + Order: '1' + + AWS::CloudFormation::Interface: + ParameterGroups: + - Label: + default: General Properties + Parameters: + - pSRASolutionTagKey + - pSRASolutionName + - pManagementAccountId + - Label: + default: Control Tower Role Attributes + Parameters: + - pCreateAWSControlTowerExecutionRole + - pAWSControlTowerExecutionRoleName + ParameterLabels: + pAWSControlTowerExecutionRoleName: + default: AWS Control Tower Execution Role Name + pCreateAWSControlTowerExecutionRole: + default: Create AWS Control Tower Execution Role + pManagementAccountId: + default: Management Account ID + pSRASolutionName: + default: SRA Solution Name + pSRASolutionTagKey: + default: SRA Solution Tag Key + +Parameters: + pAWSControlTowerExecutionRoleName: + AllowedValues: [AWSControlTowerExecution] + Default: AWSControlTowerExecution + Description: AWS Control Tower execution role name + Type: String + pCreateAWSControlTowerExecutionRole: + AllowedValues: ['true', 'false'] + Default: 'true' + Description: Indicates whether the AWS Control Tower Execution role should be created. + Type: String + pManagementAccountId: + AllowedPattern: '^\d{12}$' + ConstraintDescription: Must be 12 digits. + Description: AWS Account ID of the Control Tower Management account. + Type: String + pSRASolutionName: + AllowedValues: [sra-common-prerequisites] + Default: sra-common-prerequisites + Description: The SRA solution name. The default value is the folder name of the solution + Type: String + pSRASolutionTagKey: + AllowedValues: [sra-solution] + Default: sra-solution + Description: The SRA solution tag key applied to all resources created by the solution that support tagging. The value is the pSRASolutionName. + Type: String + +Conditions: + cCreateAWSControlTowerExecutionRole: !Equals [!Ref pCreateAWSControlTowerExecutionRole, 'true'] + +Resources: + rAWSControlTowerRole: + Condition: cCreateAWSControlTowerExecutionRole + # DeletionPolicy: Retain + # UpdateReplacePolicy: Retain + Type: AWS::IAM::Role + Metadata: + cfn_nag: + rules_to_suppress: + - id: W28 + reason: Specific role name provided for AWS Control Tower + - id: W43 + reason: Administrator policy is required for the role + Properties: + RoleName: !Ref pAWSControlTowerExecutionRoleName + AssumeRolePolicyDocument: + Version: 2012-10-17 + Statement: + - Action: sts:AssumeRole + Effect: Allow + Principal: + AWS: + - !Sub arn:${AWS::Partition}:iam::${pManagementAccountId}:root + ManagedPolicyArns: + - !Sub arn:${AWS::Partition}:iam::aws:policy/AdministratorAccess + Tags: + - Key: !Ref pSRASolutionTagKey + Value: !Ref pSRASolutionName + +Outputs: + oAWSControlTowerExecutionRoleArn: + Condition: cCreateAWSControlTowerExecutionRole + Description: AWS Control Tower Execution Role ARN + Value: !Ref rAWSControlTowerRole diff --git a/aws_sra_examples/solutions/common/common_prerequisites/templates/sra-common-prerequisites-main-ssm.yaml b/aws_sra_examples/solutions/common/common_prerequisites/templates/sra-common-prerequisites-main-ssm.yaml new file mode 100644 index 00000000..1dfb81da --- /dev/null +++ b/aws_sra_examples/solutions/common/common_prerequisites/templates/sra-common-prerequisites-main-ssm.yaml @@ -0,0 +1,357 @@ +######################################################################## +# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +# SPDX-License-Identifier: MIT-0 +######################################################################## +AWSTemplateFormatVersion: 2010-09-09 +Description: + This template creates the pre-requisite resources for staging the SRA solutions. Resolving SSM parameters. - 'common_prerequisites' solution in the + repo, https://github.com/aws-samples/aws-security-reference-architecture-examples +Metadata: + SRA: + Version: '1.0' + Order: '1' + + AWS::CloudFormation::Interface: + ParameterGroups: + - Label: + default: General Properties + Parameters: + - pSRASolutionName + - pSRAStagingS3BucketNamePrefix + - pCreateSRAStagingS3BucketInMemberAccounts + - pCreateSSMParametersInMemberAccounts + - Label: + default: Control Tower Properties + Parameters: + - pAuditAccountId + - pLogArchiveAccountId + - pManagementAccountId + - pRootOrganizationalUnitId + - pOrganizationId + - pHomeRegion + - Label: + Description: Region Properties + Parameters: + - pCustomerControlTowerRegions + - pCustomerControlTowerRegionsWithoutHomeRegion + - pEnabledRegions + - pEnabledRegionsWithoutHomeRegion + - Label: + default: Control Tower Role Properties + Parameters: + - pCreateAWSControlTowerExecutionRole + - Label: + default: General Lambda Function Properties + Parameters: + - pCreateLambdaLogGroup + - pLambdaLogGroupRetention + - pLambdaLogGroupKmsKey + - pLambdaLogLevel + + ParameterLabels: + pAuditAccountId: + default: Audit Account ID + pCreateAWSControlTowerExecutionRole: + default: Create AWS Control Tower Execution Role + pCreateLambdaLogGroup: + default: Create Lambda Log Group + pCreateSRAStagingS3BucketInMemberAccounts: + default: Create SRA Staging S3 Bucket in Member Accounts + pCreateSSMParametersInMemberAccounts: + default: Create SSM Parameters in Member Accounts + pCustomerControlTowerRegions: + default: CustomerControlTowerRegions + pCustomerControlTowerRegionsWithoutHomeRegion: + default: CustomerControlTowerRegions without Home Region + pEnabledRegions: + default: Enabled Regions + pEnabledRegionsWithoutHomeRegion: + default: Enabled Regions without Home Region + pHomeRegion: + default: Control Tower Home Region + pLambdaLogGroupKmsKey: + default: (Optional) Lambda Logs KMS Key + pLambdaLogGroupRetention: + default: Lambda Log Group Retention + pLambdaLogLevel: + default: Lambda Log Level + pLogArchiveAccountId: + default: Log Archive Account ID + pManagementAccountId: + default: Management Account ID + pOrganizationId: + default: Organization ID + pRootOrganizationalUnitId: + default: Root Organizational Unit ID + pSRASolutionName: + default: SRA Solution Name + pSRAStagingS3BucketNamePrefix: + default: SRA Staging S3 Bucket Name Prefix + +Parameters: + pAuditAccountId: + AllowedPattern: '^([\w.-]{1,900})$|^(\/[\w.-]{1,900})*[\w.-]{1,900}$' + ConstraintDescription: + Must be alphanumeric or special characters [., _, -]. In addition, the slash character ( / ) used to delineate hierarchies in parameter names. + Default: /sra/control-tower/audit-account-id + Description: SSM Parameter for AWS Account ID of the Control Tower Audit account. + Type: AWS::SSM::Parameter::Value + pCreateAWSControlTowerExecutionRole: + AllowedValues: ['true', 'false'] + Default: 'true' + Description: Indicates whether the AWS Control Tower Execution role should be created. + Type: String + pCreateLambdaLogGroup: + AllowedValues: ['true', 'false'] + Default: 'false' + Description: + Indicates whether a CloudWatch Log Group should be explicitly created for the Lambda function, to allow for setting a Log Retention and/or KMS + Key for encryption. + Type: String + pCreateSRAStagingS3BucketInMemberAccounts: + AllowedValues: ['true', 'false'] + Default: 'false' + Description: Indicates whether the SRA Staging S3 Bucket should be created in all member accounts. + Type: String + pCreateSSMParametersInMemberAccounts: + AllowedValues: ['true', 'false'] + Default: 'true' + Description: Indicates whether the SSM Parameters should be created in all member accounts. + Type: String + pCustomerControlTowerRegions: + AllowedPattern: '^([\w.-]{1,900})$|^(\/[\w.-]{1,900})*[\w.-]{1,900}$' + ConstraintDescription: + Must be alphanumeric or special characters [., _, -]. In addition, the slash character ( / ) used to delineate hierarchies in parameter names. + Default: /sra/regions/customer-control-tower-regions + Description: SSM Parameter for Customer Control Tower regions + Type: AWS::SSM::Parameter::Value> + pCustomerControlTowerRegionsWithoutHomeRegion: + AllowedPattern: '^([\w.-]{1,900})$|^(\/[\w.-]{1,900})*[\w.-]{1,900}$' + ConstraintDescription: + Must be alphanumeric or special characters [., _, -]. In addition, the slash character ( / ) used to delineate hierarchies in parameter names. + Default: /sra/regions/customer-control-tower-regions-without-home-region + Description: SSM Parameter for Customer Control Tower regions without Home Region + Type: AWS::SSM::Parameter::Value> + pEnabledRegions: + AllowedPattern: '^([\w.-]{1,900})$|^(\/[\w.-]{1,900})*[\w.-]{1,900}$' + ConstraintDescription: + Must be alphanumeric or special characters [., _, -]. In addition, the slash character ( / ) used to delineate hierarchies in parameter names. + Default: /sra/regions/enabled-regions + Description: SSM Parameter for Enabled regions + Type: AWS::SSM::Parameter::Value> + pEnabledRegionsWithoutHomeRegion: + AllowedPattern: '^([\w.-]{1,900})$|^(\/[\w.-]{1,900})*[\w.-]{1,900}$' + ConstraintDescription: + Must be alphanumeric or special characters [., _, -]. In addition, the slash character ( / ) used to delineate hierarchies in parameter names. + Default: /sra/regions/enabled-regions-without-home-region + Description: SSM Parameter for Enabled regions without Home Region + Type: AWS::SSM::Parameter::Value> + pHomeRegion: + AllowedPattern: '^([\w.-]{1,900})$|^(\/[\w.-]{1,900})*[\w.-]{1,900}$' + ConstraintDescription: + Must be alphanumeric or special characters [., _, -]. In addition, the slash character ( / ) used to delineate hierarchies in parameter names. + Default: /sra/control-tower/home-region + Description: SSM Parameter for Name of the Control Tower home region + Type: AWS::SSM::Parameter::Value + pLambdaLogGroupKmsKey: + AllowedPattern: '^$|^arn:(aws[a-zA-Z-]*){1}:kms:[a-z0-9-]+:\d{12}:key\/[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$' + ConstraintDescription: 'Key ARN example: arn:aws:kms:us-east-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab' + Description: + (Optional) KMS Key ARN to use for encrypting the Lambda logs data. If empty, encryption is enabled with CloudWatch Logs managing the server-side + encryption keys. + Type: String + pLambdaLogGroupRetention: + AllowedValues: [1, 3, 5, 7, 14, 30, 60, 90, 120, 150, 180, 365, 400, 545, 731, 1827, 3653] + Default: 14 + Description: Specifies the number of days you want to retain log events + Type: String + pLambdaLogLevel: + AllowedValues: [INFO, ERROR, DEBUG] + Default: INFO + Description: Lambda Function Logging Level + Type: String + pLogArchiveAccountId: + AllowedPattern: '^([\w.-]{1,900})$|^(\/[\w.-]{1,900})*[\w.-]{1,900}$' + ConstraintDescription: + Must be alphanumeric or special characters [., _, -]. In addition, the slash character ( / ) used to delineate hierarchies in parameter names. + Default: /sra/control-tower/log-archive-account-id + Description: SSM Parameter for AWS Account ID of the Control Tower Log Archive account. + Type: AWS::SSM::Parameter::Value + pManagementAccountId: + AllowedPattern: '^([\w.-]{1,900})$|^(\/[\w.-]{1,900})*[\w.-]{1,900}$' + ConstraintDescription: + Must be alphanumeric or special characters [., _, -]. In addition, the slash character ( / ) used to delineate hierarchies in parameter names. + Default: /sra/control-tower/management-account-id + Description: SSM Parameter for AWS Account ID of the Control Tower Management account. + Type: AWS::SSM::Parameter::Value + pOrganizationId: + AllowedPattern: '^([\w.-]{1,900})$|^(\/[\w.-]{1,900})*[\w.-]{1,900}$' + ConstraintDescription: + Must be alphanumeric or special characters [., _, -]. In addition, the slash character ( / ) used to delineate hierarchies in parameter names. + Default: /sra/control-tower/organization-id + Description: SSM Parameter for AWS Organizations ID + Type: AWS::SSM::Parameter::Value + pRootOrganizationalUnitId: + AllowedPattern: '^([\w.-]{1,900})$|^(\/[\w.-]{1,900})*[\w.-]{1,900}$' + ConstraintDescription: + Must be alphanumeric or special characters [., _, -]. In addition, the slash character ( / ) used to delineate hierarchies in parameter names. + Default: /sra/control-tower/root-organizational-unit-id + Description: SSM Parameter for Root Organizational Unit ID + Type: AWS::SSM::Parameter::Value + pSRASolutionName: + AllowedValues: [sra-common-prerequisites] + Default: sra-common-prerequisites + Description: The SRA solution name. The Description value is the folder name of the solution + Type: String + pSRAStagingS3BucketNamePrefix: + AllowedValues: [sra-staging] + Default: sra-staging + Description: + SRA Staging S3 bucket name prefix for the SRA artifacts relevant to the solutions. (e.g., lambda zips, CloudFormation templates). The account + and region are added to the prefix --. Example = sra-staging-123456789012-us-east-1. + Type: String + +Conditions: + cCreateSRAStagingS3BucketInMemberAccounts: !Equals [!Ref pCreateSRAStagingS3BucketInMemberAccounts, 'true'] + cCreateSSMParametersInMemberAccounts: !Equals [!Ref pCreateSSMParametersInMemberAccounts, 'true'] + +Resources: + rControlTowerExecutionRoleStack: + Type: AWS::CloudFormation::Stack + Properties: + TemplateURL: !Sub + - https://${SRAStagingS3BucketName}.s3.${AWS::Region}.${AWS::URLSuffix}/${pSRASolutionName}/templates/sra-common-prerequisites-control-tower-execution-role.yaml + - SRAStagingS3BucketName: !Sub ${pSRAStagingS3BucketNamePrefix}-${AWS::AccountId}-${AWS::Region} + Tags: + - Key: sra-solution + Value: !Ref pSRASolutionName + Parameters: + pCreateAWSControlTowerExecutionRole: !Ref pCreateAWSControlTowerExecutionRole + pManagementAccountId: !Ref pManagementAccountId + + rSSMParametersMemberAccountsStackSet: + Condition: cCreateSSMParametersInMemberAccounts + DependsOn: rControlTowerExecutionRoleStack + Type: AWS::CloudFormation::StackSet + Properties: + StackSetName: sra-member-account-parameters + AutoDeployment: + Enabled: true + RetainStacksOnAccountRemoval: false + CallAs: SELF + Description: Deploys SSM Parameters + OperationPreferences: + FailureTolerancePercentage: 0 + MaxConcurrentPercentage: 100 + RegionConcurrencyType: PARALLEL + PermissionModel: SERVICE_MANAGED + StackInstancesGroup: + - DeploymentTargets: + OrganizationalUnitIds: + - !Ref pRootOrganizationalUnitId + Regions: !Ref pCustomerControlTowerRegions + TemplateURL: !Sub + - https://${SRAStagingS3BucketName}.s3.${AWS::Region}.${AWS::URLSuffix}/${pSRASolutionName}/templates/sra-common-prerequisites-member-account-parameters.yaml + - SRAStagingS3BucketName: !Sub ${pSRAStagingS3BucketNamePrefix}-${AWS::AccountId}-${AWS::Region} + Tags: + - Key: sra-solution + Value: !Ref pSRASolutionName + Parameters: + - ParameterKey: pAuditAccountId + ParameterValue: !Ref pAuditAccountId + - ParameterKey: pCustomerControlTowerRegions + ParameterValue: !Join [',', !Ref pCustomerControlTowerRegions] + - ParameterKey: pCustomerControlTowerRegionsWithoutHomeRegion + ParameterValue: !Join [',', !Ref pCustomerControlTowerRegionsWithoutHomeRegion] + - ParameterKey: pEnabledRegions + ParameterValue: !Join [',', !Ref pEnabledRegions] + - ParameterKey: pEnabledRegionsWithoutHomeRegion + ParameterValue: !Join [',', !Ref pEnabledRegionsWithoutHomeRegion] + - ParameterKey: pHomeRegion + ParameterValue: !Ref pHomeRegion + - ParameterKey: pLogArchiveAccountId + ParameterValue: !Ref pLogArchiveAccountId + - ParameterKey: pManagementAccountId + ParameterValue: !Ref pManagementAccountId + - ParameterKey: pOrganizationId + ParameterValue: !Ref pOrganizationId + - ParameterKey: pRootOrganizationalUnitId + ParameterValue: !Ref pRootOrganizationalUnitId + + rStagingS3BucketManagementAccountStackSet: + DependsOn: rControlTowerExecutionRoleStack + Type: AWS::CloudFormation::StackSet + Properties: + StackSetName: sra-staging-s3-bucket-management-account-regions + AdministrationRoleARN: !Sub arn:${AWS::Partition}:iam::${AWS::AccountId}:role/service-role/AWSControlTowerStackSetRole + CallAs: SELF + Capabilities: + - CAPABILITY_NAMED_IAM + Description: Deploys an SRA Staging S3 Bucket + ExecutionRoleName: AWSControlTowerExecution + OperationPreferences: + FailureTolerancePercentage: 0 + MaxConcurrentPercentage: 100 + RegionConcurrencyType: PARALLEL + PermissionModel: SELF_MANAGED + StackInstancesGroup: + - DeploymentTargets: + Accounts: + - !Ref AWS::AccountId + Regions: !Ref pCustomerControlTowerRegionsWithoutHomeRegion + TemplateURL: !Sub + - https://${SRAStagingS3BucketName}.s3.${AWS::Region}.${AWS::URLSuffix}/${pSRASolutionName}/templates/sra-common-prerequisites-staging-s3-bucket.yaml + - SRAStagingS3BucketName: !Sub ${pSRAStagingS3BucketNamePrefix}-${AWS::AccountId}-${AWS::Region} + Parameters: + - ParameterKey: pCreateLambdaLogGroup + ParameterValue: !Ref pCreateLambdaLogGroup + - ParameterKey: pLambdaLogGroupKmsKey + ParameterValue: !Ref pLambdaLogGroupKmsKey + - ParameterKey: pLambdaLogGroupRetention + ParameterValue: !Ref pLambdaLogGroupRetention + - ParameterKey: pLambdaLogLevel + ParameterValue: !Ref pLambdaLogLevel + - ParameterKey: pOrganizationId + ParameterValue: !Ref pOrganizationId + - ParameterKey: pSRASolutionName + ParameterValue: !Ref pSRASolutionName + + rStagingS3BucketMemberAccountsStackSet: + Condition: cCreateSRAStagingS3BucketInMemberAccounts + DependsOn: rControlTowerExecutionRoleStack + Type: AWS::CloudFormation::StackSet + Properties: + StackSetName: sra-staging-s3-bucket-member-accounts + AutoDeployment: + Enabled: true + RetainStacksOnAccountRemoval: false + CallAs: SELF + Capabilities: + - CAPABILITY_NAMED_IAM + Description: Deploys an SRA Staging S3 Bucket + OperationPreferences: + FailureTolerancePercentage: 0 + MaxConcurrentPercentage: 100 + RegionConcurrencyType: PARALLEL + PermissionModel: SERVICE_MANAGED + StackInstancesGroup: + - DeploymentTargets: + OrganizationalUnitIds: + - !Ref pRootOrganizationalUnitId + Regions: !Ref pCustomerControlTowerRegions + TemplateURL: !Sub + - https://${SRAStagingS3BucketName}.s3.${AWS::Region}.${AWS::URLSuffix}/${pSRASolutionName}/templates/sra-common-prerequisites-staging-s3-bucket.yaml + - SRAStagingS3BucketName: !Sub ${pSRAStagingS3BucketNamePrefix}-${AWS::AccountId}-${AWS::Region} + Parameters: + - ParameterKey: pCreateLambdaLogGroup + ParameterValue: !Ref pCreateLambdaLogGroup + - ParameterKey: pLambdaLogGroupKmsKey + ParameterValue: !Ref pLambdaLogGroupKmsKey + - ParameterKey: pLambdaLogGroupRetention + ParameterValue: !Ref pLambdaLogGroupRetention + - ParameterKey: pLambdaLogLevel + ParameterValue: !Ref pLambdaLogLevel + - ParameterKey: pOrganizationId + ParameterValue: !Ref pOrganizationId + - ParameterKey: pSRASolutionName + ParameterValue: !Ref pSRASolutionName diff --git a/aws_sra_examples/solutions/common/common_prerequisites/templates/sra-common-prerequisites-main.yaml b/aws_sra_examples/solutions/common/common_prerequisites/templates/sra-common-prerequisites-main.yaml new file mode 100644 index 00000000..fa507690 --- /dev/null +++ b/aws_sra_examples/solutions/common/common_prerequisites/templates/sra-common-prerequisites-main.yaml @@ -0,0 +1,341 @@ +######################################################################## +# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +# SPDX-License-Identifier: MIT-0 +######################################################################## +AWSTemplateFormatVersion: 2010-09-09 +Description: + This template creates the pre-requisite resources for staging the SRA solutions. - 'common_prerequisites' solution in the repo, + https://github.com/aws-samples/aws-security-reference-architecture-examples +Metadata: + SRA: + Version: '1.0' + Order: '1' + + AWS::CloudFormation::Interface: + ParameterGroups: + - Label: + default: General Properties + Parameters: + - pSRASolutionName + - pSRAStagingS3BucketNamePrefix + - pCreateSRAStagingS3BucketInMemberAccounts + - pCreateSSMParametersInMemberAccounts + - Label: + default: Control Tower Properties + Parameters: + - pAuditAccountId + - pLogArchiveAccountId + - pManagementAccountId + - pRootOrganizationalUnitId + - pOrganizationId + - pHomeRegion + - Label: + Description: Region Properties + Parameters: + - pCustomerControlTowerRegions + - pCustomerControlTowerRegionsWithoutHomeRegion + - pEnabledRegions + - pEnabledRegionsWithoutHomeRegion + - Label: + default: Control Tower Role Properties + Parameters: + - pCreateAWSControlTowerExecutionRole + - Label: + default: General Lambda Function Properties + Parameters: + - pCreateLambdaLogGroup + - pLambdaLogGroupRetention + - pLambdaLogGroupKmsKey + - pLambdaLogLevel + + ParameterLabels: + pAuditAccountId: + default: Audit Account ID + pCreateAWSControlTowerExecutionRole: + default: Create AWS Control Tower Execution Role + pCreateLambdaLogGroup: + default: Create Lambda Log Group + pCreateSRAStagingS3BucketInMemberAccounts: + default: Create SRA Staging S3 Bucket in Member Accounts + pCreateSSMParametersInMemberAccounts: + default: Create SSM Parameters in Member Accounts + pCustomerControlTowerRegions: + default: Customer Control Tower Regions + pCustomerControlTowerRegionsWithoutHomeRegion: + default: Customer Control Tower Regions without Home Region + pEnabledRegions: + default: Enabled Regions + pEnabledRegionsWithoutHomeRegion: + default: Enabled Regions without Home Region + pHomeRegion: + default: Control Tower Home Region + pLambdaLogGroupRetention: + default: Lambda Log Group Retention + pLambdaLogGroupKmsKey: + default: (Optional) Lambda Logs KMS Key + pLambdaLogLevel: + default: Lambda Log Level + pLogArchiveAccountId: + default: Log Archive Account ID + pManagementAccountId: + default: Management Account ID + pOrganizationId: + default: Organization ID + pRootOrganizationalUnitId: + default: Root Organizational Unit ID + pSRASolutionName: + default: SRA Solution Name + pSRAStagingS3BucketNamePrefix: + default: SRA Staging S3 Bucket Name Prefix + +Parameters: + pAuditAccountId: + AllowedPattern: '^\d{12}$' + ConstraintDescription: Must be 12 digits. + Description: AWS Account ID of the Control Tower Audit account. + Type: String + pCreateAWSControlTowerExecutionRole: + AllowedValues: ['true', 'false'] + Default: 'true' + Description: Indicates whether the AWS Control Tower Execution role should be created. + Type: String + pCreateLambdaLogGroup: + AllowedValues: ['true', 'false'] + Default: 'false' + Description: + Indicates whether a CloudWatch Log Group should be explicitly created for the Lambda function, to allow for setting a Log Retention and/or KMS + Key for encryption. + Type: String + pCreateSRAStagingS3BucketInMemberAccounts: + AllowedValues: ['true', 'false'] + Default: 'false' + Description: Indicates whether the SRA Staging S3 Bucket should be created in all member accounts. + Type: String + pCreateSSMParametersInMemberAccounts: + AllowedValues: ['true', 'false'] + Default: 'true' + Description: Indicates whether the SSM Parameters should be created in all member accounts. + Type: String + pCustomerControlTowerRegions: + AllowedPattern: '^([a-z0-9-]{1,64})$|^(([a-z0-9-]{1,64},)*[a-z0-9-]{1,64})$' + ConstraintDescription: + Only lowercase letters, numbers, and hyphens ('-') allowed. (e.g. us-east-1) Additional AWS regions can be provided, separated by commas without + spaces. (e.g. us-east-1,ap-southeast-2) + Description: Customer Control Tower regions (2+ regions, separate by commas) + Type: String + pCustomerControlTowerRegionsWithoutHomeRegion: + AllowedPattern: '^([a-z0-9-]{1,64})$|^(([a-z0-9-]{1,64},)*[a-z0-9-]{1,64})$' + ConstraintDescription: + Only lowercase letters, numbers, and hyphens ('-') allowed. (e.g. us-east-1) Additional AWS regions can be provided, separated by commas without + spaces. (e.g. us-east-1,ap-southeast-2) + Description: Customer Control Tower regions without Home Region (2+ regions, separate by commas) + Type: String + pEnabledRegions: + AllowedPattern: '^([a-z0-9-]{1,64})$|^(([a-z0-9-]{1,64},)*[a-z0-9-]{1,64})$' + ConstraintDescription: + Only lowercase letters, numbers, and hyphens ('-') allowed. (e.g. us-east-1) Additional AWS regions can be provided, separated by commas without + spaces. (e.g. us-east-1,ap-southeast-2) + Description: Enabled regions (2+ regions, separate by commas) + Type: String + pEnabledRegionsWithoutHomeRegion: + AllowedPattern: '^([a-z0-9-]{1,64})$|^(([a-z0-9-]{1,64},)*[a-z0-9-]{1,64})$' + ConstraintDescription: + Only lowercase letters, numbers, and hyphens ('-') allowed. (e.g. us-east-1) Additional AWS regions can be provided, separated by commas without + spaces. (e.g. us-east-1,ap-southeast-2) + Description: Enabled regions without Home Region (2+ regions, separate by commas) + Type: String + pHomeRegion: + AllowedPattern: '^[a-z0-9-]{1,64}$' + ConstraintDescription: AWS Region Example - 'us-east-1' + Description: Name of the Control Tower home region + Type: String + pLambdaLogGroupKmsKey: + AllowedPattern: '^$|^arn:(aws[a-zA-Z-]*){1}:kms:[a-z0-9-]+:\d{12}:key\/[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$' + ConstraintDescription: 'Key ARN example: arn:aws:kms:us-east-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab' + Description: + (Optional) KMS Key ARN to use for encrypting the Lambda logs data. If empty, encryption is enabled with CloudWatch Logs managing the server-side + encryption keys. + Type: String + pLambdaLogGroupRetention: + AllowedValues: [1, 3, 5, 7, 14, 30, 60, 90, 120, 150, 180, 365, 400, 545, 731, 1827, 3653] + Default: 14 + Description: Specifies the number of days you want to retain log events + Type: String + pLambdaLogLevel: + AllowedValues: [INFO, ERROR, DEBUG] + Default: INFO + Description: Lambda Function Logging Level + Type: String + pLogArchiveAccountId: + AllowedPattern: '^\d{12}$' + ConstraintDescription: Must be 12 digits. + Description: AWS Account ID of the Control Tower Log Archive account. + Type: String + pManagementAccountId: + AllowedPattern: '^\d{12}$' + ConstraintDescription: Must be 12 digits. + Description: AWS Account ID of the Control Tower Management account. + Type: String + pOrganizationId: + AllowedPattern: '^o-[a-z0-9]{10,32}$' + ConstraintDescription: Must start with 'o-' followed by from 10 to 32 lowercase letters or digits. (e.g. o-abc1234567) + Description: AWS Organizations ID + Type: String + pRootOrganizationalUnitId: + AllowedPattern: '^r-[0-9a-z]{4,32}$' + ConstraintDescription: Must start with 'r-' followed by from 4 to 32 lowercase letters or digits. (e.g. r-abc123) + Description: Root Organizational Unit ID + Type: String + pSRASolutionName: + AllowedValues: [sra-common-prerequisites] + Default: sra-common-prerequisites + Description: The SRA solution name. The Description value is the folder name of the solution + Type: String + pSRAStagingS3BucketNamePrefix: + AllowedValues: [sra-staging] + Default: sra-staging + Description: + SRA Staging S3 bucket name prefix for the SRA artifacts relevant to the solutions. (e.g., lambda zips, CloudFormation templates). The account + and region are added to the prefix --. Example = sra-staging-123456789012-us-east-1. + Type: String + +Conditions: + cCreateSRAStagingS3BucketInMemberAccounts: !Equals [!Ref pCreateSRAStagingS3BucketInMemberAccounts, 'true'] + cCreateSSMParametersInMemberAccounts: !Equals [!Ref pCreateSSMParametersInMemberAccounts, 'true'] + +Resources: + rControlTowerExecutionRoleStack: + Type: AWS::CloudFormation::Stack + Properties: + TemplateURL: !Sub + - https://${SRAStagingS3BucketName}.s3.${AWS::Region}.${AWS::URLSuffix}/${pSRASolutionName}/templates/sra-common-prerequisites-control-tower-execution-role.yaml + - SRAStagingS3BucketName: !Sub ${pSRAStagingS3BucketNamePrefix}-${AWS::AccountId}-${AWS::Region} + Tags: + - Key: sra-solution + Value: !Ref pSRASolutionName + Parameters: + pCreateAWSControlTowerExecutionRole: !Ref pCreateAWSControlTowerExecutionRole + pManagementAccountId: !Ref pManagementAccountId + + rSSMParametersMemberAccountsStackSet: + Condition: cCreateSSMParametersInMemberAccounts + DependsOn: rControlTowerExecutionRoleStack + Type: AWS::CloudFormation::StackSet + Properties: + StackSetName: sra-member-account-parameters + AutoDeployment: + Enabled: true + RetainStacksOnAccountRemoval: false + CallAs: SELF + Description: Deploys SSM Parameters + OperationPreferences: + FailureTolerancePercentage: 0 + MaxConcurrentPercentage: 100 + RegionConcurrencyType: PARALLEL + PermissionModel: SERVICE_MANAGED + StackInstancesGroup: + - DeploymentTargets: + OrganizationalUnitIds: + - !Ref pRootOrganizationalUnitId + Regions: !Split [',', !Ref pCustomerControlTowerRegions] + TemplateURL: !Sub + - https://${SRAStagingS3BucketName}.s3.${AWS::Region}.${AWS::URLSuffix}/${pSRASolutionName}/templates/sra-common-prerequisites-member-account-parameters.yaml + - SRAStagingS3BucketName: !Sub ${pSRAStagingS3BucketNamePrefix}-${AWS::AccountId}-${AWS::Region} + Tags: + - Key: sra-solution + Value: !Ref pSRASolutionName + Parameters: + - ParameterKey: pAuditAccountId + ParameterValue: !Ref pAuditAccountId + - ParameterKey: pCustomerControlTowerRegions + ParameterValue: !Ref pCustomerControlTowerRegions + - ParameterKey: pCustomerControlTowerRegionsWithoutHomeRegion + ParameterValue: !Ref pCustomerControlTowerRegionsWithoutHomeRegion + - ParameterKey: pEnabledRegions + ParameterValue: !Ref pEnabledRegions + - ParameterKey: pEnabledRegionsWithoutHomeRegion + ParameterValue: !Ref pEnabledRegionsWithoutHomeRegion + - ParameterKey: pHomeRegion + ParameterValue: !Ref pHomeRegion + - ParameterKey: pLogArchiveAccountId + ParameterValue: !Ref pLogArchiveAccountId + - ParameterKey: pManagementAccountId + ParameterValue: !Ref pManagementAccountId + - ParameterKey: pOrganizationId + ParameterValue: !Ref pOrganizationId + - ParameterKey: pRootOrganizationalUnitId + ParameterValue: !Ref pRootOrganizationalUnitId + + rStagingS3BucketManagementAccountStackSet: + DependsOn: rControlTowerExecutionRoleStack + Type: AWS::CloudFormation::StackSet + Properties: + StackSetName: sra-staging-s3-bucket-management-account-regions + AdministrationRoleARN: !Sub arn:${AWS::Partition}:iam::${AWS::AccountId}:role/service-role/AWSControlTowerStackSetRole + CallAs: SELF + Capabilities: + - CAPABILITY_NAMED_IAM + Description: Deploys an SRA Staging S3 Bucket + ExecutionRoleName: AWSControlTowerExecution + OperationPreferences: + FailureTolerancePercentage: 0 + MaxConcurrentPercentage: 100 + RegionConcurrencyType: PARALLEL + PermissionModel: SELF_MANAGED + StackInstancesGroup: + - DeploymentTargets: + Accounts: + - !Ref AWS::AccountId + Regions: !Split [',', pCustomerControlTowerRegionsWithoutHomeRegion] + TemplateURL: !Sub + - https://${SRAStagingS3BucketName}.s3.${AWS::Region}.${AWS::URLSuffix}/${pSRASolutionName}/templates/sra-common-prerequisites-staging-s3-bucket.yaml + - SRAStagingS3BucketName: !Sub ${pSRAStagingS3BucketNamePrefix}-${AWS::AccountId}-${AWS::Region} + Parameters: + - ParameterKey: pCreateLambdaLogGroup + ParameterValue: !Ref pCreateLambdaLogGroup + - ParameterKey: pLambdaLogGroupKmsKey + ParameterValue: !Ref pLambdaLogGroupKmsKey + - ParameterKey: pLambdaLogGroupRetention + ParameterValue: !Ref pLambdaLogGroupRetention + - ParameterKey: pLambdaLogLevel + ParameterValue: !Ref pLambdaLogLevel + - ParameterKey: pOrganizationId + ParameterValue: !Ref pOrganizationId + + rStagingS3BucketMemberAccountsStackSet: + Condition: cCreateSRAStagingS3BucketInMemberAccounts + DependsOn: rControlTowerExecutionRoleStack + Type: AWS::CloudFormation::StackSet + Properties: + StackSetName: sra-staging-s3-bucket-member-accounts + AutoDeployment: + Enabled: true + RetainStacksOnAccountRemoval: false + CallAs: SELF + Capabilities: + - CAPABILITY_NAMED_IAM + Description: Deploys an SRA Staging S3 Bucket + OperationPreferences: + FailureTolerancePercentage: 0 + MaxConcurrentPercentage: 100 + RegionConcurrencyType: PARALLEL + PermissionModel: SERVICE_MANAGED + StackInstancesGroup: + - DeploymentTargets: + OrganizationalUnitIds: + - !Ref pRootOrganizationalUnitId + Regions: !Split [',', !Ref pCustomerControlTowerRegions] + TemplateURL: !Sub + - https://${SRAStagingS3BucketName}.s3.${AWS::Region}.${AWS::URLSuffix}/${pSRASolutionName}/templates/sra-common-prerequisites-staging-s3-bucket.yaml + - SRAStagingS3BucketName: !Sub ${pSRAStagingS3BucketNamePrefix}-${AWS::AccountId}-${AWS::Region} + Parameters: + - ParameterKey: pCreateLambdaLogGroup + ParameterValue: !Ref pCreateLambdaLogGroup + - ParameterKey: pLambdaLogGroupKmsKey + ParameterValue: !Ref pLambdaLogGroupKmsKey + - ParameterKey: pLambdaLogGroupRetention + ParameterValue: !Ref pLambdaLogGroupRetention + - ParameterKey: pLambdaLogLevel + ParameterValue: !Ref pLambdaLogLevel + - ParameterKey: pOrganizationId + ParameterValue: !Ref pOrganizationId diff --git a/aws_sra_examples/solutions/common/common_prerequisites/templates/sra-common-prerequisites-management-account-parameters.yaml b/aws_sra_examples/solutions/common/common_prerequisites/templates/sra-common-prerequisites-management-account-parameters.yaml new file mode 100644 index 00000000..bc89058b --- /dev/null +++ b/aws_sra_examples/solutions/common/common_prerequisites/templates/sra-common-prerequisites-management-account-parameters.yaml @@ -0,0 +1,286 @@ +######################################################################## +# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +# SPDX-License-Identifier: MIT-0 +######################################################################## +AWSTemplateFormatVersion: 2010-09-09 +Description: + This template creates AWS Control Tower Account SSM Parameters. - 'common_prerequisites' solution in the repo, + https://github.com/aws-samples/aws-security-reference-architecture-examples +Metadata: + SRA: + Version: '1.0' + Order: '1' + + AWS::CloudFormation::Interface: + ParameterGroups: + - Label: + default: General Properties + Parameters: + - pSRASolutionTagKey + - pSRASolutionName + - pSRAStagingS3BucketName + - Label: + default: Management Account Parameters - Lambda Function Properties + Parameters: + - pManagementAccountParametersLambdaRoleName + - pManagementAccountParametersLambdaFunctionName + - Label: + default: General Lambda Function Properties + Parameters: + - pCreateLambdaLogGroup + - pLambdaLogGroupRetention + - pLambdaLogGroupKmsKey + - pLambdaLogLevel + ParameterLabels: + pCreateLambdaLogGroup: + default: Create Lambda Log Group + pLambdaLogGroupKmsKey: + default: (Optional) Lambda Logs KMS Key + pLambdaLogGroupRetention: + default: Lambda Log Group Retention + pLambdaLogLevel: + default: Lambda Log Level + pManagementAccountParametersLambdaFunctionName: + default: Management Account Parameters - Lambda Function Name + pManagementAccountParametersLambdaRoleName: + default: Management Account Parameters - Lambda Role Name + pSRASolutionName: + default: SRA Solution Name + pSRASolutionTagKey: + default: SRA Solution Tag Key + pSRAStagingS3BucketName: + default: (Optional) SRA Staging S3 Bucket Name + +Parameters: + pCreateLambdaLogGroup: + AllowedValues: ['true', 'false'] + Default: 'false' + Description: + Indicates whether a CloudWatch Log Group should be explicitly created for the Lambda function, to allow for setting a Log Retention and/or KMS + Key for encryption. + Type: String + pLambdaLogGroupKmsKey: + AllowedPattern: '^$|^arn:(aws[a-zA-Z-]*){1}:kms:[a-z0-9-]+:\d{12}:key\/[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$' + ConstraintDescription: 'Key ARN example: arn:aws:kms:us-east-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab' + Description: + (Optional) KMS Key ARN to use for encrypting the Lambda logs data. If empty, encryption is enabled with CloudWatch Logs managing the server-side + encryption keys. + Type: String + pLambdaLogGroupRetention: + AllowedValues: [1, 3, 5, 7, 14, 30, 60, 90, 120, 150, 180, 365, 400, 545, 731, 1827, 3653] + Default: 14 + Description: Specifies the number of days you want to retain log events + Type: String + pLambdaLogLevel: + AllowedValues: [INFO, ERROR, DEBUG] + Default: INFO + Description: Lambda Function Logging Level + Type: String + pManagementAccountParametersLambdaFunctionName: + AllowedPattern: '^[\w-]{1,64}$' + ConstraintDescription: Max 64 alphanumeric characters. Also special characters supported [_, -] + Default: sra-management-account-parameters + Description: Lambda function name for creating Control Tower account SSM parameters. + Type: String + pManagementAccountParametersLambdaRoleName: + AllowedPattern: '^[\w+=,.@-]{1,64}$' + ConstraintDescription: Max 64 alphanumeric characters. Also special characters supported [+, =, ., @, -]. + Default: sra-management-account-parameters-lambda + Description: Lambda execution role for creating Control Tower account SSM parameters. + Type: String + pSRASolutionName: + AllowedValues: [sra-common-prerequisites] + Default: sra-common-prerequisites + Description: The SRA solution name. The default value is the folder name of the solution + Type: String + pSRASolutionTagKey: + AllowedValues: [sra-solution] + Default: sra-solution + Description: The SRA solution tag key applied to all resources created by the solution that support tagging. The value is the pSRASolutionName. + Type: String + pSRAStagingS3BucketName: + AllowedPattern: '^$|^[0-9a-zA-Z]+([0-9a-zA-Z-]*[0-9a-zA-Z])*$' + ConstraintDescription: + S3 bucket name can include numbers, lowercase letters, uppercase letters, and hyphens (-). It cannot start or end with a hyphen (-). + Description: + (Optional) SRA Staging S3 bucket name for the artifacts relevant to solution. (e.g., lambda zips, CloudFormation templates). If empty, the SRA + Staging S3 bucket name will be resolved from the SSM Parameter '/sra/staging-s3-bucket-name'. + Type: String + +Conditions: + cCreateLambdaLogGroup: !Equals [!Ref pCreateLambdaLogGroup, 'true'] + cUseKmsKey: !Not [!Equals [!Ref pLambdaLogGroupKmsKey, '']] + cUseSRAStagingS3BucketNameSSMParameter: !Equals [!Ref pSRAStagingS3BucketName, ''] + +Resources: + rManagementAccountParametersLambdaCustomResource: + Type: Custom::LambdaCustomResource + Version: '1.0' + Properties: + ServiceToken: !GetAtt rManagementAccountParametersLambdaFunction.Arn + TAG_KEY: !Ref pSRASolutionTagKey + TAG_VALUE: !Ref pSRASolutionName + + rManagementAccountParametersLambdaFunction: + Metadata: + cfn_nag: + rules_to_suppress: + - id: W58 + reason: Lambda role provides access to CloudWatch Logs + - id: W89 + reason: Lambda does not need to communicate with VPC resources. + - id: W92 + reason: Lambda does not need reserved concurrent executions. + checkov: + - checkov:skip=CKV_AWS_116:DLQ not needed, as Lambda function only triggered by CloudFormation events. + - checkov:skip=CKV_AWS_173:Environment variables are not sensitive + Type: AWS::Lambda::Function + Properties: + FunctionName: !Ref pManagementAccountParametersLambdaFunctionName + Description: Creates Control Tower account SSM Parameters in the Management Account + Architectures: [arm64] + Handler: app.lambda_handler + Role: !GetAtt rManagementAccountParametersLambdaRole.Arn + Runtime: python3.9 + Timeout: 300 + Code: + S3Bucket: !If + - cUseSRAStagingS3BucketNameSSMParameter + - '{{resolve:ssm:/sra/staging-s3-bucket-name}}' + - !Ref pSRAStagingS3BucketName + S3Key: !Sub ${pSRASolutionName}/lambda_code/${pSRASolutionName}.zip + Environment: + Variables: + LOG_LEVEL: !Ref pLambdaLogLevel + TAG_KEY: !Ref pSRASolutionTagKey + TAG_VALUE: !Ref pSRASolutionName + Tags: + - Key: !Ref pSRASolutionTagKey + Value: !Ref pSRASolutionName + + rManagementAccountParametersLambdaLogGroup: + Condition: cCreateLambdaLogGroup + DeletionPolicy: Retain + Type: AWS::Logs::LogGroup + UpdateReplacePolicy: Retain + Properties: + LogGroupName: !Sub /aws/lambda/${pManagementAccountParametersLambdaFunctionName} + KmsKeyId: !If + - cUseKmsKey + - !Ref pLambdaLogGroupKmsKey + - !Ref AWS::NoValue + RetentionInDays: !Ref pLambdaLogGroupRetention + + rManagementAccountParametersLambdaRole: + Type: AWS::IAM::Role + Metadata: + cfn_nag: + rules_to_suppress: + - id: W11 + reason: Allow * in resource when required + - id: W28 + reason: The role name is defined to identify automation resources + Properties: + RoleName: !Ref pManagementAccountParametersLambdaRoleName + Description: !Sub Role for '${pManagementAccountParametersLambdaRoleName}' Lambda function + AssumeRolePolicyDocument: + Version: 2012-10-17 + Statement: + - Effect: Allow + Action: sts:AssumeRole + Principal: + Service: + - lambda.amazonaws.com + Tags: + - Key: !Ref pSRASolutionTagKey + Value: !Ref pSRASolutionName + Policies: + - PolicyName: ssm-account-parameter-creator + PolicyDocument: + Version: 2012-10-17 + Statement: + - Sid: STSOrganizationRead + Effect: Allow + Action: + - organizations:DescribeOrganization + - organizations:ListAccounts + - organizations:ListRoots + Resource: '*' + - Sid: CloudFormationRead + Effect: Allow + Action: + - cloudformation:DescribeStackSet + - cloudformation:ListStackInstances + Resource: '*' + - Sid: SSMParameterRead + Effect: Allow + Action: ssm:DescribeParameters + Resource: '*' + - Sid: SSMParameterReadValues + Effect: Allow + Action: ssm:GetParameters + Resource: !Sub arn:${AWS::Partition}:ssm:*:${AWS::AccountId}:parameter/sra/* + - Sid: SSMParameterWrite + Effect: Allow + Action: + - ssm:AddTagsToResource + - ssm:DeleteParameters + - ssm:PutParameter + Resource: !Sub arn:${AWS::Partition}:ssm:*:${AWS::AccountId}:parameter/sra/* + - Sid: TagsRead + Effect: Allow + Action: tag:GetResources + Resource: '*' + - PolicyName: CloudWatchLogGroup + PolicyDocument: + Version: 2012-10-17 + Statement: + - Sid: CloudWatchLogs + Effect: Allow + Action: + - logs:CreateLogGroup + - logs:CreateLogStream + - logs:PutLogEvents + Resource: !Sub arn:${AWS::Partition}:logs:${AWS::Region}:${AWS::AccountId}:log-group:/aws/lambda/${pManagementAccountParametersLambdaFunctionName}:log-stream:* + +Outputs: + oAuditAccountId: + Description: Audit Account ID + Value: !GetAtt rManagementAccountParametersLambdaCustomResource.AuditAccountId + oCustomerControlTowerRegions: + Description: Customer Control Tower Regions + Value: !Join [',', !GetAtt rManagementAccountParametersLambdaCustomResource.CustomerControlTowerRegions] + oCustomerControlTowerRegionsWithoutHomeRegion: + Description: Customer Control Tower Regions without Home Region + Value: !Join [',', !GetAtt rManagementAccountParametersLambdaCustomResource.CustomerControlTowerRegionsWithoutHomeRegion] + oEnabledRegions: + Description: Enabled Regions + Value: !Join [',', !GetAtt rManagementAccountParametersLambdaCustomResource.EnabledRegions] + oEnabledRegionsWithoutHomeRegion: + Description: Enabled Regions without Home Region + Value: !Join [',', !GetAtt rManagementAccountParametersLambdaCustomResource.EnabledRegionsWithoutHomeRegion] + oHomeRegion: + Description: Control Tower Home Region + Value: !GetAtt rManagementAccountParametersLambdaCustomResource.HomeRegion + oLogArchiveAccountId: + Description: Log Archive Account ID + Value: !GetAtt rManagementAccountParametersLambdaCustomResource.LogArchiveAccountId + oManagementAccountId: + Description: Management Account ID + Value: !GetAtt rManagementAccountParametersLambdaCustomResource.ManagementAccountId + oOrganizationId: + Description: Organization ID + Value: !GetAtt rManagementAccountParametersLambdaCustomResource.OrganizationId + oRootOrganizationalUnitId: + Description: Root Organizational Unit ID + Value: !GetAtt rManagementAccountParametersLambdaCustomResource.RootOrganizationalUnitId + oManagementAccountParametersLambdaFunctionArn: + Description: Management Account Parameters Lambda Function ARN + Value: !GetAtt rManagementAccountParametersLambdaFunction.Arn + oManagementAccountParametersLambdaLogGroupArn: + Condition: cCreateLambdaLogGroup + Description: Management Account Parameters Lambda Log Group ARN + Value: !GetAtt rManagementAccountParametersLambdaLogGroup.Arn + oManagementAccountParametersLambdaRoleArn: + Description: Management Account Parameters Lambda Role ARN + Value: !GetAtt rManagementAccountParametersLambdaRole.Arn diff --git a/aws_sra_examples/solutions/common/common_prerequisites/templates/sra-common-prerequisites-member-account-parameters.yaml b/aws_sra_examples/solutions/common/common_prerequisites/templates/sra-common-prerequisites-member-account-parameters.yaml new file mode 100644 index 00000000..2dfea22d --- /dev/null +++ b/aws_sra_examples/solutions/common/common_prerequisites/templates/sra-common-prerequisites-member-account-parameters.yaml @@ -0,0 +1,277 @@ +######################################################################## +# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +# SPDX-License-Identifier: MIT-0 +######################################################################## +AWSTemplateFormatVersion: 2010-09-09 +Description: + This template creates the pre-requisite SSM parameters for staging the SRA solutions in the member accounts by resolving the corresponding SSM + parameters in the management account. - 'common_prerequisites' solution in the repo, + https://github.com/aws-samples/aws-security-reference-architecture-examples +Metadata: + SRA: + Version: '1.0' + Order: '2' + + AWS::CloudFormation::Interface: + ParameterGroups: + - Label: + Description: General Properties + Parameters: + - pSRASolutionName + - Label: + Description: Control Tower SSM Parameters + Parameters: + - pAuditAccountId + - pLogArchiveAccountId + - pManagementAccountId + - pRootOrganizationalUnitId + - pOrganizationId + - pHomeRegion + - Label: + Description: Region SSM Parameters + Parameters: + - pCustomerControlTowerRegions + - pCustomerControlTowerRegionsWithoutHomeRegion + - pEnabledRegions + - pEnabledRegionsWithoutHomeRegion + ParameterLabels: + pAuditAccountId: + default: Audit Account ID + pCustomerControlTowerRegions: + default: Customer Control Tower Regions + pCustomerControlTowerRegionsWithoutHomeRegion: + default: Customer Control Tower Regions without Home Region + pEnabledRegions: + default: Enabled Regions + pEnabledRegionsWithoutHomeRegion: + default: Enabled Regions without Home Region + pHomeRegion: + default: Control Tower Home Region + pLogArchiveAccountId: + default: Log Archive Account ID + pManagementAccountId: + default: Management Account ID + pOrganizationId: + default: Organization ID + pRootOrganizationalUnitId: + default: Root Organizational Unit ID + pSRASolutionName: + default: SRA Solution Name + +Parameters: + pAuditAccountId: + AllowedPattern: '^\d{12}$' + ConstraintDescription: Must be 12 digits. + Description: AWS Account ID of the Control Tower Audit account. + Type: String + pCustomerControlTowerRegions: + AllowedPattern: '^([a-z0-9-]{1,64})$|^(([a-z0-9-]{1,64},)*[a-z0-9-]{1,64})$' + ConstraintDescription: + Only lowercase letters, numbers, and hyphens ('-') allowed. (e.g. us-east-1) Additional AWS regions can be provided, separated by commas. (e.g. + us-east-1,ap-southeast-2) + Description: Customer Control Tower regions (2+ regions, separate by commas) + Type: String + pCustomerControlTowerRegionsWithoutHomeRegion: + AllowedPattern: '^([a-z0-9-]{1,64})$|^(([a-z0-9-]{1,64},)*[a-z0-9-]{1,64})$' + ConstraintDescription: + Only lowercase letters, numbers, and hyphens ('-') allowed. (e.g. us-east-1) Additional AWS regions can be provided, separated by commas. (e.g. + us-east-1,ap-southeast-2) + Description: Customer Control Tower regions without Home Region (2+ regions, separate by commas) + Type: String + pEnabledRegions: + AllowedPattern: '^([a-z0-9-]{1,64})$|^(([a-z0-9-]{1,64},)*[a-z0-9-]{1,64})$' + ConstraintDescription: + Only lowercase letters, numbers, and hyphens ('-') allowed. (e.g. us-east-1) Additional AWS regions can be provided, separated by commas. (e.g. + us-east-1,ap-southeast-2) + Description: Enabled regions (2+ regions, separate by commas) + Type: String + pEnabledRegionsWithoutHomeRegion: + AllowedPattern: '^([a-z0-9-]{1,64})$|^(([a-z0-9-]{1,64},)*[a-z0-9-]{1,64})$' + ConstraintDescription: + Only lowercase letters, numbers, and hyphens ('-') allowed. (e.g. us-east-1) Additional AWS regions can be provided, separated by commas. (e.g. + us-east-1,ap-southeast-2) + Description: Enabled regions without Home Region (2+ regions, separate by commas) + Type: String + pHomeRegion: + AllowedPattern: '^[a-z0-9-]{1,64}$' + ConstraintDescription: AWS Region Example - 'us-east-1', 'ap-southeast-2' + Description: Name of the Control Tower home region + Type: String + pLogArchiveAccountId: + AllowedPattern: '^\d{12}$' + ConstraintDescription: Must be 12 digits. + Description: AWS Account ID of the Control Tower Log Archive account. + Type: String + pManagementAccountId: + AllowedPattern: '^\d{12}$' + ConstraintDescription: Must be 12 digits. + Description: AWS Account ID of the Control Tower Management account. + Type: String + pOrganizationId: + AllowedPattern: '^$|^o-[a-z0-9]{10,32}$' + ConstraintDescription: Must start with 'o-' followed by from 10 to 32 lowercase letters or digits. (e.g. o-abc1234567) + Description: AWS Organizations ID + Type: String + pRootOrganizationalUnitId: + AllowedPattern: '^r-[0-9a-z]{4,32}$' + ConstraintDescription: Must start with 'r-' followed by from 4 to 32 lowercase letters or digits. (e.g. r-abc123) + Description: Root Organizational Unit ID + Type: String + pSRASolutionName: + AllowedValues: [sra-common-prerequisites] + Default: sra-common-prerequisites + Description: The SRA solution name. The Description value is the folder name of the solution + Type: String + +Resources: + rSSMParameterAuditAccountId: + DeletionPolicy: Retain + UpdateReplacePolicy: Retain + Type: AWS::SSM::Parameter + Properties: + Name: /sra/control-tower/audit-account-id + Type: String + Value: !Ref pAuditAccountId + Description: Audit Account ID SSM parameter + Tags: + sra-solution: !Ref pSRASolutionName + + rSSMParameterCustomerControlTowerRegions: + DeletionPolicy: Retain + UpdateReplacePolicy: Retain + Type: AWS::SSM::Parameter + Properties: + Name: /sra/regions/customer-control-tower-regions + Type: StringList + Value: !Ref pCustomerControlTowerRegions + Description: Customer Control Tower Regions SSM parameter + Tags: + sra-solution: !Ref pSRASolutionName + + rSSMParameterCustomerControlTowerRegionsWithoutHomeRegion: + DeletionPolicy: Retain + UpdateReplacePolicy: Retain + Type: AWS::SSM::Parameter + Properties: + Name: /sra/regions/customer-control-tower-regions-without-home-region + Type: StringList + Value: !Ref pCustomerControlTowerRegionsWithoutHomeRegion + Description: Customer Control Tower Regions without Home Region SSM parameter + Tags: + sra-solution: !Ref pSRASolutionName + + rSSMParameterEnabledRegions: + DeletionPolicy: Retain + UpdateReplacePolicy: Retain + Type: AWS::SSM::Parameter + Properties: + Name: /sra/regions/enabled-regions + Type: StringList + Value: !Ref pEnabledRegions + Description: Enabled Regions SSM parameter + Tags: + sra-solution: !Ref pSRASolutionName + + rSSMParameterEnabledRegionsWithoutHomeRegion: + DeletionPolicy: Retain + UpdateReplacePolicy: Retain + Type: AWS::SSM::Parameter + Properties: + Name: /sra/regions/enabled-regions-without-home-region + Type: StringList + Value: !Ref pEnabledRegionsWithoutHomeRegion + Description: Enabled Regions without Home Region SSM parameter + Tags: + sra-solution: !Ref pSRASolutionName + + rSSMParameterHomeRegion: + DeletionPolicy: Retain + UpdateReplacePolicy: Retain + Type: AWS::SSM::Parameter + Properties: + Name: /sra/control-tower/home-region + Type: String + Value: !Ref pHomeRegion + Description: Home Region SSM parameter + Tags: + sra-solution: !Ref pSRASolutionName + + rSSMParameterLogArchiveAccountId: + DeletionPolicy: Retain + UpdateReplacePolicy: Retain + Type: AWS::SSM::Parameter + Properties: + Name: /sra/control-tower/log-archive-account-id + Type: String + Value: !Ref pLogArchiveAccountId + Description: Log Archive Account ID SSM parameter + Tags: + sra-solution: !Ref pSRASolutionName + + rSSMParameterManagementAccountId: + DeletionPolicy: Retain + UpdateReplacePolicy: Retain + Type: AWS::SSM::Parameter + Properties: + Name: /sra/control-tower/management-account-id + Type: String + Value: !Ref pManagementAccountId + Description: Management Account ID SSM parameter + Tags: + sra-solution: !Ref pSRASolutionName + + rSSMParameterOrganizationId: + DeletionPolicy: Retain + UpdateReplacePolicy: Retain + Type: AWS::SSM::Parameter + Properties: + Name: /sra/control-tower/organization-id + Type: String + Value: !Ref pOrganizationId + Description: Organization ID SSM parameter + Tags: + sra-solution: !Ref pSRASolutionName + + rSSMParameterRootOrganizationalUnitId: + DeletionPolicy: Retain + UpdateReplacePolicy: Retain + Type: AWS::SSM::Parameter + Properties: + Name: /sra/control-tower/root-organizational-unit-id + Type: String + Value: !Ref pRootOrganizationalUnitId + Description: Root Organizational Unit ID SSM parameter + Tags: + sra-solution: !Ref pSRASolutionName + +Outputs: + oAuditAccountId: + Description: Audit Account ID + Value: !Ref pAuditAccountId + oCustomerRegions: + Description: Customer Regions + Value: !Ref pCustomerControlTowerRegions + oCustomerRegionsWithoutHomeRegion: + Description: Customer Regions without Home Region + Value: !Ref pCustomerControlTowerRegionsWithoutHomeRegion + oEnabledRegions: + Description: Enabled Regions + Value: !Ref pEnabledRegionsWithoutHomeRegion + oEnabledRegionsWithoutHomeRegion: + Description: Enabled Regions without Home Region + Value: !Ref pEnabledRegionsWithoutHomeRegion + oHomeRegion: + Description: Control Tower Home Region + Value: !Ref pHomeRegion + oLogArchiveAccountId: + Description: Log Archive Account ID + Value: !Ref pLogArchiveAccountId + oManagementAccountId: + Description: Management Account ID + Value: !Ref pManagementAccountId + oOrganizationId: + Description: Organization ID + Value: !Ref pOrganizationId + oRootOrganizationalUnitId: + Description: Root Organizational Unit ID + Value: !Ref pRootOrganizationalUnitId diff --git a/aws_sra_examples/solutions/common/common_prerequisites/templates/sra-common-prerequisites-staging-s3-bucket.yaml b/aws_sra_examples/solutions/common/common_prerequisites/templates/sra-common-prerequisites-staging-s3-bucket.yaml new file mode 100644 index 00000000..ca89af1f --- /dev/null +++ b/aws_sra_examples/solutions/common/common_prerequisites/templates/sra-common-prerequisites-staging-s3-bucket.yaml @@ -0,0 +1,394 @@ +######################################################################## +# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +# SPDX-License-Identifier: MIT-0 +######################################################################## +AWSTemplateFormatVersion: '2010-09-09' +Description: + Creates the SRA staging S3 bucket to store solution Lambda source code, CloudFormation templates, and other deployment files. - + 'common_prerequisites' solution in the repo, https://github.com/aws-samples/aws-security-reference-architecture-examples +Metadata: + SRA: + Version: '1.0' + Order: '1' + + AWS::CloudFormation::Interface: + ParameterGroups: + - Label: + default: General Properties + Parameters: + - pSRASolutionTagKey + - pSRASolutionName + - pSRAStagingS3BucketNamePrefix + - pAWSControlTowerExecutionRoleName + - pOrganizationId + - Label: + default: AWS Organization ID - Lambda Function Properties + Parameters: + - pOrgIdLambdaRoleName + - pOrgIdLambdaFunctionName + - Label: + default: General Lambda Function Properties + Parameters: + - pCreateLambdaLogGroup + - pLambdaLogGroupRetention + - pLambdaLogGroupKmsKey + - pLambdaLogLevel + ParameterLabels: + pCreateLambdaLogGroup: + default: Create Lambda Log Group + pLambdaLogGroupKmsKey: + default: (Optional) Lambda Logs KMS Key + pLambdaLogGroupRetention: + default: Lambda Log Group Retention + pLambdaLogLevel: + default: Lambda Log Level + pOrgIdLambdaFunctionName: + default: AWS Organization ID - Lambda Function Name + pOrgIdLambdaRoleName: + default: AWS Organization ID - Lambda Role Name + pOrganizationId: + default: (Optional) AWS Organization ID + pSRASolutionName: + default: SRA Solution Name + pSRASolutionTagKey: + default: SRA Solution Tag Key + pSRAStagingS3BucketNamePrefix: + default: SRA Staging S3 Bucket Name Prefix + +Parameters: + pAWSControlTowerExecutionRoleName: + AllowedValues: [AWSControlTowerExecution] + Default: AWSControlTowerExecution + Description: The AWS Control Tower Execution IAM Role used to deploy resources within accounts + Type: String + pCreateLambdaLogGroup: + AllowedValues: ['true', 'false'] + Default: 'false' + Description: + Indicates whether a CloudWatch Log Group should be explicitly created for the Lambda function, to allow for setting a Log Retention and/or KMS + Key for encryption. + Type: String + pLambdaLogGroupKmsKey: + AllowedPattern: '^$|^arn:(aws[a-zA-Z-]*){1}:kms:[a-z0-9-]+:\d{12}:key\/[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$' + ConstraintDescription: 'Key ARN example: arn:aws:kms:us-east-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab' + Description: + (Optional) KMS Key ARN to use for encrypting the Lambda logs data. If empty, encryption is enabled with CloudWatch Logs managing the server-side + encryption keys. + Type: String + pLambdaLogGroupRetention: + AllowedValues: [1, 3, 5, 7, 14, 30, 60, 90, 120, 150, 180, 365, 400, 545, 731, 1827, 3653] + Default: 14 + Description: Specifies the number of days you want to retain log events + Type: String + pLambdaLogLevel: + AllowedValues: [INFO, ERROR, DEBUG] + Default: INFO + Description: Lambda Function Logging Level + Type: String + pOrgIdLambdaFunctionName: + AllowedPattern: '^[\w-]{1,64}$' + ConstraintDescription: Max 64 alphanumeric characters. Also special characters supported [_, -] + Default: sra-org-id + Description: Lambda function name for getting the AWS Organization ID + Type: String + pOrgIdLambdaRoleName: + AllowedPattern: '^[\w+=,.@-]{1,64}$' + ConstraintDescription: Max 64 alphanumeric characters. Also special characters supported [+, =, ., @, -]. + Default: sra-org-id-lambda + Description: Lambda execution role for getting the AWS Organization ID + Type: String + pOrganizationId: + AllowedPattern: '^$|^o-[a-z0-9]{10,32}$' + ConstraintDescription: Must start with 'o-' followed by from 10 to 32 lowercase letters or digits. (e.g. o-abc1234567) + Description: (Optional) AWS Organizations ID. If empty, custom resource will be deployed to determine the AWS Organization ID. + Type: String + pSRASolutionName: + AllowedValues: [sra-common-prerequisites] + Default: sra-common-prerequisites + Description: The SRA solution name. The default value is the folder name of the solution + Type: String + pSRASolutionTagKey: + AllowedValues: [sra-solution] + Default: sra-solution + Description: The SRA solution tag key applied to all resources created by the solution that support tagging. The value is the pSRASolutionName. + Type: String + pSRAStagingS3BucketNamePrefix: + AllowedValues: [sra-staging] + Default: sra-staging + Description: + SRA Staging S3 bucket name prefix for the SRA artifacts relevant to the solutions. (e.g., lambda zips, CloudFormation templates). The account + and region are added to the prefix --. Example = sra-staging-123456789012-us-east-1. + Type: String + +Conditions: + cCreateCustomResource: !Equals [!Ref pOrganizationId, ''] + cCreateLambdaLogGroup: !Equals [!Ref pCreateLambdaLogGroup, 'true'] + cCreateLambdaLogGroupAndCreateCustomResource: !And + - !Condition cCreateCustomResource + - !Condition cCreateLambdaLogGroup + cUsingKmsKey: !Not [!Equals [!Ref pLambdaLogGroupKmsKey, '']] + +Resources: + rOrgIdLambdaCustomResource: + Condition: cCreateCustomResource + Type: Custom::LambdaCustomResource + Version: '1.0' + Properties: + ServiceToken: !GetAtt rOrgIdLambdaFunction.Arn + + rOrgIdLambdaFunction: + Condition: cCreateCustomResource + Metadata: + cfn_nag: + rules_to_suppress: + - id: W58 + reason: Lambda role provides access to CloudWatch Logs + - id: W89 + reason: Lambda does not need to communicate with VPC resources. + - id: W92 + reason: Lambda does not need reserved concurrent executions. + checkov: + - checkov:skip=CKV_AWS_116:DLQ not needed, as Lambda function only triggered by CloudFormation events. + - checkov:skip=CKV_AWS_173:Environment variables are not sensitive + Type: AWS::Lambda::Function + Properties: + FunctionName: !Ref pOrgIdLambdaFunctionName + Description: Get AWS Organization ID + Architectures: [arm64] + Handler: index.lambda_handler + Role: !GetAtt rOrgIdLambdaRole.Arn + Runtime: python3.9 + Timeout: 60 + Environment: + Variables: + LOG_LEVEL: !Ref pLambdaLogLevel + Tags: + - Key: !Ref pSRASolutionTagKey + Value: !Ref pSRASolutionName + Code: + ZipFile: | + # type: ignore + """Custom Resource to get AWS Organization ID. + + Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + SPDX-License-Identifier: MIT-0 + """ + import logging + import os + + import boto3 + import cfnresponse + + LOGGER = logging.getLogger(__name__) + log_level = os.environ.get("LOG_LEVEL", logging.ERROR) + LOGGER.setLevel(log_level) + + + def get_org_id(): + """Get AWS Organization ID. + + Returns: + Response data for custom resource + """ + management_account_session = boto3.Session() + org_client = management_account_session.client("organizations") + response = org_client.describe_organization()["Organization"] + LOGGER.debug({"API_Call": "organizations:DescribeOrganization", "API_Response": response}) + return {"OrganizationId": response["Id"]} + + + def lambda_handler(event, context): + """Lambda Handler. + + Args: + event: event data + context: runtime information + """ + try: + data = get_org_id() + cfnresponse.send(event, context, cfnresponse.SUCCESS, data, data["OrganizationId"]) + except Exception as error: + LOGGER.error({"Unexpected Error": error}) + reason = f"See the details in CloudWatch Log Stream: '{context.log_group_name}'" + cfnresponse.send(event, context, cfnresponse.FAILED, {}, data["OrganizationId"], reason=reason) + + rOrgIdLambdaLogGroup: + Condition: cCreateLambdaLogGroupAndCreateCustomResource + DeletionPolicy: Retain + Type: AWS::Logs::LogGroup + UpdateReplacePolicy: Retain + Properties: + LogGroupName: !Sub /aws/lambda/${pOrgIdLambdaFunctionName} + KmsKeyId: !If + - cUsingKmsKey + - !Ref pLambdaLogGroupKmsKey + - !Ref AWS::NoValue + RetentionInDays: !Ref pLambdaLogGroupRetention + + rOrgIdLambdaRole: + Condition: cCreateCustomResource + Type: AWS::IAM::Role + Metadata: + cfn_nag: + rules_to_suppress: + - id: W11 + reason: Allow * in resource when required + - id: W28 + reason: The role name is defined to identify automation resources + Properties: + RoleName: !Ref pOrgIdLambdaRoleName + Description: !Sub Role for '${pOrgIdLambdaRoleName}' Lambda function + AssumeRolePolicyDocument: + Version: 2012-10-17 + Statement: + - Effect: Allow + Action: sts:AssumeRole + Principal: + Service: + - lambda.amazonaws.com + Tags: + - Key: !Ref pSRASolutionTagKey + Value: !Ref pSRASolutionName + Policies: + - PolicyName: org-id + PolicyDocument: + Version: 2012-10-17 + Statement: + - Sid: OrganizationRead + Effect: Allow + Action: organizations:DescribeOrganization + Resource: '*' + - PolicyName: CloudWatchLogGroup + PolicyDocument: + Version: 2012-10-17 + Statement: + - Sid: CloudWatchLogs + Effect: Allow + Action: + - logs:CreateLogGroup + - logs:CreateLogStream + - logs:PutLogEvents + Resource: !Sub arn:${AWS::Partition}:logs:${AWS::Region}:${AWS::AccountId}:log-group:/aws/lambda/${pOrgIdLambdaFunctionName}:log-stream:* + + rSRAStagingS3Bucket: + Type: AWS::S3::Bucket + Metadata: + cfn_nag: + rules_to_suppress: + - id: W35 + reason: S3 access logs intentionally not enabled + checkov: + - checkov:skip=CKV_AWS_18:S3 access logs intentionally not enabled + Properties: + BucketName: !Sub ${pSRAStagingS3BucketNamePrefix}-${AWS::AccountId}-${AWS::Region} + BucketEncryption: + ServerSideEncryptionConfiguration: + - ServerSideEncryptionByDefault: + SSEAlgorithm: AES256 + OwnershipControls: + Rules: + - ObjectOwnership: BucketOwnerPreferred + PublicAccessBlockConfiguration: + BlockPublicAcls: True + BlockPublicPolicy: True + IgnorePublicAcls: True + RestrictPublicBuckets: True + Tags: + - Key: !Ref pSRASolutionTagKey + Value: !Ref pSRASolutionName + VersioningConfiguration: + Status: Enabled + + rSRAStagingS3BucketPolicy: + Type: AWS::S3::BucketPolicy + Metadata: + cfn_nag: + rules_to_suppress: + - id: F16 + reason: GetObject is restricted to AWS accounts within the AWS Organization + Properties: + Bucket: !Ref rSRAStagingS3Bucket + PolicyDocument: + Version: 2012-10-17 + Statement: + - Sid: AllowDeploymentRoleGetObject + Effect: Allow + Action: s3:GetObject + Principal: '*' + Resource: !Sub arn:${AWS::Partition}:s3:::${rSRAStagingS3Bucket}/* + Condition: + ArnLike: + aws:PrincipalArn: !Sub arn:${AWS::Partition}:iam::*:${pAWSControlTowerExecutionRoleName} + + - Sid: DenyExternalPrincipals + Effect: Deny + Action: 's3:*' + Principal: '*' + Resource: + - !Sub arn:${AWS::Partition}:s3:::${rSRAStagingS3Bucket} + - !Sub arn:${AWS::Partition}:s3:::${rSRAStagingS3Bucket}/* + Condition: + StringNotEquals: + aws:PrincipalOrgID: !If + - cCreateCustomResource + - !GetAtt rOrgIdLambdaCustomResource.OrganizationId + - !Ref pOrganizationId + + - Sid: SecureTransport + Effect: Deny + Action: 's3:*' + Principal: '*' + Resource: + - !Sub arn:${AWS::Partition}:s3:::${rSRAStagingS3Bucket} + - !Sub arn:${AWS::Partition}:s3:::${rSRAStagingS3Bucket}/* + Condition: + Bool: + aws:SecureTransport: False + + rSSMParameterSRAStagingS3BucketName: + DeletionPolicy: Retain + UpdateReplacePolicy: Retain + Type: AWS::SSM::Parameter + Properties: + Name: /sra/staging-s3-bucket-name + Type: String + Value: !Ref rSRAStagingS3Bucket + Description: SRA Staging S3 Bucket Name SSM parameter + Tags: + sra-solution: !Ref pSRASolutionName + + rSSMParameterSRAStagingS3BucketNamePrefix: + DeletionPolicy: Retain + UpdateReplacePolicy: Retain + Type: AWS::SSM::Parameter + Properties: + Name: /sra/staging-s3-bucket-name-prefix + Type: String + Value: !Ref pSRAStagingS3BucketNamePrefix + Description: SRA Staging S3 Bucket Name Prefix SSM parameter + Tags: + sra-solution: !Ref pSRASolutionName + +Outputs: + oOrganizationId: + Condition: cCreateCustomResource + Description: Organization ID + Value: !GetAtt rOrgIdLambdaCustomResource.OrganizationId + oOrgIdLambdaFunctionArn: + Condition: cCreateCustomResource + Description: AWS Organization ID Lambda Function ARN + Value: !GetAtt rOrgIdLambdaFunction.Arn + oOrgIdLambdaLogGroupArn: + Condition: cCreateLambdaLogGroupAndCreateCustomResource + Description: AWS Organization ID Lambda Log Group ARN + Value: !GetAtt rOrgIdLambdaLogGroup.Arn + oOrgIdLambdaRoleArn: + Condition: cCreateCustomResource + Description: AWS Organization ID Lambda Role ARN + Value: !GetAtt rOrgIdLambdaRole.Arn + oSRAStagingS3BucketName: + Description: SRA Staging S3 Bucket Name SSM parameter + Value: !GetAtt rSSMParameterSRAStagingS3BucketName.Value + oSRAStagingS3BucketNamePrefix: + Description: SRA Staging S3 Bucket Name Prefix SSM parameter + Value: !GetAtt rSSMParameterSRAStagingS3BucketNamePrefix.Value diff --git a/aws_sra_examples/utils/packaging_scripts/stage_solution.sh b/aws_sra_examples/utils/packaging_scripts/stage_solution.sh new file mode 100755 index 00000000..1cc176b0 --- /dev/null +++ b/aws_sra_examples/utils/packaging_scripts/stage_solution.sh @@ -0,0 +1,183 @@ +#!/usr/bin/env bash +set -e + +########################################################################################### +# Purpose: This script stages the solution Lambda function zip and CloudFormation templates by: +# 1. Creating an S3 bucket to hold the deployment resources +# 2. Packaging and uploading Lambda code to the S3 bucket lambda_code folder +# 4. Uploading the CloudFormation templates to the S3 bucket templates folder +# Usage: ~/aws-security-reference-architecture-examples/aws_sra_examples/utils/packaging_scripts/stage_solution.sh \ +# --staging_bucket_name \ +# --solution_directory +# Example: ~/aws-security-reference-architecture-examples/aws_sra_examples/utils/packaging_scripts/stage_solution.sh \ +# --staging_bucket_name sra-staging-123456789012-us-east-1 \ +# --solution_directory ~/aws-security-reference-architecture-examples/aws_sra_examples/solutions/cloudtrail/cloudtrail_org +########################################################################################### +# shellcheck disable=SC2086 +usage="$(basename $0) [-h] [--staging_bucket_name s] <--solution_directory s> ---script stage solution Lambda code and CloudFormation templates + +where: + -h show this help text + --staging_bucket_name [optional] S3 Staging Bucket to upload files, example = sra-staging-123456789012-us-east-1 + --solution_directory SRA Solution Directory Path, example = ~/aws-security-reference-architecture-examples/aws_sra_examples/solutions/cloudtrail/cloudtrail_org" + +if [[ $1 == "-h" ]]; then + echo "$usage" + exit 1 +fi + +staging_bucket_name=${staging_bucket_name:-none} +solution_directory=${solution_directory:-none} + +# read input parameters +while [ $# -gt 0 ]; do + + if [[ $1 == *"--"* ]]; then + param="${1/--/}" + declare "$param"="$2" + # echo $1 $2 // Optional to see the parameter:value result + fi + + shift +done + +if [ "$solution_directory" != "none" ]; then + ########################################################################################### + # Configuration Parameters + ########################################################################################### + HERE="${PWD}" + SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" &>/dev/null && pwd)" + cd "$solution_directory" || exit 1 # change directory into solution directory + SOLUTION_NAME_SNAKE_CASE=$(basename "$PWD") # get the solution name from the directory name + SOLUTION_NAME="sra-"$(tr '_' '-' <<<"$SOLUTION_NAME_SNAKE_CASE") + + LAMBDA_S3_PREFIX="$SOLUTION_NAME/lambda_code" + TEMPLATES_S3_PREFIX="$SOLUTION_NAME/templates" + STAGING_BUCKET="$staging_bucket_name" + SRA_STAGING_FOLDER_NAME="sra_staging_manual_upload" + TMP_FOLDER_NAME="$HOME/temp_sra_lambda_src_XXXX" # will be cleaned + ########################################################################################### + # End Configuration Parameters + ########################################################################################### + + # create the staging folder + echo "...Creating the $SRA_STAGING_FOLDER_NAME folder" + cd "$SCRIPT_DIR" || exit 1 + cd ../../../ || exit 1 # change directory into the base folder of the sra code + mkdir -p "$SRA_STAGING_FOLDER_NAME" || exit 1 # create staging folder, if it doesn't exist + + cd "$SRA_STAGING_FOLDER_NAME" || exit 1 + STAGING_FOLDER="${PWD}" + mkdir -p "$TEMPLATES_S3_PREFIX" || exit 1 # create the staging templates folder + mkdir -p "$LAMBDA_S3_PREFIX" || exit 1 # create the staging lambda folder + + STAGING_TEMPLATES_FOLDER="$STAGING_FOLDER/$TEMPLATES_S3_PREFIX" || exit 1 + STAGING_LAMBDA_FOLDER="$STAGING_FOLDER/$LAMBDA_S3_PREFIX" || exit 1 + + # CloudFormation Stacks + echo "## Stage CloudFormation Templates" + cd "$solution_directory" || exit 1 # change directory into solution directory + + cp -r ./templates/* "$STAGING_TEMPLATES_FOLDER/" || exit 1 # copy CloudFormation templates to staging folder + + # Package and Stage Lambda Code + echo "## Package and Stage Lambda Code" + lambda_folder_count=0 + for dir in "$solution_directory"/lambda/*/; do + lambda_folder_count=$((lambda_folder_count + 1)) + done + for dir in "$solution_directory"/lambda/*/; do + lambda_dir="${dir%"${dir##*[!/]}"}" + lambda_dir="${lambda_dir##*/}" # remove everything before the last / + + cd "$dir" || exit 1 + has_python=$(find ./*.py 2>/dev/null | wc -l) + has_requirements=$(find requirements.txt 2>/dev/null | wc -l) + + if [ "$has_python" -ne 0 ] && [ "$has_requirements" -ne 0 ]; then + echo "...Creating the temporary packaging folder (tmp_sra_lambda_src_XXXX)" + TMP_FOLDER=$(mktemp -d "$TMP_FOLDER_NAME") || exit 1 # create the temp folder + cp -r "$dir"* "$TMP_FOLDER" || exit 1 # copy lambda source to temp source folder + pip3 --disable-pip-version-check install -t "$TMP_FOLDER" -r "$TMP_FOLDER/requirements.txt" -q || + { + rm -rf "$TMP_FOLDER" + echo "---> Error: Python3 is required" + exit 1 + } + + cd "$LAMBDA_STAGING_FOLDER" || exit 1 # change directory into staging folder + if [ "$lambda_folder_count" -gt "1" ]; then + LAMBDA_ZIP_FILE="$STAGING_LAMBDA_FOLDER/$SOLUTION_NAME-$lambda_dir.zip" + else + LAMBDA_ZIP_FILE="$STAGING_LAMBDA_FOLDER/$SOLUTION_NAME.zip" + fi + rm -f "$LAMBDA_ZIP_FILE" # remove zip file, if exists + + # create zip file in the dist folder + echo "...Creating zip file from the temp folder contents" + cd "$TMP_FOLDER" || exit 1 # changed directory to temp folder + zip -r -q "$LAMBDA_ZIP_FILE" . -x "*.DS_Store" -x "inline_*" || + 7z a -tzip "$LAMBDA_ZIP_FILE" || + { + echo "---> ERROR: Zip and 7zip are not available. Manually create the zip file with the $STAGING_LAMBDA_FOLDER folder contents." + exit 1 + } # zip source with packages + cd "$HERE" || exit 1 # change directory to the original directory + + echo "...Removing Temporary Folder $TMP_FOLDER" + rm -rf "$TMP_FOLDER" + else + echo "---> ERROR: Lambda folder '$lambda_dir' does not have any python files and a requirements.txt file" + fi + done + + if [[ "$STAGING_BUCKET" != "none" ]]; then + + # Upload CloudFormation templates to S3 Staging Bucket + if aws s3 cp "$STAGING_TEMPLATES_FOLDER/" s3://"$STAGING_BUCKET/$TEMPLATES_S3_PREFIX/" --recursive --exclude "*" --include "*.yaml" 2>&1 | grep -q "failed"; then + echo "---> ERROR: CloudFormation templates upload to S3 staging bucket failed" + else + echo "...CloudFormation templates uploaded to $STAGING_BUCKET/$SOLUTION_NAME/templates/" + fi + + # upload the lambda zip file to S3 + if aws s3 cp "$STAGING_LAMBDA_FOLDER/" s3://"$STAGING_BUCKET/$LAMBDA_S3_PREFIX/" --recursive --exclude "*" --include "*.zip" 2>&1 | grep -q "failed"; then + echo "---> ERROR: S3 upload failed. Manually upload the Lambda zip files from the staging folder: $STAGING_LAMBDA_FOLDER" + else + echo "...Uploaded Lambda zip files to $STAGING_BUCKET/$LAMBDA_S3_PREFIX/" + fi + + cd "$STAGING_LAMBDA_FOLDER" || exit 1 + for filename in *.zip; do + lambda_name="${filename%.zip}" + + if aws lambda get-function --function-name "$lambda_name" 2>&1 | grep -q "ResourceNotFoundException"; then + echo "...Lambda function $lambda_name not found to update" + else + # update Lambda code + if aws lambda update-function-code --function-name "$lambda_name" --s3-key "$LAMBDA_S3_PREFIX/$filename" --s3-bucket "$STAGING_BUCKET" 2>&1 | grep -q "error"; then + echo "---> ERROR: Lambda update failed" + else + echo "...Lambda function $lambda_name updated" + fi + fi + done + + cd "$HERE" || exit 1 # return to the calling directory + fi + + if [[ "$STAGING_BUCKET" != "none" ]]; then + echo "### SRA STAGING S3 BUCKET NAME: $STAGING_BUCKET" + fi + echo "### SRA STAGING UPLOADS FOLDER: $STAGING_FOLDER" + echo "### CLOUDFORMATION TEMPLATES FOLDER: $TEMPLATES_S3_PREFIX" + echo "### S3 LAMBDA CODE FOLDER: $LAMBDA_S3_PREFIX" + # echo "### LAMBDA ZIP FILE: $SOLUTION_NAME.zip" + # cd "$STAGING_LAMBDA_FOLDER" || exit 1 + # echo -e "### LAMBDA ZIP FILE SIZE: $(du -sh)" + cd "$HERE" || exit 1 # return to the calling directory +else + echo "$usage" +fi + +exit 0 diff --git a/poetry.lock b/poetry.lock index 1f3943e9..288624f8 100644 --- a/poetry.lock +++ b/poetry.lock @@ -66,7 +66,7 @@ stevedore = ">=1.20.0" [[package]] name = "black" -version = "21.11b1" +version = "21.12b0" description = "The uncompromising code formatter." category = "dev" optional = false @@ -77,7 +77,6 @@ click = ">=7.1.2" mypy-extensions = ">=0.4.3" pathspec = ">=0.9.0,<1" platformdirs = ">=2" -regex = ">=2021.4.4" tomli = ">=0.2.6,<2.0.0" typing-extensions = [ {version = ">=3.10.0.0", markers = "python_version < \"3.10\""}, @@ -93,14 +92,14 @@ uvloop = ["uvloop (>=0.15.2)"] [[package]] name = "boto3" -version = "1.20.10" +version = "1.20.23" description = "The AWS SDK for Python" category = "main" optional = false python-versions = ">= 3.6" [package.dependencies] -botocore = ">=1.23.10,<1.24.0" +botocore = ">=1.23.23,<1.24.0" jmespath = ">=0.7.1,<1.0.0" s3transfer = ">=0.5.0,<0.6.0" @@ -109,8 +108,8 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"] [[package]] name = "boto3-stubs" -version = "1.20.10" -description = "Type annotations for boto3 1.20.10, generated by mypy-boto3-builder 6.2.1" +version = "1.20.23" +description = "Type annotations for boto3 1.20.23, generated by mypy-boto3-builder 6.2.1" category = "dev" optional = false python-versions = ">=3.6" @@ -125,6 +124,7 @@ mypy-boto3-alexaforbusiness = {version = ">=1.20.0", optional = true, markers = mypy-boto3-amp = {version = ">=1.20.0", optional = true, markers = "extra == \"all\""} mypy-boto3-amplify = {version = ">=1.20.0", optional = true, markers = "extra == \"all\""} mypy-boto3-amplifybackend = {version = ">=1.20.0", optional = true, markers = "extra == \"all\""} +mypy-boto3-amplifyuibuilder = {version = ">=1.20.0", optional = true, markers = "extra == \"all\""} mypy-boto3-apigateway = {version = ">=1.20.0", optional = true, markers = "extra == \"all\""} mypy-boto3-apigatewaymanagementapi = {version = ">=1.20.0", optional = true, markers = "extra == \"all\""} mypy-boto3-apigatewayv2 = {version = ">=1.20.0", optional = true, markers = "extra == \"all\""} @@ -144,6 +144,7 @@ mypy-boto3-auditmanager = {version = ">=1.20.0", optional = true, markers = "ext mypy-boto3-autoscaling = {version = ">=1.20.0", optional = true, markers = "extra == \"all\""} mypy-boto3-autoscaling-plans = {version = ">=1.20.0", optional = true, markers = "extra == \"all\""} mypy-boto3-backup = {version = ">=1.20.0", optional = true, markers = "extra == \"all\""} +mypy-boto3-backup-gateway = {version = ">=1.20.0", optional = true, markers = "extra == \"all\""} mypy-boto3-batch = {version = ">=1.20.0", optional = true, markers = "extra == \"all\""} mypy-boto3-braket = {version = ">=1.20.0", optional = true, markers = "extra == \"all\""} mypy-boto3-budgets = {version = ">=1.20.0", optional = true, markers = "extra == \"all\""} @@ -220,6 +221,7 @@ mypy-boto3-emr = {version = ">=1.20.0", optional = true, markers = "extra == \"a mypy-boto3-emr-containers = {version = ">=1.20.0", optional = true, markers = "extra == \"all\""} mypy-boto3-es = {version = ">=1.20.0", optional = true, markers = "extra == \"all\""} mypy-boto3-events = {version = ">=1.20.0", optional = true, markers = "extra == \"all\""} +mypy-boto3-evidently = {version = ">=1.20.0", optional = true, markers = "extra == \"all\""} mypy-boto3-finspace = {version = ">=1.20.0", optional = true, markers = "extra == \"all\""} mypy-boto3-finspace-data = {version = ">=1.20.0", optional = true, markers = "extra == \"all\""} mypy-boto3-firehose = {version = ">=1.20.0", optional = true, markers = "extra == \"all\""} @@ -246,6 +248,7 @@ mypy-boto3-identitystore = {version = ">=1.20.0", optional = true, markers = "ex mypy-boto3-imagebuilder = {version = ">=1.20.0", optional = true, markers = "extra == \"all\""} mypy-boto3-importexport = {version = ">=1.20.0", optional = true, markers = "extra == \"all\""} mypy-boto3-inspector = {version = ">=1.20.0", optional = true, markers = "extra == \"all\""} +mypy-boto3-inspector2 = {version = ">=1.20.0", optional = true, markers = "extra == \"all\""} mypy-boto3-iot = {version = ">=1.20.0", optional = true, markers = "extra == \"all\""} mypy-boto3-iot-data = {version = ">=1.20.0", optional = true, markers = "extra == \"all\""} mypy-boto3-iot-jobs-data = {version = ">=1.20.0", optional = true, markers = "extra == \"all\""} @@ -259,6 +262,7 @@ mypy-boto3-iotfleethub = {version = ">=1.20.0", optional = true, markers = "extr mypy-boto3-iotsecuretunneling = {version = ">=1.20.0", optional = true, markers = "extra == \"all\""} mypy-boto3-iotsitewise = {version = ">=1.20.0", optional = true, markers = "extra == \"all\""} mypy-boto3-iotthingsgraph = {version = ">=1.20.0", optional = true, markers = "extra == \"all\""} +mypy-boto3-iottwinmaker = {version = ">=1.20.0", optional = true, markers = "extra == \"all\""} mypy-boto3-iotwireless = {version = ">=1.20.0", optional = true, markers = "extra == \"all\""} mypy-boto3-ivs = {version = ">=1.20.0", optional = true, markers = "extra == \"all\""} mypy-boto3-kafka = {version = ">=1.20.0", optional = true, markers = "extra == \"all\""} @@ -304,6 +308,7 @@ mypy-boto3-memorydb = {version = ">=1.20.0", optional = true, markers = "extra = mypy-boto3-meteringmarketplace = {version = ">=1.20.0", optional = true, markers = "extra == \"all\""} mypy-boto3-mgh = {version = ">=1.20.0", optional = true, markers = "extra == \"all\""} mypy-boto3-mgn = {version = ">=1.20.0", optional = true, markers = "extra == \"all\""} +mypy-boto3-migration-hub-refactor-spaces = {version = ">=1.20.0", optional = true, markers = "extra == \"all\""} mypy-boto3-migrationhub-config = {version = ">=1.20.0", optional = true, markers = "extra == \"all\""} mypy-boto3-migrationhubstrategy = {version = ">=1.20.0", optional = true, markers = "extra == \"all\""} mypy-boto3-mobile = {version = ">=1.20.0", optional = true, markers = "extra == \"all\""} @@ -334,6 +339,7 @@ mypy-boto3-qldb = {version = ">=1.20.0", optional = true, markers = "extra == \" mypy-boto3-qldb-session = {version = ">=1.20.0", optional = true, markers = "extra == \"all\""} mypy-boto3-quicksight = {version = ">=1.20.0", optional = true, markers = "extra == \"all\""} mypy-boto3-ram = {version = ">=1.20.0", optional = true, markers = "extra == \"all\""} +mypy-boto3-rbin = {version = ">=1.20.0", optional = true, markers = "extra == \"all\""} mypy-boto3-rds = {version = ">=1.20.0", optional = true, markers = "extra == \"all\""} mypy-boto3-rds-data = {version = ">=1.20.0", optional = true, markers = "extra == \"all\""} mypy-boto3-redshift = {version = ">=1.20.0", optional = true, markers = "extra == \"all\""} @@ -349,6 +355,7 @@ mypy-boto3-route53-recovery-control-config = {version = ">=1.20.0", optional = t mypy-boto3-route53-recovery-readiness = {version = ">=1.20.0", optional = true, markers = "extra == \"all\""} mypy-boto3-route53domains = {version = ">=1.20.0", optional = true, markers = "extra == \"all\""} mypy-boto3-route53resolver = {version = ">=1.20.0", optional = true, markers = "extra == \"all\""} +mypy-boto3-rum = {version = ">=1.20.0", optional = true, markers = "extra == \"all\""} mypy-boto3-s3 = {version = ">=1.20.0", optional = true, markers = "extra == \"all\""} mypy-boto3-s3control = {version = ">=1.20.0", optional = true, markers = "extra == \"all\""} mypy-boto3-s3outposts = {version = ">=1.20.0", optional = true, markers = "extra == \"all\""} @@ -406,6 +413,7 @@ mypy-boto3-worklink = {version = ">=1.20.0", optional = true, markers = "extra = mypy-boto3-workmail = {version = ">=1.20.0", optional = true, markers = "extra == \"all\""} mypy-boto3-workmailmessageflow = {version = ">=1.20.0", optional = true, markers = "extra == \"all\""} mypy-boto3-workspaces = {version = ">=1.20.0", optional = true, markers = "extra == \"all\""} +mypy-boto3-workspaces-web = {version = ">=1.20.0", optional = true, markers = "extra == \"all\""} mypy-boto3-xray = {version = ">=1.20.0", optional = true, markers = "extra == \"all\""} [package.extras] @@ -414,10 +422,11 @@ account = ["mypy-boto3-account (>=1.20.0)"] acm = ["mypy-boto3-acm (>=1.20.0)"] acm-pca = ["mypy-boto3-acm-pca (>=1.20.0)"] alexaforbusiness = ["mypy-boto3-alexaforbusiness (>=1.20.0)"] -all = ["mypy-boto3-accessanalyzer (>=1.20.0)", "mypy-boto3-account (>=1.20.0)", "mypy-boto3-acm (>=1.20.0)", "mypy-boto3-acm-pca (>=1.20.0)", "mypy-boto3-alexaforbusiness (>=1.20.0)", "mypy-boto3-amp (>=1.20.0)", "mypy-boto3-amplify (>=1.20.0)", "mypy-boto3-amplifybackend (>=1.20.0)", "mypy-boto3-apigateway (>=1.20.0)", "mypy-boto3-apigatewaymanagementapi (>=1.20.0)", "mypy-boto3-apigatewayv2 (>=1.20.0)", "mypy-boto3-appconfig (>=1.20.0)", "mypy-boto3-appconfigdata (>=1.20.0)", "mypy-boto3-appflow (>=1.20.0)", "mypy-boto3-appintegrations (>=1.20.0)", "mypy-boto3-application-autoscaling (>=1.20.0)", "mypy-boto3-application-insights (>=1.20.0)", "mypy-boto3-applicationcostprofiler (>=1.20.0)", "mypy-boto3-appmesh (>=1.20.0)", "mypy-boto3-apprunner (>=1.20.0)", "mypy-boto3-appstream (>=1.20.0)", "mypy-boto3-appsync (>=1.20.0)", "mypy-boto3-athena (>=1.20.0)", "mypy-boto3-auditmanager (>=1.20.0)", "mypy-boto3-autoscaling (>=1.20.0)", "mypy-boto3-autoscaling-plans (>=1.20.0)", "mypy-boto3-backup (>=1.20.0)", "mypy-boto3-batch (>=1.20.0)", "mypy-boto3-braket (>=1.20.0)", "mypy-boto3-budgets (>=1.20.0)", "mypy-boto3-ce (>=1.20.0)", "mypy-boto3-chime (>=1.20.0)", "mypy-boto3-chime-sdk-identity (>=1.20.0)", "mypy-boto3-chime-sdk-meetings (>=1.20.0)", "mypy-boto3-chime-sdk-messaging (>=1.20.0)", "mypy-boto3-cloud9 (>=1.20.0)", "mypy-boto3-cloudcontrol (>=1.20.0)", "mypy-boto3-clouddirectory (>=1.20.0)", "mypy-boto3-cloudformation (>=1.20.0)", "mypy-boto3-cloudfront (>=1.20.0)", "mypy-boto3-cloudhsm (>=1.20.0)", "mypy-boto3-cloudhsmv2 (>=1.20.0)", "mypy-boto3-cloudsearch (>=1.20.0)", "mypy-boto3-cloudsearchdomain (>=1.20.0)", "mypy-boto3-cloudtrail (>=1.20.0)", "mypy-boto3-cloudwatch (>=1.20.0)", "mypy-boto3-codeartifact (>=1.20.0)", "mypy-boto3-codebuild (>=1.20.0)", "mypy-boto3-codecommit (>=1.20.0)", "mypy-boto3-codedeploy (>=1.20.0)", "mypy-boto3-codeguru-reviewer (>=1.20.0)", "mypy-boto3-codeguruprofiler (>=1.20.0)", "mypy-boto3-codepipeline (>=1.20.0)", "mypy-boto3-codestar (>=1.20.0)", "mypy-boto3-codestar-connections (>=1.20.0)", "mypy-boto3-codestar-notifications (>=1.20.0)", "mypy-boto3-cognito-identity (>=1.20.0)", "mypy-boto3-cognito-idp (>=1.20.0)", "mypy-boto3-cognito-sync (>=1.20.0)", "mypy-boto3-comprehend (>=1.20.0)", "mypy-boto3-comprehendmedical (>=1.20.0)", "mypy-boto3-compute-optimizer (>=1.20.0)", "mypy-boto3-config (>=1.20.0)", "mypy-boto3-connect (>=1.20.0)", "mypy-boto3-connect-contact-lens (>=1.20.0)", "mypy-boto3-connectparticipant (>=1.20.0)", "mypy-boto3-cur (>=1.20.0)", "mypy-boto3-customer-profiles (>=1.20.0)", "mypy-boto3-databrew (>=1.20.0)", "mypy-boto3-dataexchange (>=1.20.0)", "mypy-boto3-datapipeline (>=1.20.0)", "mypy-boto3-datasync (>=1.20.0)", "mypy-boto3-dax (>=1.20.0)", "mypy-boto3-detective (>=1.20.0)", "mypy-boto3-devicefarm (>=1.20.0)", "mypy-boto3-devops-guru (>=1.20.0)", "mypy-boto3-directconnect (>=1.20.0)", "mypy-boto3-discovery (>=1.20.0)", "mypy-boto3-dlm (>=1.20.0)", "mypy-boto3-dms (>=1.20.0)", "mypy-boto3-docdb (>=1.20.0)", "mypy-boto3-drs (>=1.20.0)", "mypy-boto3-ds (>=1.20.0)", "mypy-boto3-dynamodb (>=1.20.0)", "mypy-boto3-dynamodbstreams (>=1.20.0)", "mypy-boto3-ebs (>=1.20.0)", "mypy-boto3-ec2 (>=1.20.0)", "mypy-boto3-ec2-instance-connect (>=1.20.0)", "mypy-boto3-ecr (>=1.20.0)", "mypy-boto3-ecr-public (>=1.20.0)", "mypy-boto3-ecs (>=1.20.0)", "mypy-boto3-efs (>=1.20.0)", "mypy-boto3-eks (>=1.20.0)", "mypy-boto3-elastic-inference (>=1.20.0)", "mypy-boto3-elasticache (>=1.20.0)", "mypy-boto3-elasticbeanstalk (>=1.20.0)", "mypy-boto3-elastictranscoder (>=1.20.0)", "mypy-boto3-elb (>=1.20.0)", "mypy-boto3-elbv2 (>=1.20.0)", "mypy-boto3-emr (>=1.20.0)", "mypy-boto3-emr-containers (>=1.20.0)", "mypy-boto3-es (>=1.20.0)", "mypy-boto3-events (>=1.20.0)", "mypy-boto3-finspace (>=1.20.0)", "mypy-boto3-finspace-data (>=1.20.0)", "mypy-boto3-firehose (>=1.20.0)", "mypy-boto3-fis (>=1.20.0)", "mypy-boto3-fms (>=1.20.0)", "mypy-boto3-forecast (>=1.20.0)", "mypy-boto3-forecastquery (>=1.20.0)", "mypy-boto3-frauddetector (>=1.20.0)", "mypy-boto3-fsx (>=1.20.0)", "mypy-boto3-gamelift (>=1.20.0)", "mypy-boto3-glacier (>=1.20.0)", "mypy-boto3-globalaccelerator (>=1.20.0)", "mypy-boto3-glue (>=1.20.0)", "mypy-boto3-grafana (>=1.20.0)", "mypy-boto3-greengrass (>=1.20.0)", "mypy-boto3-greengrassv2 (>=1.20.0)", "mypy-boto3-groundstation (>=1.20.0)", "mypy-boto3-guardduty (>=1.20.0)", "mypy-boto3-health (>=1.20.0)", "mypy-boto3-healthlake (>=1.20.0)", "mypy-boto3-honeycode (>=1.20.0)", "mypy-boto3-iam (>=1.20.0)", "mypy-boto3-identitystore (>=1.20.0)", "mypy-boto3-imagebuilder (>=1.20.0)", "mypy-boto3-importexport (>=1.20.0)", "mypy-boto3-inspector (>=1.20.0)", "mypy-boto3-iot (>=1.20.0)", "mypy-boto3-iot-data (>=1.20.0)", "mypy-boto3-iot-jobs-data (>=1.20.0)", "mypy-boto3-iot1click-devices (>=1.20.0)", "mypy-boto3-iot1click-projects (>=1.20.0)", "mypy-boto3-iotanalytics (>=1.20.0)", "mypy-boto3-iotdeviceadvisor (>=1.20.0)", "mypy-boto3-iotevents (>=1.20.0)", "mypy-boto3-iotevents-data (>=1.20.0)", "mypy-boto3-iotfleethub (>=1.20.0)", "mypy-boto3-iotsecuretunneling (>=1.20.0)", "mypy-boto3-iotsitewise (>=1.20.0)", "mypy-boto3-iotthingsgraph (>=1.20.0)", "mypy-boto3-iotwireless (>=1.20.0)", "mypy-boto3-ivs (>=1.20.0)", "mypy-boto3-kafka (>=1.20.0)", "mypy-boto3-kafkaconnect (>=1.20.0)", "mypy-boto3-kendra (>=1.20.0)", "mypy-boto3-kinesis (>=1.20.0)", "mypy-boto3-kinesis-video-archived-media (>=1.20.0)", "mypy-boto3-kinesis-video-media (>=1.20.0)", "mypy-boto3-kinesis-video-signaling (>=1.20.0)", "mypy-boto3-kinesisanalytics (>=1.20.0)", "mypy-boto3-kinesisanalyticsv2 (>=1.20.0)", "mypy-boto3-kinesisvideo (>=1.20.0)", "mypy-boto3-kms (>=1.20.0)", "mypy-boto3-lakeformation (>=1.20.0)", "mypy-boto3-lambda (>=1.20.0)", "mypy-boto3-lex-models (>=1.20.0)", "mypy-boto3-lex-runtime (>=1.20.0)", "mypy-boto3-lexv2-models (>=1.20.0)", "mypy-boto3-lexv2-runtime (>=1.20.0)", "mypy-boto3-license-manager (>=1.20.0)", "mypy-boto3-lightsail (>=1.20.0)", "mypy-boto3-location (>=1.20.0)", "mypy-boto3-logs (>=1.20.0)", "mypy-boto3-lookoutequipment (>=1.20.0)", "mypy-boto3-lookoutmetrics (>=1.20.0)", "mypy-boto3-lookoutvision (>=1.20.0)", "mypy-boto3-machinelearning (>=1.20.0)", "mypy-boto3-macie (>=1.20.0)", "mypy-boto3-macie2 (>=1.20.0)", "mypy-boto3-managedblockchain (>=1.20.0)", "mypy-boto3-marketplace-catalog (>=1.20.0)", "mypy-boto3-marketplace-entitlement (>=1.20.0)", "mypy-boto3-marketplacecommerceanalytics (>=1.20.0)", "mypy-boto3-mediaconnect (>=1.20.0)", "mypy-boto3-mediaconvert (>=1.20.0)", "mypy-boto3-medialive (>=1.20.0)", "mypy-boto3-mediapackage (>=1.20.0)", "mypy-boto3-mediapackage-vod (>=1.20.0)", "mypy-boto3-mediastore (>=1.20.0)", "mypy-boto3-mediastore-data (>=1.20.0)", "mypy-boto3-mediatailor (>=1.20.0)", "mypy-boto3-memorydb (>=1.20.0)", "mypy-boto3-meteringmarketplace (>=1.20.0)", "mypy-boto3-mgh (>=1.20.0)", "mypy-boto3-mgn (>=1.20.0)", "mypy-boto3-migrationhub-config (>=1.20.0)", "mypy-boto3-migrationhubstrategy (>=1.20.0)", "mypy-boto3-mobile (>=1.20.0)", "mypy-boto3-mq (>=1.20.0)", "mypy-boto3-mturk (>=1.20.0)", "mypy-boto3-mwaa (>=1.20.0)", "mypy-boto3-neptune (>=1.20.0)", "mypy-boto3-network-firewall (>=1.20.0)", "mypy-boto3-networkmanager (>=1.20.0)", "mypy-boto3-nimble (>=1.20.0)", "mypy-boto3-opensearch (>=1.20.0)", "mypy-boto3-opsworks (>=1.20.0)", "mypy-boto3-opsworkscm (>=1.20.0)", "mypy-boto3-organizations (>=1.20.0)", "mypy-boto3-outposts (>=1.20.0)", "mypy-boto3-panorama (>=1.20.0)", "mypy-boto3-personalize (>=1.20.0)", "mypy-boto3-personalize-events (>=1.20.0)", "mypy-boto3-personalize-runtime (>=1.20.0)", "mypy-boto3-pi (>=1.20.0)", "mypy-boto3-pinpoint (>=1.20.0)", "mypy-boto3-pinpoint-email (>=1.20.0)", "mypy-boto3-pinpoint-sms-voice (>=1.20.0)", "mypy-boto3-polly (>=1.20.0)", "mypy-boto3-pricing (>=1.20.0)", "mypy-boto3-proton (>=1.20.0)", "mypy-boto3-qldb (>=1.20.0)", "mypy-boto3-qldb-session (>=1.20.0)", "mypy-boto3-quicksight (>=1.20.0)", "mypy-boto3-ram (>=1.20.0)", "mypy-boto3-rds (>=1.20.0)", "mypy-boto3-rds-data (>=1.20.0)", "mypy-boto3-redshift (>=1.20.0)", "mypy-boto3-redshift-data (>=1.20.0)", "mypy-boto3-rekognition (>=1.20.0)", "mypy-boto3-resiliencehub (>=1.20.0)", "mypy-boto3-resource-groups (>=1.20.0)", "mypy-boto3-resourcegroupstaggingapi (>=1.20.0)", "mypy-boto3-robomaker (>=1.20.0)", "mypy-boto3-route53 (>=1.20.0)", "mypy-boto3-route53-recovery-cluster (>=1.20.0)", "mypy-boto3-route53-recovery-control-config (>=1.20.0)", "mypy-boto3-route53-recovery-readiness (>=1.20.0)", "mypy-boto3-route53domains (>=1.20.0)", "mypy-boto3-route53resolver (>=1.20.0)", "mypy-boto3-s3 (>=1.20.0)", "mypy-boto3-s3control (>=1.20.0)", "mypy-boto3-s3outposts (>=1.20.0)", "mypy-boto3-sagemaker (>=1.20.0)", "mypy-boto3-sagemaker-a2i-runtime (>=1.20.0)", "mypy-boto3-sagemaker-edge (>=1.20.0)", "mypy-boto3-sagemaker-featurestore-runtime (>=1.20.0)", "mypy-boto3-sagemaker-runtime (>=1.20.0)", "mypy-boto3-savingsplans (>=1.20.0)", "mypy-boto3-schemas (>=1.20.0)", "mypy-boto3-sdb (>=1.20.0)", "mypy-boto3-secretsmanager (>=1.20.0)", "mypy-boto3-securityhub (>=1.20.0)", "mypy-boto3-serverlessrepo (>=1.20.0)", "mypy-boto3-service-quotas (>=1.20.0)", "mypy-boto3-servicecatalog (>=1.20.0)", "mypy-boto3-servicecatalog-appregistry (>=1.20.0)", "mypy-boto3-servicediscovery (>=1.20.0)", "mypy-boto3-ses (>=1.20.0)", "mypy-boto3-sesv2 (>=1.20.0)", "mypy-boto3-shield (>=1.20.0)", "mypy-boto3-signer (>=1.20.0)", "mypy-boto3-sms (>=1.20.0)", "mypy-boto3-sms-voice (>=1.20.0)", "mypy-boto3-snow-device-management (>=1.20.0)", "mypy-boto3-snowball (>=1.20.0)", "mypy-boto3-sns (>=1.20.0)", "mypy-boto3-sqs (>=1.20.0)", "mypy-boto3-ssm (>=1.20.0)", "mypy-boto3-ssm-contacts (>=1.20.0)", "mypy-boto3-ssm-incidents (>=1.20.0)", "mypy-boto3-sso (>=1.20.0)", "mypy-boto3-sso-admin (>=1.20.0)", "mypy-boto3-sso-oidc (>=1.20.0)", "mypy-boto3-stepfunctions (>=1.20.0)", "mypy-boto3-storagegateway (>=1.20.0)", "mypy-boto3-sts (>=1.20.0)", "mypy-boto3-support (>=1.20.0)", "mypy-boto3-swf (>=1.20.0)", "mypy-boto3-synthetics (>=1.20.0)", "mypy-boto3-textract (>=1.20.0)", "mypy-boto3-timestream-query (>=1.20.0)", "mypy-boto3-timestream-write (>=1.20.0)", "mypy-boto3-transcribe (>=1.20.0)", "mypy-boto3-transfer (>=1.20.0)", "mypy-boto3-translate (>=1.20.0)", "mypy-boto3-voice-id (>=1.20.0)", "mypy-boto3-waf (>=1.20.0)", "mypy-boto3-waf-regional (>=1.20.0)", "mypy-boto3-wafv2 (>=1.20.0)", "mypy-boto3-wellarchitected (>=1.20.0)", "mypy-boto3-wisdom (>=1.20.0)", "mypy-boto3-workdocs (>=1.20.0)", "mypy-boto3-worklink (>=1.20.0)", "mypy-boto3-workmail (>=1.20.0)", "mypy-boto3-workmailmessageflow (>=1.20.0)", "mypy-boto3-workspaces (>=1.20.0)", "mypy-boto3-xray (>=1.20.0)"] +all = ["mypy-boto3-accessanalyzer (>=1.20.0)", "mypy-boto3-account (>=1.20.0)", "mypy-boto3-acm (>=1.20.0)", "mypy-boto3-acm-pca (>=1.20.0)", "mypy-boto3-alexaforbusiness (>=1.20.0)", "mypy-boto3-amp (>=1.20.0)", "mypy-boto3-amplify (>=1.20.0)", "mypy-boto3-amplifybackend (>=1.20.0)", "mypy-boto3-amplifyuibuilder (>=1.20.0)", "mypy-boto3-apigateway (>=1.20.0)", "mypy-boto3-apigatewaymanagementapi (>=1.20.0)", "mypy-boto3-apigatewayv2 (>=1.20.0)", "mypy-boto3-appconfig (>=1.20.0)", "mypy-boto3-appconfigdata (>=1.20.0)", "mypy-boto3-appflow (>=1.20.0)", "mypy-boto3-appintegrations (>=1.20.0)", "mypy-boto3-application-autoscaling (>=1.20.0)", "mypy-boto3-application-insights (>=1.20.0)", "mypy-boto3-applicationcostprofiler (>=1.20.0)", "mypy-boto3-appmesh (>=1.20.0)", "mypy-boto3-apprunner (>=1.20.0)", "mypy-boto3-appstream (>=1.20.0)", "mypy-boto3-appsync (>=1.20.0)", "mypy-boto3-athena (>=1.20.0)", "mypy-boto3-auditmanager (>=1.20.0)", "mypy-boto3-autoscaling (>=1.20.0)", "mypy-boto3-autoscaling-plans (>=1.20.0)", "mypy-boto3-backup (>=1.20.0)", "mypy-boto3-backup-gateway (>=1.20.0)", "mypy-boto3-batch (>=1.20.0)", "mypy-boto3-braket (>=1.20.0)", "mypy-boto3-budgets (>=1.20.0)", "mypy-boto3-ce (>=1.20.0)", "mypy-boto3-chime (>=1.20.0)", "mypy-boto3-chime-sdk-identity (>=1.20.0)", "mypy-boto3-chime-sdk-meetings (>=1.20.0)", "mypy-boto3-chime-sdk-messaging (>=1.20.0)", "mypy-boto3-cloud9 (>=1.20.0)", "mypy-boto3-cloudcontrol (>=1.20.0)", "mypy-boto3-clouddirectory (>=1.20.0)", "mypy-boto3-cloudformation (>=1.20.0)", "mypy-boto3-cloudfront (>=1.20.0)", "mypy-boto3-cloudhsm (>=1.20.0)", "mypy-boto3-cloudhsmv2 (>=1.20.0)", "mypy-boto3-cloudsearch (>=1.20.0)", "mypy-boto3-cloudsearchdomain (>=1.20.0)", "mypy-boto3-cloudtrail (>=1.20.0)", "mypy-boto3-cloudwatch (>=1.20.0)", "mypy-boto3-codeartifact (>=1.20.0)", "mypy-boto3-codebuild (>=1.20.0)", "mypy-boto3-codecommit (>=1.20.0)", "mypy-boto3-codedeploy (>=1.20.0)", "mypy-boto3-codeguru-reviewer (>=1.20.0)", "mypy-boto3-codeguruprofiler (>=1.20.0)", "mypy-boto3-codepipeline (>=1.20.0)", "mypy-boto3-codestar (>=1.20.0)", "mypy-boto3-codestar-connections (>=1.20.0)", "mypy-boto3-codestar-notifications (>=1.20.0)", "mypy-boto3-cognito-identity (>=1.20.0)", "mypy-boto3-cognito-idp (>=1.20.0)", "mypy-boto3-cognito-sync (>=1.20.0)", "mypy-boto3-comprehend (>=1.20.0)", "mypy-boto3-comprehendmedical (>=1.20.0)", "mypy-boto3-compute-optimizer (>=1.20.0)", "mypy-boto3-config (>=1.20.0)", "mypy-boto3-connect (>=1.20.0)", "mypy-boto3-connect-contact-lens (>=1.20.0)", "mypy-boto3-connectparticipant (>=1.20.0)", "mypy-boto3-cur (>=1.20.0)", "mypy-boto3-customer-profiles (>=1.20.0)", "mypy-boto3-databrew (>=1.20.0)", "mypy-boto3-dataexchange (>=1.20.0)", "mypy-boto3-datapipeline (>=1.20.0)", "mypy-boto3-datasync (>=1.20.0)", "mypy-boto3-dax (>=1.20.0)", "mypy-boto3-detective (>=1.20.0)", "mypy-boto3-devicefarm (>=1.20.0)", "mypy-boto3-devops-guru (>=1.20.0)", "mypy-boto3-directconnect (>=1.20.0)", "mypy-boto3-discovery (>=1.20.0)", "mypy-boto3-dlm (>=1.20.0)", "mypy-boto3-dms (>=1.20.0)", "mypy-boto3-docdb (>=1.20.0)", "mypy-boto3-drs (>=1.20.0)", "mypy-boto3-ds (>=1.20.0)", "mypy-boto3-dynamodb (>=1.20.0)", "mypy-boto3-dynamodbstreams (>=1.20.0)", "mypy-boto3-ebs (>=1.20.0)", "mypy-boto3-ec2 (>=1.20.0)", "mypy-boto3-ec2-instance-connect (>=1.20.0)", "mypy-boto3-ecr (>=1.20.0)", "mypy-boto3-ecr-public (>=1.20.0)", "mypy-boto3-ecs (>=1.20.0)", "mypy-boto3-efs (>=1.20.0)", "mypy-boto3-eks (>=1.20.0)", "mypy-boto3-elastic-inference (>=1.20.0)", "mypy-boto3-elasticache (>=1.20.0)", "mypy-boto3-elasticbeanstalk (>=1.20.0)", "mypy-boto3-elastictranscoder (>=1.20.0)", "mypy-boto3-elb (>=1.20.0)", "mypy-boto3-elbv2 (>=1.20.0)", "mypy-boto3-emr (>=1.20.0)", "mypy-boto3-emr-containers (>=1.20.0)", "mypy-boto3-es (>=1.20.0)", "mypy-boto3-events (>=1.20.0)", "mypy-boto3-evidently (>=1.20.0)", "mypy-boto3-finspace (>=1.20.0)", "mypy-boto3-finspace-data (>=1.20.0)", "mypy-boto3-firehose (>=1.20.0)", "mypy-boto3-fis (>=1.20.0)", "mypy-boto3-fms (>=1.20.0)", "mypy-boto3-forecast (>=1.20.0)", "mypy-boto3-forecastquery (>=1.20.0)", "mypy-boto3-frauddetector (>=1.20.0)", "mypy-boto3-fsx (>=1.20.0)", "mypy-boto3-gamelift (>=1.20.0)", "mypy-boto3-glacier (>=1.20.0)", "mypy-boto3-globalaccelerator (>=1.20.0)", "mypy-boto3-glue (>=1.20.0)", "mypy-boto3-grafana (>=1.20.0)", "mypy-boto3-greengrass (>=1.20.0)", "mypy-boto3-greengrassv2 (>=1.20.0)", "mypy-boto3-groundstation (>=1.20.0)", "mypy-boto3-guardduty (>=1.20.0)", "mypy-boto3-health (>=1.20.0)", "mypy-boto3-healthlake (>=1.20.0)", "mypy-boto3-honeycode (>=1.20.0)", "mypy-boto3-iam (>=1.20.0)", "mypy-boto3-identitystore (>=1.20.0)", "mypy-boto3-imagebuilder (>=1.20.0)", "mypy-boto3-importexport (>=1.20.0)", "mypy-boto3-inspector (>=1.20.0)", "mypy-boto3-inspector2 (>=1.20.0)", "mypy-boto3-iot (>=1.20.0)", "mypy-boto3-iot-data (>=1.20.0)", "mypy-boto3-iot-jobs-data (>=1.20.0)", "mypy-boto3-iot1click-devices (>=1.20.0)", "mypy-boto3-iot1click-projects (>=1.20.0)", "mypy-boto3-iotanalytics (>=1.20.0)", "mypy-boto3-iotdeviceadvisor (>=1.20.0)", "mypy-boto3-iotevents (>=1.20.0)", "mypy-boto3-iotevents-data (>=1.20.0)", "mypy-boto3-iotfleethub (>=1.20.0)", "mypy-boto3-iotsecuretunneling (>=1.20.0)", "mypy-boto3-iotsitewise (>=1.20.0)", "mypy-boto3-iotthingsgraph (>=1.20.0)", "mypy-boto3-iottwinmaker (>=1.20.0)", "mypy-boto3-iotwireless (>=1.20.0)", "mypy-boto3-ivs (>=1.20.0)", "mypy-boto3-kafka (>=1.20.0)", "mypy-boto3-kafkaconnect (>=1.20.0)", "mypy-boto3-kendra (>=1.20.0)", "mypy-boto3-kinesis (>=1.20.0)", "mypy-boto3-kinesis-video-archived-media (>=1.20.0)", "mypy-boto3-kinesis-video-media (>=1.20.0)", "mypy-boto3-kinesis-video-signaling (>=1.20.0)", "mypy-boto3-kinesisanalytics (>=1.20.0)", "mypy-boto3-kinesisanalyticsv2 (>=1.20.0)", "mypy-boto3-kinesisvideo (>=1.20.0)", "mypy-boto3-kms (>=1.20.0)", "mypy-boto3-lakeformation (>=1.20.0)", "mypy-boto3-lambda (>=1.20.0)", "mypy-boto3-lex-models (>=1.20.0)", "mypy-boto3-lex-runtime (>=1.20.0)", "mypy-boto3-lexv2-models (>=1.20.0)", "mypy-boto3-lexv2-runtime (>=1.20.0)", "mypy-boto3-license-manager (>=1.20.0)", "mypy-boto3-lightsail (>=1.20.0)", "mypy-boto3-location (>=1.20.0)", "mypy-boto3-logs (>=1.20.0)", "mypy-boto3-lookoutequipment (>=1.20.0)", "mypy-boto3-lookoutmetrics (>=1.20.0)", "mypy-boto3-lookoutvision (>=1.20.0)", "mypy-boto3-machinelearning (>=1.20.0)", "mypy-boto3-macie (>=1.20.0)", "mypy-boto3-macie2 (>=1.20.0)", "mypy-boto3-managedblockchain (>=1.20.0)", "mypy-boto3-marketplace-catalog (>=1.20.0)", "mypy-boto3-marketplace-entitlement (>=1.20.0)", "mypy-boto3-marketplacecommerceanalytics (>=1.20.0)", "mypy-boto3-mediaconnect (>=1.20.0)", "mypy-boto3-mediaconvert (>=1.20.0)", "mypy-boto3-medialive (>=1.20.0)", "mypy-boto3-mediapackage (>=1.20.0)", "mypy-boto3-mediapackage-vod (>=1.20.0)", "mypy-boto3-mediastore (>=1.20.0)", "mypy-boto3-mediastore-data (>=1.20.0)", "mypy-boto3-mediatailor (>=1.20.0)", "mypy-boto3-memorydb (>=1.20.0)", "mypy-boto3-meteringmarketplace (>=1.20.0)", "mypy-boto3-mgh (>=1.20.0)", "mypy-boto3-mgn (>=1.20.0)", "mypy-boto3-migration-hub-refactor-spaces (>=1.20.0)", "mypy-boto3-migrationhub-config (>=1.20.0)", "mypy-boto3-migrationhubstrategy (>=1.20.0)", "mypy-boto3-mobile (>=1.20.0)", "mypy-boto3-mq (>=1.20.0)", "mypy-boto3-mturk (>=1.20.0)", "mypy-boto3-mwaa (>=1.20.0)", "mypy-boto3-neptune (>=1.20.0)", "mypy-boto3-network-firewall (>=1.20.0)", "mypy-boto3-networkmanager (>=1.20.0)", "mypy-boto3-nimble (>=1.20.0)", "mypy-boto3-opensearch (>=1.20.0)", "mypy-boto3-opsworks (>=1.20.0)", "mypy-boto3-opsworkscm (>=1.20.0)", "mypy-boto3-organizations (>=1.20.0)", "mypy-boto3-outposts (>=1.20.0)", "mypy-boto3-panorama (>=1.20.0)", "mypy-boto3-personalize (>=1.20.0)", "mypy-boto3-personalize-events (>=1.20.0)", "mypy-boto3-personalize-runtime (>=1.20.0)", "mypy-boto3-pi (>=1.20.0)", "mypy-boto3-pinpoint (>=1.20.0)", "mypy-boto3-pinpoint-email (>=1.20.0)", "mypy-boto3-pinpoint-sms-voice (>=1.20.0)", "mypy-boto3-polly (>=1.20.0)", "mypy-boto3-pricing (>=1.20.0)", "mypy-boto3-proton (>=1.20.0)", "mypy-boto3-qldb (>=1.20.0)", "mypy-boto3-qldb-session (>=1.20.0)", "mypy-boto3-quicksight (>=1.20.0)", "mypy-boto3-ram (>=1.20.0)", "mypy-boto3-rbin (>=1.20.0)", "mypy-boto3-rds (>=1.20.0)", "mypy-boto3-rds-data (>=1.20.0)", "mypy-boto3-redshift (>=1.20.0)", "mypy-boto3-redshift-data (>=1.20.0)", "mypy-boto3-rekognition (>=1.20.0)", "mypy-boto3-resiliencehub (>=1.20.0)", "mypy-boto3-resource-groups (>=1.20.0)", "mypy-boto3-resourcegroupstaggingapi (>=1.20.0)", "mypy-boto3-robomaker (>=1.20.0)", "mypy-boto3-route53 (>=1.20.0)", "mypy-boto3-route53-recovery-cluster (>=1.20.0)", "mypy-boto3-route53-recovery-control-config (>=1.20.0)", "mypy-boto3-route53-recovery-readiness (>=1.20.0)", "mypy-boto3-route53domains (>=1.20.0)", "mypy-boto3-route53resolver (>=1.20.0)", "mypy-boto3-rum (>=1.20.0)", "mypy-boto3-s3 (>=1.20.0)", "mypy-boto3-s3control (>=1.20.0)", "mypy-boto3-s3outposts (>=1.20.0)", "mypy-boto3-sagemaker (>=1.20.0)", "mypy-boto3-sagemaker-a2i-runtime (>=1.20.0)", "mypy-boto3-sagemaker-edge (>=1.20.0)", "mypy-boto3-sagemaker-featurestore-runtime (>=1.20.0)", "mypy-boto3-sagemaker-runtime (>=1.20.0)", "mypy-boto3-savingsplans (>=1.20.0)", "mypy-boto3-schemas (>=1.20.0)", "mypy-boto3-sdb (>=1.20.0)", "mypy-boto3-secretsmanager (>=1.20.0)", "mypy-boto3-securityhub (>=1.20.0)", "mypy-boto3-serverlessrepo (>=1.20.0)", "mypy-boto3-service-quotas (>=1.20.0)", "mypy-boto3-servicecatalog (>=1.20.0)", "mypy-boto3-servicecatalog-appregistry (>=1.20.0)", "mypy-boto3-servicediscovery (>=1.20.0)", "mypy-boto3-ses (>=1.20.0)", "mypy-boto3-sesv2 (>=1.20.0)", "mypy-boto3-shield (>=1.20.0)", "mypy-boto3-signer (>=1.20.0)", "mypy-boto3-sms (>=1.20.0)", "mypy-boto3-sms-voice (>=1.20.0)", "mypy-boto3-snow-device-management (>=1.20.0)", "mypy-boto3-snowball (>=1.20.0)", "mypy-boto3-sns (>=1.20.0)", "mypy-boto3-sqs (>=1.20.0)", "mypy-boto3-ssm (>=1.20.0)", "mypy-boto3-ssm-contacts (>=1.20.0)", "mypy-boto3-ssm-incidents (>=1.20.0)", "mypy-boto3-sso (>=1.20.0)", "mypy-boto3-sso-admin (>=1.20.0)", "mypy-boto3-sso-oidc (>=1.20.0)", "mypy-boto3-stepfunctions (>=1.20.0)", "mypy-boto3-storagegateway (>=1.20.0)", "mypy-boto3-sts (>=1.20.0)", "mypy-boto3-support (>=1.20.0)", "mypy-boto3-swf (>=1.20.0)", "mypy-boto3-synthetics (>=1.20.0)", "mypy-boto3-textract (>=1.20.0)", "mypy-boto3-timestream-query (>=1.20.0)", "mypy-boto3-timestream-write (>=1.20.0)", "mypy-boto3-transcribe (>=1.20.0)", "mypy-boto3-transfer (>=1.20.0)", "mypy-boto3-translate (>=1.20.0)", "mypy-boto3-voice-id (>=1.20.0)", "mypy-boto3-waf (>=1.20.0)", "mypy-boto3-waf-regional (>=1.20.0)", "mypy-boto3-wafv2 (>=1.20.0)", "mypy-boto3-wellarchitected (>=1.20.0)", "mypy-boto3-wisdom (>=1.20.0)", "mypy-boto3-workdocs (>=1.20.0)", "mypy-boto3-worklink (>=1.20.0)", "mypy-boto3-workmail (>=1.20.0)", "mypy-boto3-workmailmessageflow (>=1.20.0)", "mypy-boto3-workspaces (>=1.20.0)", "mypy-boto3-workspaces-web (>=1.20.0)", "mypy-boto3-xray (>=1.20.0)"] amp = ["mypy-boto3-amp (>=1.20.0)"] amplify = ["mypy-boto3-amplify (>=1.20.0)"] amplifybackend = ["mypy-boto3-amplifybackend (>=1.20.0)"] +amplifyuibuilder = ["mypy-boto3-amplifyuibuilder (>=1.20.0)"] apigateway = ["mypy-boto3-apigateway (>=1.20.0)"] apigatewaymanagementapi = ["mypy-boto3-apigatewaymanagementapi (>=1.20.0)"] apigatewayv2 = ["mypy-boto3-apigatewayv2 (>=1.20.0)"] @@ -437,6 +446,7 @@ auditmanager = ["mypy-boto3-auditmanager (>=1.20.0)"] autoscaling = ["mypy-boto3-autoscaling (>=1.20.0)"] autoscaling-plans = ["mypy-boto3-autoscaling-plans (>=1.20.0)"] backup = ["mypy-boto3-backup (>=1.20.0)"] +backup-gateway = ["mypy-boto3-backup-gateway (>=1.20.0)"] batch = ["mypy-boto3-batch (>=1.20.0)"] braket = ["mypy-boto3-braket (>=1.20.0)"] budgets = ["mypy-boto3-budgets (>=1.20.0)"] @@ -514,6 +524,7 @@ emr-containers = ["mypy-boto3-emr-containers (>=1.20.0)"] es = ["mypy-boto3-es (>=1.20.0)"] essential = ["mypy-boto3-cloudformation (>=1.20.0)", "mypy-boto3-dynamodb (>=1.20.0)", "mypy-boto3-ec2 (>=1.20.0)", "mypy-boto3-lambda (>=1.20.0)", "mypy-boto3-rds (>=1.20.0)", "mypy-boto3-s3 (>=1.20.0)", "mypy-boto3-sqs (>=1.20.0)"] events = ["mypy-boto3-events (>=1.20.0)"] +evidently = ["mypy-boto3-evidently (>=1.20.0)"] finspace = ["mypy-boto3-finspace (>=1.20.0)"] finspace-data = ["mypy-boto3-finspace-data (>=1.20.0)"] firehose = ["mypy-boto3-firehose (>=1.20.0)"] @@ -540,6 +551,7 @@ identitystore = ["mypy-boto3-identitystore (>=1.20.0)"] imagebuilder = ["mypy-boto3-imagebuilder (>=1.20.0)"] importexport = ["mypy-boto3-importexport (>=1.20.0)"] inspector = ["mypy-boto3-inspector (>=1.20.0)"] +inspector2 = ["mypy-boto3-inspector2 (>=1.20.0)"] iot = ["mypy-boto3-iot (>=1.20.0)"] iot-data = ["mypy-boto3-iot-data (>=1.20.0)"] iot-jobs-data = ["mypy-boto3-iot-jobs-data (>=1.20.0)"] @@ -553,6 +565,7 @@ iotfleethub = ["mypy-boto3-iotfleethub (>=1.20.0)"] iotsecuretunneling = ["mypy-boto3-iotsecuretunneling (>=1.20.0)"] iotsitewise = ["mypy-boto3-iotsitewise (>=1.20.0)"] iotthingsgraph = ["mypy-boto3-iotthingsgraph (>=1.20.0)"] +iottwinmaker = ["mypy-boto3-iottwinmaker (>=1.20.0)"] iotwireless = ["mypy-boto3-iotwireless (>=1.20.0)"] ivs = ["mypy-boto3-ivs (>=1.20.0)"] kafka = ["mypy-boto3-kafka (>=1.20.0)"] @@ -598,6 +611,7 @@ memorydb = ["mypy-boto3-memorydb (>=1.20.0)"] meteringmarketplace = ["mypy-boto3-meteringmarketplace (>=1.20.0)"] mgh = ["mypy-boto3-mgh (>=1.20.0)"] mgn = ["mypy-boto3-mgn (>=1.20.0)"] +migration-hub-refactor-spaces = ["mypy-boto3-migration-hub-refactor-spaces (>=1.20.0)"] migrationhub-config = ["mypy-boto3-migrationhub-config (>=1.20.0)"] migrationhubstrategy = ["mypy-boto3-migrationhubstrategy (>=1.20.0)"] mobile = ["mypy-boto3-mobile (>=1.20.0)"] @@ -628,6 +642,7 @@ qldb = ["mypy-boto3-qldb (>=1.20.0)"] qldb-session = ["mypy-boto3-qldb-session (>=1.20.0)"] quicksight = ["mypy-boto3-quicksight (>=1.20.0)"] ram = ["mypy-boto3-ram (>=1.20.0)"] +rbin = ["mypy-boto3-rbin (>=1.20.0)"] rds = ["mypy-boto3-rds (>=1.20.0)"] rds-data = ["mypy-boto3-rds-data (>=1.20.0)"] redshift = ["mypy-boto3-redshift (>=1.20.0)"] @@ -643,6 +658,7 @@ route53-recovery-control-config = ["mypy-boto3-route53-recovery-control-config ( route53-recovery-readiness = ["mypy-boto3-route53-recovery-readiness (>=1.20.0)"] route53domains = ["mypy-boto3-route53domains (>=1.20.0)"] route53resolver = ["mypy-boto3-route53resolver (>=1.20.0)"] +rum = ["mypy-boto3-rum (>=1.20.0)"] s3 = ["mypy-boto3-s3 (>=1.20.0)"] s3control = ["mypy-boto3-s3control (>=1.20.0)"] s3outposts = ["mypy-boto3-s3outposts (>=1.20.0)"] @@ -700,11 +716,12 @@ worklink = ["mypy-boto3-worklink (>=1.20.0)"] workmail = ["mypy-boto3-workmail (>=1.20.0)"] workmailmessageflow = ["mypy-boto3-workmailmessageflow (>=1.20.0)"] workspaces = ["mypy-boto3-workspaces (>=1.20.0)"] +workspaces-web = ["mypy-boto3-workspaces-web (>=1.20.0)"] xray = ["mypy-boto3-xray (>=1.20.0)"] [[package]] name = "botocore" -version = "1.23.10" +version = "1.23.23" description = "Low-level, data-driven core of boto 3." category = "main" optional = false @@ -720,8 +737,8 @@ crt = ["awscrt (==0.12.5)"] [[package]] name = "botocore-stubs" -version = "1.23.10" -description = "Type annotations for botocore 1.23.10, generated by mypy-boto3-builder 6.2.1" +version = "1.23.23" +description = "Type annotations for botocore 1.23.23, generated by mypy-boto3-builder 6.2.1" category = "dev" optional = false python-versions = ">=3.6" @@ -736,7 +753,7 @@ python-versions = "*" [[package]] name = "charset-normalizer" -version = "2.0.7" +version = "2.0.9" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." category = "dev" optional = false @@ -798,7 +815,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" [[package]] name = "coverage" -version = "6.1.2" +version = "6.2" description = "Code coverage measurement for Python" category = "dev" optional = false @@ -892,7 +909,7 @@ pyflakes = ">=2.3.0,<2.4.0" [[package]] name = "flake8-2020" -version = "1.6.0" +version = "1.6.1" description = "flake8 plugin which checks for misuse of `sys.version` or `sys.version_info`" category = "dev" optional = false @@ -947,7 +964,7 @@ flake8 = ">=3.5,<4.0" [[package]] name = "flake8-bugbear" -version = "21.9.2" +version = "21.11.29" description = "A plugin for flake8 finding likely bugs and design problems in your program. Contains warnings that don't belong in pyflakes and pycodestyle." category = "dev" optional = false @@ -958,7 +975,7 @@ attrs = ">=19.2.0" flake8 = ">=3.0.0" [package.extras] -dev = ["coverage", "black", "hypothesis", "hypothesmith"] +dev = ["coverage", "hypothesis", "hypothesmith (>=0.2)", "pre-commit"] [[package]] name = "flake8-builtins" @@ -1422,7 +1439,7 @@ python-versions = "*" [[package]] name = "more-itertools" -version = "8.11.0" +version = "8.12.0" description = "More routines for operating on iterables, beyond itertools" category = "dev" optional = false @@ -1459,8 +1476,8 @@ python2 = ["typed-ast (>=1.4.0,<1.5.0)"] [[package]] name = "mypy-boto3-accessanalyzer" -version = "1.20.1" -description = "Type annotations for boto3.AccessAnalyzer 1.20.1 service, generated by mypy-boto3-builder 6.1.2" +version = "1.20.17" +description = "Type annotations for boto3.AccessAnalyzer 1.20.17 service, generated by mypy-boto3-builder 6.2.1" category = "dev" optional = false python-versions = ">=3.6" @@ -1521,6 +1538,14 @@ category = "dev" optional = false python-versions = ">=3.6" +[[package]] +name = "mypy-boto3-amplifyuibuilder" +version = "1.20.19" +description = "Type annotations for boto3.AmplifyUIBuilder 1.20.19 service, generated by mypy-boto3-builder 6.2.1" +category = "dev" +optional = false +python-versions = ">=3.6" + [[package]] name = "mypy-boto3-apigateway" version = "1.20.8" @@ -1627,8 +1652,8 @@ python-versions = ">=3.6" [[package]] name = "mypy-boto3-appsync" -version = "1.20.1" -description = "Type annotations for boto3.AppSync 1.20.1 service, generated by mypy-boto3-builder 6.1.2" +version = "1.20.21" +description = "Type annotations for boto3.AppSync 1.20.21 service, generated by mypy-boto3-builder 6.2.1" category = "dev" optional = false python-versions = ">=3.6" @@ -1651,8 +1676,8 @@ python-versions = ">=3.6" [[package]] name = "mypy-boto3-autoscaling" -version = "1.20.1" -description = "Type annotations for boto3.AutoScaling 1.20.1 service, generated by mypy-boto3-builder 6.1.2" +version = "1.20.14" +description = "Type annotations for boto3.AutoScaling 1.20.14 service, generated by mypy-boto3-builder 6.2.1" category = "dev" optional = false python-versions = ">=3.6" @@ -1667,8 +1692,16 @@ python-versions = ">=3.6" [[package]] name = "mypy-boto3-backup" -version = "1.20.3" -description = "Type annotations for boto3.Backup 1.20.3 service, generated by mypy-boto3-builder 6.2.0" +version = "1.20.12" +description = "Type annotations for boto3.Backup 1.20.12 service, generated by mypy-boto3-builder 6.2.1" +category = "dev" +optional = false +python-versions = ">=3.6" + +[[package]] +name = "mypy-boto3-backup-gateway" +version = "1.20.17" +description = "Type annotations for boto3.BackupGateway 1.20.17 service, generated by mypy-boto3-builder 6.2.1" category = "dev" optional = false python-versions = ">=3.6" @@ -1683,8 +1716,8 @@ python-versions = ">=3.6" [[package]] name = "mypy-boto3-braket" -version = "1.20.1" -description = "Type annotations for boto3.Braket 1.20.1 service, generated by mypy-boto3-builder 6.1.2" +version = "1.20.11" +description = "Type annotations for boto3.Braket 1.20.11 service, generated by mypy-boto3-builder 6.2.1" category = "dev" optional = false python-versions = ">=3.6" @@ -1723,8 +1756,8 @@ python-versions = ">=3.6" [[package]] name = "mypy-boto3-chime-sdk-meetings" -version = "1.20.9" -description = "Type annotations for boto3.ChimeSDKMeetings 1.20.9 service, generated by mypy-boto3-builder 6.2.1" +version = "1.20.11" +description = "Type annotations for boto3.ChimeSDKMeetings 1.20.11 service, generated by mypy-boto3-builder 6.2.1" category = "dev" optional = false python-versions = ">=3.6" @@ -1763,8 +1796,8 @@ python-versions = ">=3.6" [[package]] name = "mypy-boto3-cloudformation" -version = "1.20.10" -description = "Type annotations for boto3.CloudFormation 1.20.10 service, generated by mypy-boto3-builder 6.2.1" +version = "1.20.11" +description = "Type annotations for boto3.CloudFormation 1.20.11 service, generated by mypy-boto3-builder 6.2.1" category = "dev" optional = false python-versions = ">=3.6" @@ -1939,16 +1972,16 @@ python-versions = ">=3.6" [[package]] name = "mypy-boto3-comprehendmedical" -version = "1.20.1" -description = "Type annotations for boto3.ComprehendMedical 1.20.1 service, generated by mypy-boto3-builder 6.1.2" +version = "1.20.22" +description = "Type annotations for boto3.ComprehendMedical 1.20.22 service, generated by mypy-boto3-builder 6.2.1" category = "dev" optional = false python-versions = ">=3.6" [[package]] name = "mypy-boto3-compute-optimizer" -version = "1.20.1" -description = "Type annotations for boto3.ComputeOptimizer 1.20.1 service, generated by mypy-boto3-builder 6.1.2" +version = "1.20.16" +description = "Type annotations for boto3.ComputeOptimizer 1.20.16 service, generated by mypy-boto3-builder 6.2.1" category = "dev" optional = false python-versions = ">=3.6" @@ -1963,8 +1996,8 @@ python-versions = ">=3.6" [[package]] name = "mypy-boto3-connect" -version = "1.20.5" -description = "Type annotations for boto3.Connect 1.20.5 service, generated by mypy-boto3-builder 6.2.0" +version = "1.20.11" +description = "Type annotations for boto3.Connect 1.20.11 service, generated by mypy-boto3-builder 6.2.1" category = "dev" optional = false python-versions = ">=3.6" @@ -1995,8 +2028,8 @@ python-versions = ">=3.6" [[package]] name = "mypy-boto3-customer-profiles" -version = "1.20.1" -description = "Type annotations for boto3.CustomerProfiles 1.20.1 service, generated by mypy-boto3-builder 6.1.2" +version = "1.20.13" +description = "Type annotations for boto3.CustomerProfiles 1.20.13 service, generated by mypy-boto3-builder 6.2.1" category = "dev" optional = false python-versions = ">=3.6" @@ -2011,8 +2044,8 @@ python-versions = ">=3.6" [[package]] name = "mypy-boto3-dataexchange" -version = "1.20.1" -description = "Type annotations for boto3.DataExchange 1.20.1 service, generated by mypy-boto3-builder 6.1.2" +version = "1.20.16" +description = "Type annotations for boto3.DataExchange 1.20.16 service, generated by mypy-boto3-builder 6.2.1" category = "dev" optional = false python-versions = ">=3.6" @@ -2059,16 +2092,16 @@ python-versions = ">=3.6" [[package]] name = "mypy-boto3-devops-guru" -version = "1.20.5" -description = "Type annotations for boto3.DevOpsGuru 1.20.5 service, generated by mypy-boto3-builder 6.2.0" +version = "1.20.18" +description = "Type annotations for boto3.DevOpsGuru 1.20.18 service, generated by mypy-boto3-builder 6.2.1" category = "dev" optional = false python-versions = ">=3.6" [[package]] name = "mypy-boto3-directconnect" -version = "1.20.1" -description = "Type annotations for boto3.DirectConnect 1.20.1 service, generated by mypy-boto3-builder 6.1.2" +version = "1.20.18" +description = "Type annotations for boto3.DirectConnect 1.20.18 service, generated by mypy-boto3-builder 6.2.1" category = "dev" optional = false python-versions = ">=3.6" @@ -2091,8 +2124,8 @@ python-versions = ">=3.6" [[package]] name = "mypy-boto3-dms" -version = "1.20.6" -description = "Type annotations for boto3.DatabaseMigrationService 1.20.6 service, generated by mypy-boto3-builder 6.2.0" +version = "1.20.11" +description = "Type annotations for boto3.DatabaseMigrationService 1.20.11 service, generated by mypy-boto3-builder 6.2.1" category = "dev" optional = false python-versions = ">=3.6" @@ -2123,8 +2156,8 @@ python-versions = ">=3.6" [[package]] name = "mypy-boto3-dynamodb" -version = "1.20.4" -description = "Type annotations for boto3.DynamoDB 1.20.4 service, generated by mypy-boto3-builder 6.2.0" +version = "1.20.18" +description = "Type annotations for boto3.DynamoDB 1.20.18 service, generated by mypy-boto3-builder 6.2.1" category = "dev" optional = false python-versions = ">=3.6" @@ -2147,8 +2180,8 @@ python-versions = ">=3.6" [[package]] name = "mypy-boto3-ec2" -version = "1.20.6" -description = "Type annotations for boto3.EC2 1.20.6 service, generated by mypy-boto3-builder 6.2.0" +version = "1.20.23" +description = "Type annotations for boto3.EC2 1.20.23 service, generated by mypy-boto3-builder 6.2.1" category = "dev" optional = false python-versions = ">=3.6" @@ -2163,8 +2196,8 @@ python-versions = ">=3.6" [[package]] name = "mypy-boto3-ecr" -version = "1.20.1" -description = "Type annotations for boto3.ECR 1.20.1 service, generated by mypy-boto3-builder 6.1.2" +version = "1.20.16" +description = "Type annotations for boto3.ECR 1.20.16 service, generated by mypy-boto3-builder 6.2.1" category = "dev" optional = false python-versions = ">=3.6" @@ -2179,8 +2212,8 @@ python-versions = ">=3.6" [[package]] name = "mypy-boto3-ecs" -version = "1.20.3" -description = "Type annotations for boto3.ECS 1.20.3 service, generated by mypy-boto3-builder 6.2.0" +version = "1.20.12" +description = "Type annotations for boto3.ECS 1.20.12 service, generated by mypy-boto3-builder 6.2.1" category = "dev" optional = false python-versions = ">=3.6" @@ -2195,8 +2228,8 @@ python-versions = ">=3.6" [[package]] name = "mypy-boto3-eks" -version = "1.20.6" -description = "Type annotations for boto3.EKS 1.20.6 service, generated by mypy-boto3-builder 6.2.0" +version = "1.20.11" +description = "Type annotations for boto3.EKS 1.20.11 service, generated by mypy-boto3-builder 6.2.1" category = "dev" optional = false python-versions = ">=3.6" @@ -2211,8 +2244,8 @@ python-versions = ">=3.6" [[package]] name = "mypy-boto3-elasticache" -version = "1.20.1" -description = "Type annotations for boto3.ElastiCache 1.20.1 service, generated by mypy-boto3-builder 6.1.2" +version = "1.20.13" +description = "Type annotations for boto3.ElastiCache 1.20.13 service, generated by mypy-boto3-builder 6.2.1" category = "dev" optional = false python-versions = ">=3.6" @@ -2243,8 +2276,8 @@ python-versions = ">=3.6" [[package]] name = "mypy-boto3-elbv2" -version = "1.20.1" -description = "Type annotations for boto3.ElasticLoadBalancingv2 1.20.1 service, generated by mypy-boto3-builder 6.1.2" +version = "1.20.12" +description = "Type annotations for boto3.ElasticLoadBalancingv2 1.20.12 service, generated by mypy-boto3-builder 6.2.1" category = "dev" optional = false python-versions = ">=3.6" @@ -2267,8 +2300,8 @@ python-versions = ">=3.6" [[package]] name = "mypy-boto3-es" -version = "1.20.1" -description = "Type annotations for boto3.ElasticsearchService 1.20.1 service, generated by mypy-boto3-builder 6.1.2" +version = "1.20.11" +description = "Type annotations for boto3.ElasticsearchService 1.20.11 service, generated by mypy-boto3-builder 6.2.1" category = "dev" optional = false python-versions = ">=3.6" @@ -2281,6 +2314,14 @@ category = "dev" optional = false python-versions = ">=3.6" +[[package]] +name = "mypy-boto3-evidently" +version = "1.20.16" +description = "Type annotations for boto3.CloudWatchEvidently 1.20.16 service, generated by mypy-boto3-builder 6.2.1" +category = "dev" +optional = false +python-versions = ">=3.6" + [[package]] name = "mypy-boto3-finspace" version = "1.20.1" @@ -2291,8 +2332,8 @@ python-versions = ">=3.6" [[package]] name = "mypy-boto3-finspace-data" -version = "1.20.1" -description = "Type annotations for boto3.FinSpaceData 1.20.1 service, generated by mypy-boto3-builder 6.1.2" +version = "1.20.12" +description = "Type annotations for boto3.FinSpaceData 1.20.12 service, generated by mypy-boto3-builder 6.2.1" category = "dev" optional = false python-versions = ">=3.6" @@ -2347,8 +2388,8 @@ python-versions = ">=3.6" [[package]] name = "mypy-boto3-fsx" -version = "1.20.1" -description = "Type annotations for boto3.FSx 1.20.1 service, generated by mypy-boto3-builder 6.1.2" +version = "1.20.17" +description = "Type annotations for boto3.FSx 1.20.17 service, generated by mypy-boto3-builder 6.2.1" category = "dev" optional = false python-versions = ">=3.6" @@ -2379,8 +2420,8 @@ python-versions = ">=3.6" [[package]] name = "mypy-boto3-glue" -version = "1.20.1" -description = "Type annotations for boto3.Glue 1.20.1 service, generated by mypy-boto3-builder 6.1.2" +version = "1.20.17" +description = "Type annotations for boto3.Glue 1.20.17 service, generated by mypy-boto3-builder 6.2.1" category = "dev" optional = false python-versions = ">=3.6" @@ -2427,8 +2468,8 @@ python-versions = ">=3.6" [[package]] name = "mypy-boto3-health" -version = "1.20.2" -description = "Type annotations for boto3.Health 1.20.2 service, generated by mypy-boto3-builder 6.2.0" +version = "1.20.22" +description = "Type annotations for boto3.Health 1.20.22 service, generated by mypy-boto3-builder 6.2.1" category = "dev" optional = false python-versions = ">=3.6" @@ -2467,8 +2508,8 @@ python-versions = ">=3.6" [[package]] name = "mypy-boto3-imagebuilder" -version = "1.20.1" -description = "Type annotations for boto3.imagebuilder 1.20.1 service, generated by mypy-boto3-builder 6.1.2" +version = "1.20.13" +description = "Type annotations for boto3.imagebuilder 1.20.13 service, generated by mypy-boto3-builder 6.2.1" category = "dev" optional = false python-versions = ">=3.6" @@ -2489,10 +2530,18 @@ category = "dev" optional = false python-versions = ">=3.6" +[[package]] +name = "mypy-boto3-inspector2" +version = "1.20.16" +description = "Type annotations for boto3.Inspector2 1.20.16 service, generated by mypy-boto3-builder 6.2.1" +category = "dev" +optional = false +python-versions = ">=3.6" + [[package]] name = "mypy-boto3-iot" -version = "1.20.1" -description = "Type annotations for boto3.IoT 1.20.1 service, generated by mypy-boto3-builder 6.1.2" +version = "1.20.22" +description = "Type annotations for boto3.IoT 1.20.22 service, generated by mypy-boto3-builder 6.2.1" category = "dev" optional = false python-versions = ">=3.6" @@ -2539,8 +2588,8 @@ python-versions = ">=3.6" [[package]] name = "mypy-boto3-iotdeviceadvisor" -version = "1.20.1" -description = "Type annotations for boto3.IoTDeviceAdvisor 1.20.1 service, generated by mypy-boto3-builder 6.1.2" +version = "1.20.14" +description = "Type annotations for boto3.IoTDeviceAdvisor 1.20.14 service, generated by mypy-boto3-builder 6.2.1" category = "dev" optional = false python-versions = ">=3.6" @@ -2579,8 +2628,8 @@ python-versions = ">=3.6" [[package]] name = "mypy-boto3-iotsitewise" -version = "1.20.1" -description = "Type annotations for boto3.IoTSiteWise 1.20.1 service, generated by mypy-boto3-builder 6.1.2" +version = "1.20.16" +description = "Type annotations for boto3.IoTSiteWise 1.20.16 service, generated by mypy-boto3-builder 6.2.1" category = "dev" optional = false python-versions = ">=3.6" @@ -2593,10 +2642,18 @@ category = "dev" optional = false python-versions = ">=3.6" +[[package]] +name = "mypy-boto3-iottwinmaker" +version = "1.20.17" +description = "Type annotations for boto3.IoTTwinMaker 1.20.17 service, generated by mypy-boto3-builder 6.2.1" +category = "dev" +optional = false +python-versions = ">=3.6" + [[package]] name = "mypy-boto3-iotwireless" -version = "1.20.1" -description = "Type annotations for boto3.IoTWireless 1.20.1 service, generated by mypy-boto3-builder 6.1.2" +version = "1.20.12" +description = "Type annotations for boto3.IoTWireless 1.20.12 service, generated by mypy-boto3-builder 6.2.1" category = "dev" optional = false python-versions = ">=3.6" @@ -2611,8 +2668,8 @@ python-versions = ">=3.6" [[package]] name = "mypy-boto3-kafka" -version = "1.20.9" -description = "Type annotations for boto3.Kafka 1.20.9 service, generated by mypy-boto3-builder 6.2.1" +version = "1.20.17" +description = "Type annotations for boto3.Kafka 1.20.17 service, generated by mypy-boto3-builder 6.2.1" category = "dev" optional = false python-versions = ">=3.6" @@ -2627,16 +2684,16 @@ python-versions = ">=3.6" [[package]] name = "mypy-boto3-kendra" -version = "1.20.1" -description = "Type annotations for boto3.kendra 1.20.1 service, generated by mypy-boto3-builder 6.1.2" +version = "1.20.18" +description = "Type annotations for boto3.kendra 1.20.18 service, generated by mypy-boto3-builder 6.2.1" category = "dev" optional = false python-versions = ">=3.6" [[package]] name = "mypy-boto3-kinesis" -version = "1.20.1" -description = "Type annotations for boto3.Kinesis 1.20.1 service, generated by mypy-boto3-builder 6.1.2" +version = "1.20.17" +description = "Type annotations for boto3.Kinesis 1.20.17 service, generated by mypy-boto3-builder 6.2.1" category = "dev" optional = false python-versions = ">=3.6" @@ -2699,16 +2756,16 @@ python-versions = ">=3.6" [[package]] name = "mypy-boto3-lakeformation" -version = "1.20.1" -description = "Type annotations for boto3.LakeFormation 1.20.1 service, generated by mypy-boto3-builder 6.1.2" +version = "1.20.17" +description = "Type annotations for boto3.LakeFormation 1.20.17 service, generated by mypy-boto3-builder 6.2.1" category = "dev" optional = false python-versions = ">=3.6" [[package]] name = "mypy-boto3-lambda" -version = "1.20.10" -description = "Type annotations for boto3.Lambda 1.20.10 service, generated by mypy-boto3-builder 6.2.1" +version = "1.20.13" +description = "Type annotations for boto3.Lambda 1.20.13 service, generated by mypy-boto3-builder 6.2.1" category = "dev" optional = false python-versions = ">=3.6" @@ -2731,8 +2788,8 @@ python-versions = ">=3.6" [[package]] name = "mypy-boto3-lexv2-models" -version = "1.20.9" -description = "Type annotations for boto3.LexModelsV2 1.20.9 service, generated by mypy-boto3-builder 6.2.1" +version = "1.20.23" +description = "Type annotations for boto3.LexModelsV2 1.20.23 service, generated by mypy-boto3-builder 6.2.1" category = "dev" optional = false python-versions = ">=3.6" @@ -2763,16 +2820,16 @@ python-versions = ">=3.6" [[package]] name = "mypy-boto3-location" -version = "1.20.7" -description = "Type annotations for boto3.LocationService 1.20.7 service, generated by mypy-boto3-builder 6.2.0" +version = "1.20.21" +description = "Type annotations for boto3.LocationService 1.20.21 service, generated by mypy-boto3-builder 6.2.1" category = "dev" optional = false python-versions = ">=3.6" [[package]] name = "mypy-boto3-logs" -version = "1.20.1" -description = "Type annotations for boto3.CloudWatchLogs 1.20.1 service, generated by mypy-boto3-builder 6.1.2" +version = "1.20.22" +description = "Type annotations for boto3.CloudWatchLogs 1.20.22 service, generated by mypy-boto3-builder 6.2.1" category = "dev" optional = false python-versions = ">=3.6" @@ -2795,8 +2852,8 @@ python-versions = ">=3.6" [[package]] name = "mypy-boto3-lookoutvision" -version = "1.20.1" -description = "Type annotations for boto3.LookoutforVision 1.20.1 service, generated by mypy-boto3-builder 6.1.2" +version = "1.20.22" +description = "Type annotations for boto3.LookoutforVision 1.20.22 service, generated by mypy-boto3-builder 6.2.1" category = "dev" optional = false python-versions = ">=3.6" @@ -2819,8 +2876,8 @@ python-versions = ">=3.6" [[package]] name = "mypy-boto3-macie2" -version = "1.20.1" -description = "Type annotations for boto3.Macie2 1.20.1 service, generated by mypy-boto3-builder 6.1.2" +version = "1.20.12" +description = "Type annotations for boto3.Macie2 1.20.12 service, generated by mypy-boto3-builder 6.2.1" category = "dev" optional = false python-versions = ">=3.6" @@ -2947,8 +3004,16 @@ python-versions = ">=3.6" [[package]] name = "mypy-boto3-mgn" -version = "1.20.1" -description = "Type annotations for boto3.mgn 1.20.1 service, generated by mypy-boto3-builder 6.1.2" +version = "1.20.14" +description = "Type annotations for boto3.mgn 1.20.14 service, generated by mypy-boto3-builder 6.2.1" +category = "dev" +optional = false +python-versions = ">=3.6" + +[[package]] +name = "mypy-boto3-migration-hub-refactor-spaces" +version = "1.20.15" +description = "Type annotations for boto3.MigrationHubRefactorSpaces 1.20.15 service, generated by mypy-boto3-builder 6.2.1" category = "dev" optional = false python-versions = ">=3.6" @@ -3011,16 +3076,16 @@ python-versions = ">=3.6" [[package]] name = "mypy-boto3-network-firewall" -version = "1.20.1" -description = "Type annotations for boto3.NetworkFirewall 1.20.1 service, generated by mypy-boto3-builder 6.1.2" +version = "1.20.23" +description = "Type annotations for boto3.NetworkFirewall 1.20.23 service, generated by mypy-boto3-builder 6.2.1" category = "dev" optional = false python-versions = ">=3.6" [[package]] name = "mypy-boto3-networkmanager" -version = "1.20.1" -description = "Type annotations for boto3.NetworkManager 1.20.1 service, generated by mypy-boto3-builder 6.1.2" +version = "1.20.19" +description = "Type annotations for boto3.NetworkManager 1.20.19 service, generated by mypy-boto3-builder 6.2.1" category = "dev" optional = false python-versions = ">=3.6" @@ -3035,8 +3100,8 @@ python-versions = ">=3.6" [[package]] name = "mypy-boto3-opensearch" -version = "1.20.1" -description = "Type annotations for boto3.OpenSearchService 1.20.1 service, generated by mypy-boto3-builder 6.1.2" +version = "1.20.12" +description = "Type annotations for boto3.OpenSearchService 1.20.12 service, generated by mypy-boto3-builder 6.2.1" category = "dev" optional = false python-versions = ">=3.6" @@ -3067,8 +3132,8 @@ python-versions = ">=3.6" [[package]] name = "mypy-boto3-outposts" -version = "1.20.1" -description = "Type annotations for boto3.Outposts 1.20.1 service, generated by mypy-boto3-builder 6.1.2" +version = "1.20.22" +description = "Type annotations for boto3.Outposts 1.20.22 service, generated by mypy-boto3-builder 6.2.1" category = "dev" optional = false python-versions = ">=3.6" @@ -3083,8 +3148,8 @@ python-versions = ">=3.6" [[package]] name = "mypy-boto3-personalize" -version = "1.20.1" -description = "Type annotations for boto3.Personalize 1.20.1 service, generated by mypy-boto3-builder 6.1.2" +version = "1.20.15" +description = "Type annotations for boto3.Personalize 1.20.15 service, generated by mypy-boto3-builder 6.2.1" category = "dev" optional = false python-versions = ">=3.6" @@ -3099,8 +3164,8 @@ python-versions = ">=3.6" [[package]] name = "mypy-boto3-personalize-runtime" -version = "1.20.1" -description = "Type annotations for boto3.PersonalizeRuntime 1.20.1 service, generated by mypy-boto3-builder 6.1.2" +version = "1.20.15" +description = "Type annotations for boto3.PersonalizeRuntime 1.20.15 service, generated by mypy-boto3-builder 6.2.1" category = "dev" optional = false python-versions = ">=3.6" @@ -3115,8 +3180,8 @@ python-versions = ">=3.6" [[package]] name = "mypy-boto3-pinpoint" -version = "1.20.1" -description = "Type annotations for boto3.Pinpoint 1.20.1 service, generated by mypy-boto3-builder 6.1.2" +version = "1.20.14" +description = "Type annotations for boto3.Pinpoint 1.20.14 service, generated by mypy-boto3-builder 6.2.1" category = "dev" optional = false python-versions = ">=3.6" @@ -3155,8 +3220,8 @@ python-versions = ">=3.6" [[package]] name = "mypy-boto3-proton" -version = "1.20.1" -description = "Type annotations for boto3.Proton 1.20.1 service, generated by mypy-boto3-builder 6.1.2" +version = "1.20.13" +description = "Type annotations for boto3.Proton 1.20.13 service, generated by mypy-boto3-builder 6.2.1" category = "dev" optional = false python-versions = ">=3.6" @@ -3179,24 +3244,32 @@ python-versions = ">=3.6" [[package]] name = "mypy-boto3-quicksight" -version = "1.20.1" -description = "Type annotations for boto3.QuickSight 1.20.1 service, generated by mypy-boto3-builder 6.1.2" +version = "1.20.11" +description = "Type annotations for boto3.QuickSight 1.20.11 service, generated by mypy-boto3-builder 6.2.1" category = "dev" optional = false python-versions = ">=3.6" [[package]] name = "mypy-boto3-ram" -version = "1.20.1" -description = "Type annotations for boto3.RAM 1.20.1 service, generated by mypy-boto3-builder 6.1.2" +version = "1.20.19" +description = "Type annotations for boto3.RAM 1.20.19 service, generated by mypy-boto3-builder 6.2.1" +category = "dev" +optional = false +python-versions = ">=3.6" + +[[package]] +name = "mypy-boto3-rbin" +version = "1.20.16" +description = "Type annotations for boto3.RecycleBin 1.20.16 service, generated by mypy-boto3-builder 6.2.1" category = "dev" optional = false python-versions = ">=3.6" [[package]] name = "mypy-boto3-rds" -version = "1.20.1" -description = "Type annotations for boto3.RDS 1.20.1 service, generated by mypy-boto3-builder 6.1.2" +version = "1.20.12" +description = "Type annotations for boto3.RDS 1.20.12 service, generated by mypy-boto3-builder 6.2.1" category = "dev" optional = false python-versions = ">=3.6" @@ -3211,24 +3284,24 @@ python-versions = ">=3.6" [[package]] name = "mypy-boto3-redshift" -version = "1.20.10" -description = "Type annotations for boto3.Redshift 1.20.10 service, generated by mypy-boto3-builder 6.2.1" +version = "1.20.12" +description = "Type annotations for boto3.Redshift 1.20.12 service, generated by mypy-boto3-builder 6.2.1" category = "dev" optional = false python-versions = ">=3.6" [[package]] name = "mypy-boto3-redshift-data" -version = "1.20.9" -description = "Type annotations for boto3.RedshiftDataAPIService 1.20.9 service, generated by mypy-boto3-builder 6.2.1" +version = "1.20.17" +description = "Type annotations for boto3.RedshiftDataAPIService 1.20.17 service, generated by mypy-boto3-builder 6.2.1" category = "dev" optional = false python-versions = ">=3.6" [[package]] name = "mypy-boto3-rekognition" -version = "1.20.1" -description = "Type annotations for boto3.Rekognition 1.20.1 service, generated by mypy-boto3-builder 6.1.2" +version = "1.20.20" +description = "Type annotations for boto3.Rekognition 1.20.20 service, generated by mypy-boto3-builder 6.2.1" category = "dev" optional = false python-versions = ">=3.6" @@ -3267,8 +3340,8 @@ python-versions = ">=3.6" [[package]] name = "mypy-boto3-route53" -version = "1.20.1" -description = "Type annotations for boto3.Route53 1.20.1 service, generated by mypy-boto3-builder 6.1.2" +version = "1.20.21" +description = "Type annotations for boto3.Route53 1.20.21 service, generated by mypy-boto3-builder 6.2.1" category = "dev" optional = false python-versions = ">=3.6" @@ -3283,8 +3356,8 @@ python-versions = ">=3.6" [[package]] name = "mypy-boto3-route53-recovery-control-config" -version = "1.20.1" -description = "Type annotations for boto3.Route53RecoveryControlConfig 1.20.1 service, generated by mypy-boto3-builder 6.1.2" +version = "1.20.23" +description = "Type annotations for boto3.Route53RecoveryControlConfig 1.20.23 service, generated by mypy-boto3-builder 6.2.1" category = "dev" optional = false python-versions = ">=3.6" @@ -3299,8 +3372,8 @@ python-versions = ">=3.6" [[package]] name = "mypy-boto3-route53domains" -version = "1.20.1" -description = "Type annotations for boto3.Route53Domains 1.20.1 service, generated by mypy-boto3-builder 6.1.2" +version = "1.20.23" +description = "Type annotations for boto3.Route53Domains 1.20.23 service, generated by mypy-boto3-builder 6.2.1" category = "dev" optional = false python-versions = ">=3.6" @@ -3313,18 +3386,26 @@ category = "dev" optional = false python-versions = ">=3.6" +[[package]] +name = "mypy-boto3-rum" +version = "1.20.16" +description = "Type annotations for boto3.CloudWatchRUM 1.20.16 service, generated by mypy-boto3-builder 6.2.1" +category = "dev" +optional = false +python-versions = ">=3.6" + [[package]] name = "mypy-boto3-s3" -version = "1.20.1" -description = "Type annotations for boto3.S3 1.20.1 service, generated by mypy-boto3-builder 6.1.2" +version = "1.20.17" +description = "Type annotations for boto3.S3 1.20.17 service, generated by mypy-boto3-builder 6.2.1" category = "dev" optional = false python-versions = ">=3.6" [[package]] name = "mypy-boto3-s3control" -version = "1.20.1" -description = "Type annotations for boto3.S3Control 1.20.1 service, generated by mypy-boto3-builder 6.1.2" +version = "1.20.11" +description = "Type annotations for boto3.S3Control 1.20.11 service, generated by mypy-boto3-builder 6.2.1" category = "dev" optional = false python-versions = ">=3.6" @@ -3339,8 +3420,8 @@ python-versions = ">=3.6" [[package]] name = "mypy-boto3-sagemaker" -version = "1.20.1" -description = "Type annotations for boto3.SageMaker 1.20.1 service, generated by mypy-boto3-builder 6.1.2" +version = "1.20.22" +description = "Type annotations for boto3.SageMaker 1.20.22 service, generated by mypy-boto3-builder 6.2.1" category = "dev" optional = false python-versions = ">=3.6" @@ -3371,16 +3452,16 @@ python-versions = ">=3.6" [[package]] name = "mypy-boto3-sagemaker-runtime" -version = "1.20.1" -description = "Type annotations for boto3.SageMakerRuntime 1.20.1 service, generated by mypy-boto3-builder 6.1.2" +version = "1.20.18" +description = "Type annotations for boto3.SageMakerRuntime 1.20.18 service, generated by mypy-boto3-builder 6.2.1" category = "dev" optional = false python-versions = ">=3.6" [[package]] name = "mypy-boto3-savingsplans" -version = "1.20.1" -description = "Type annotations for boto3.SavingsPlans 1.20.1 service, generated by mypy-boto3-builder 6.1.2" +version = "1.20.23" +description = "Type annotations for boto3.SavingsPlans 1.20.23 service, generated by mypy-boto3-builder 6.2.1" category = "dev" optional = false python-versions = ">=3.6" @@ -3475,8 +3556,8 @@ python-versions = ">=3.6" [[package]] name = "mypy-boto3-shield" -version = "1.20.1" -description = "Type annotations for boto3.Shield 1.20.1 service, generated by mypy-boto3-builder 6.1.2" +version = "1.20.18" +description = "Type annotations for boto3.Shield 1.20.18 service, generated by mypy-boto3-builder 6.2.1" category = "dev" optional = false python-versions = ">=3.6" @@ -3491,8 +3572,8 @@ python-versions = ">=3.6" [[package]] name = "mypy-boto3-sms" -version = "1.20.1" -description = "Type annotations for boto3.SMS 1.20.1 service, generated by mypy-boto3-builder 6.1.2" +version = "1.20.23" +description = "Type annotations for boto3.SMS 1.20.23 service, generated by mypy-boto3-builder 6.2.1" category = "dev" optional = false python-versions = ">=3.6" @@ -3515,8 +3596,8 @@ python-versions = ">=3.6" [[package]] name = "mypy-boto3-snowball" -version = "1.20.1" -description = "Type annotations for boto3.Snowball 1.20.1 service, generated by mypy-boto3-builder 6.1.2" +version = "1.20.17" +description = "Type annotations for boto3.Snowball 1.20.17 service, generated by mypy-boto3-builder 6.2.1" category = "dev" optional = false python-versions = ">=3.6" @@ -3531,16 +3612,16 @@ python-versions = ">=3.6" [[package]] name = "mypy-boto3-sqs" -version = "1.20.1" -description = "Type annotations for boto3.SQS 1.20.1 service, generated by mypy-boto3-builder 6.1.2" +version = "1.20.12" +description = "Type annotations for boto3.SQS 1.20.12 service, generated by mypy-boto3-builder 6.2.1" category = "dev" optional = false python-versions = ">=3.6" [[package]] name = "mypy-boto3-ssm" -version = "1.20.6" -description = "Type annotations for boto3.SSM 1.20.6 service, generated by mypy-boto3-builder 6.2.0" +version = "1.20.16" +description = "Type annotations for boto3.SSM 1.20.16 service, generated by mypy-boto3-builder 6.2.1" category = "dev" optional = false python-versions = ">=3.6" @@ -3595,24 +3676,24 @@ python-versions = ">=3.6" [[package]] name = "mypy-boto3-storagegateway" -version = "1.20.1" -description = "Type annotations for boto3.StorageGateway 1.20.1 service, generated by mypy-boto3-builder 6.1.2" +version = "1.20.17" +description = "Type annotations for boto3.StorageGateway 1.20.17 service, generated by mypy-boto3-builder 6.2.1" category = "dev" optional = false python-versions = ">=3.6" [[package]] name = "mypy-boto3-sts" -version = "1.20.1" -description = "Type annotations for boto3.STS 1.20.1 service, generated by mypy-boto3-builder 6.1.2" +version = "1.20.12" +description = "Type annotations for boto3.STS 1.20.12 service, generated by mypy-boto3-builder 6.2.1" category = "dev" optional = false python-versions = ">=3.6" [[package]] name = "mypy-boto3-support" -version = "1.20.1" -description = "Type annotations for boto3.Support 1.20.1 service, generated by mypy-boto3-builder 6.1.2" +version = "1.20.22" +description = "Type annotations for boto3.Support 1.20.22 service, generated by mypy-boto3-builder 6.2.1" category = "dev" optional = false python-versions = ">=3.6" @@ -3635,24 +3716,24 @@ python-versions = ">=3.6" [[package]] name = "mypy-boto3-textract" -version = "1.20.1" -description = "Type annotations for boto3.Textract 1.20.1 service, generated by mypy-boto3-builder 6.1.2" +version = "1.20.15" +description = "Type annotations for boto3.Textract 1.20.15 service, generated by mypy-boto3-builder 6.2.1" category = "dev" optional = false python-versions = ">=3.6" [[package]] name = "mypy-boto3-timestream-query" -version = "1.20.1" -description = "Type annotations for boto3.TimestreamQuery 1.20.1 service, generated by mypy-boto3-builder 6.1.2" +version = "1.20.13" +description = "Type annotations for boto3.TimestreamQuery 1.20.13 service, generated by mypy-boto3-builder 6.2.1" category = "dev" optional = false python-versions = ">=3.6" [[package]] name = "mypy-boto3-timestream-write" -version = "1.20.1" -description = "Type annotations for boto3.TimestreamWrite 1.20.1 service, generated by mypy-boto3-builder 6.1.2" +version = "1.20.13" +description = "Type annotations for boto3.TimestreamWrite 1.20.13 service, generated by mypy-boto3-builder 6.2.1" category = "dev" optional = false python-versions = ">=3.6" @@ -3675,8 +3756,8 @@ python-versions = ">=3.6" [[package]] name = "mypy-boto3-translate" -version = "1.20.4" -description = "Type annotations for boto3.Translate 1.20.4 service, generated by mypy-boto3-builder 6.2.0" +version = "1.20.13" +description = "Type annotations for boto3.Translate 1.20.13 service, generated by mypy-boto3-builder 6.2.1" category = "dev" optional = false python-versions = ">=3.6" @@ -3715,8 +3796,8 @@ python-versions = ">=3.6" [[package]] name = "mypy-boto3-wellarchitected" -version = "1.20.1" -description = "Type annotations for boto3.WellArchitected 1.20.1 service, generated by mypy-boto3-builder 6.1.2" +version = "1.20.16" +description = "Type annotations for boto3.WellArchitected 1.20.16 service, generated by mypy-boto3-builder 6.2.1" category = "dev" optional = false python-versions = ">=3.6" @@ -3763,8 +3844,16 @@ python-versions = ">=3.6" [[package]] name = "mypy-boto3-workspaces" -version = "1.20.1" -description = "Type annotations for boto3.WorkSpaces 1.20.1 service, generated by mypy-boto3-builder 6.1.2" +version = "1.20.12" +description = "Type annotations for boto3.WorkSpaces 1.20.12 service, generated by mypy-boto3-builder 6.2.1" +category = "dev" +optional = false +python-versions = ">=3.6" + +[[package]] +name = "mypy-boto3-workspaces-web" +version = "1.20.17" +description = "Type annotations for boto3.WorkSpacesWeb 1.20.17 service, generated by mypy-boto3-builder 6.2.1" category = "dev" optional = false python-versions = ">=3.6" @@ -3904,7 +3993,7 @@ python-versions = "*" [[package]] name = "pylic" -version = "2.1.0" +version = "2.2.0" description = "A Python license checker" category = "dev" optional = false @@ -3965,11 +4054,11 @@ testing = ["fields", "hunter", "process-tests", "six", "pytest-xdist", "virtuale [[package]] name = "pytest-forked" -version = "1.3.0" +version = "1.4.0" description = "run tests in isolated forked subprocesses" category = "dev" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +python-versions = ">=3.6" [package.dependencies] py = "*" @@ -3991,7 +4080,7 @@ dev = ["pre-commit", "tox", "pytest-asyncio"] [[package]] name = "pytest-xdist" -version = "2.4.0" +version = "2.5.0" description = "pytest xdist plugin for distributed testing and loop-on-failing modes" category = "dev" optional = false @@ -3999,7 +4088,7 @@ python-versions = ">=3.6" [package.dependencies] execnet = ">=1.1" -pytest = ">=6.0.0" +pytest = ">=6.2.0" pytest-forked = "*" [package.extras] @@ -4026,14 +4115,6 @@ category = "dev" optional = false python-versions = ">=3.6" -[[package]] -name = "regex" -version = "2021.11.10" -description = "Alternative regular expression module, to replace re." -category = "dev" -optional = false -python-versions = "*" - [[package]] name = "requests" version = "2.26.0" @@ -4225,32 +4306,32 @@ bandit = [ {file = "bandit-1.7.1.tar.gz", hash = "sha256:a81b00b5436e6880fa8ad6799bc830e02032047713cbb143a12939ac67eb756c"}, ] black = [ - {file = "black-21.11b1-py3-none-any.whl", hash = "sha256:802c6c30b637b28645b7fde282ed2569c0cd777dbe493a41b6a03c1d903f99ac"}, - {file = "black-21.11b1.tar.gz", hash = "sha256:a042adbb18b3262faad5aff4e834ff186bb893f95ba3a8013f09de1e5569def2"}, + {file = "black-21.12b0-py3-none-any.whl", hash = "sha256:a615e69ae185e08fdd73e4715e260e2479c861b5740057fde6e8b4e3b7dd589f"}, + {file = "black-21.12b0.tar.gz", hash = "sha256:77b80f693a569e2e527958459634f18df9b0ba2625ba4e0c2d5da5be42e6f2b3"}, ] boto3 = [ - {file = "boto3-1.20.10-py3-none-any.whl", hash = "sha256:e2b5ce2679424a6c2bfc2ee4bb42d9100c8c08b21eff8d74cff85a7243a76d7b"}, - {file = "boto3-1.20.10.tar.gz", hash = "sha256:20a5109a37414a52c55d2048388f02cb7cf46fc0ca7be08b3bf81f4c5c053feb"}, + {file = "boto3-1.20.23-py3-none-any.whl", hash = "sha256:76b3ee0d1dd860c9218bc864cd29f1ee986f6e1e75e8669725dd3c411039379e"}, + {file = "boto3-1.20.23.tar.gz", hash = "sha256:c39cb6ed376ba1d4689ac8f6759a2b2d8a0b0424dbec0cd3af1558079bcf06e8"}, ] boto3-stubs = [ - {file = "boto3-stubs-1.20.10.tar.gz", hash = "sha256:9983da0f5286f76bcbf057a2763513a960810310dde43c89380977be00248025"}, - {file = "boto3_stubs-1.20.10-py3-none-any.whl", hash = "sha256:826aada2127ea9dba16b5ce359f662d76f3b8d1bbdbfd7049357b20c4f2a1975"}, + {file = "boto3-stubs-1.20.23.tar.gz", hash = "sha256:128388a5e1125983f997c0d00d0ab12fcd3224d6bf90d877ab9ffbfd5968fb80"}, + {file = "boto3_stubs-1.20.23-py3-none-any.whl", hash = "sha256:bffad47acf132cdbaf184a6011d8f71846935bb381a84b30eb6c4d30f7f16376"}, ] botocore = [ - {file = "botocore-1.23.10-py3-none-any.whl", hash = "sha256:11670d3ac14eed1122e0154a7e1563c2c270beef43996466f8d11fbf5cf31611"}, - {file = "botocore-1.23.10.tar.gz", hash = "sha256:0adda9a4a95221027312eaaee0ec9fe2239fb2f285fced3ddca54b1310b864ee"}, + {file = "botocore-1.23.23-py3-none-any.whl", hash = "sha256:7459766c4594f3b8877e8013f93f0dc6c6486acbeb7d9c9ae488396529cc2e84"}, + {file = "botocore-1.23.23.tar.gz", hash = "sha256:640b62110aa6d1c25553eceafb5bcd89aedeb84b191598d1f6492ad24374d285"}, ] botocore-stubs = [ - {file = "botocore-stubs-1.23.10.tar.gz", hash = "sha256:7e24c8b61e0a7f9812a19de90d2098d7ae12bca9dab532761fbf821c4d457f29"}, - {file = "botocore_stubs-1.23.10-py3-none-any.whl", hash = "sha256:c85d2635a01014617f455a2e337e64a8d4786b4c9011726c520b5f6abc839c8e"}, + {file = "botocore-stubs-1.23.23.tar.gz", hash = "sha256:2012967265388cbe62fb507e802cb722a84198acdc48a86d311f845626ea6795"}, + {file = "botocore_stubs-1.23.23-py3-none-any.whl", hash = "sha256:67162f09d491aecbc5e3694061bfe1b13634a9f45048c432f3bda6e398173b29"}, ] certifi = [ {file = "certifi-2021.10.8-py2.py3-none-any.whl", hash = "sha256:d62a0163eb4c2344ac042ab2bdf75399a71a2d8c7d47eac2e2ee91b9d6339569"}, {file = "certifi-2021.10.8.tar.gz", hash = "sha256:78884e7c1d4b00ce3cea67b44566851c4343c120abd683433ce934a68ea58872"}, ] charset-normalizer = [ - {file = "charset-normalizer-2.0.7.tar.gz", hash = "sha256:e019de665e2bcf9c2b64e2e5aa025fa991da8720daa3c1138cadd2fd1856aed0"}, - {file = "charset_normalizer-2.0.7-py3-none-any.whl", hash = "sha256:f7af805c321bfa1ce6714c51f254e0d5bb5e5834039bc17db7ebe3a4cec9492b"}, + {file = "charset-normalizer-2.0.9.tar.gz", hash = "sha256:b0b883e8e874edfdece9c28f314e3dd5badf067342e42fb162203335ae61aa2c"}, + {file = "charset_normalizer-2.0.9-py3-none-any.whl", hash = "sha256:1eecaa09422db5be9e29d7fc65664e6c33bd06f9ced7838578ba40d58bdf3721"}, ] cleo = [ {file = "cleo-0.8.1-py2.py3-none-any.whl", hash = "sha256:141cda6dc94a92343be626bb87a0b6c86ae291dfc732a57bf04310d4b4201753"}, @@ -4272,53 +4353,53 @@ colorama = [ {file = "colorama-0.4.4.tar.gz", hash = "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b"}, ] coverage = [ - {file = "coverage-6.1.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:675adb3b3380967806b3cbb9c5b00ceb29b1c472692100a338730c1d3e59c8b9"}, - {file = "coverage-6.1.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:95a58336aa111af54baa451c33266a8774780242cab3704b7698d5e514840758"}, - {file = "coverage-6.1.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:d0a595a781f8e186580ff8e3352dd4953b1944289bec7705377c80c7e36c4d6c"}, - {file = "coverage-6.1.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:d3c5f49ce6af61154060640ad3b3281dbc46e2e0ef2fe78414d7f8a324f0b649"}, - {file = "coverage-6.1.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:310c40bed6b626fd1f463e5a83dba19a61c4eb74e1ac0d07d454ebbdf9047e9d"}, - {file = "coverage-6.1.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:a4d48e42e17d3de212f9af44f81ab73b9378a4b2b8413fd708d0d9023f2bbde4"}, - {file = "coverage-6.1.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:ffa545230ca2ad921ad066bf8fd627e7be43716b6e0fcf8e32af1b8188ccb0ab"}, - {file = "coverage-6.1.2-cp310-cp310-win32.whl", hash = "sha256:cd2d11a59afa5001ff28073ceca24ae4c506da4355aba30d1e7dd2bd0d2206dc"}, - {file = "coverage-6.1.2-cp310-cp310-win_amd64.whl", hash = "sha256:96129e41405887a53a9cc564f960d7f853cc63d178f3a182fdd302e4cab2745b"}, - {file = "coverage-6.1.2-cp311-cp311-macosx_10_14_x86_64.whl", hash = "sha256:1de9c6f5039ee2b1860b7bad2c7bc3651fbeb9368e4c4d93e98a76358cdcb052"}, - {file = "coverage-6.1.2-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:80cb70264e9a1d04b519cdba3cd0dc42847bf8e982a4d55c769b9b0ee7cdce1e"}, - {file = "coverage-6.1.2-cp311-cp311-win_amd64.whl", hash = "sha256:ba6125d4e55c0b8e913dad27b22722eac7abdcb1f3eab1bd090eee9105660266"}, - {file = "coverage-6.1.2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:8492d37acdc07a6eac6489f6c1954026f2260a85a4c2bb1e343fe3d35f5ee21a"}, - {file = "coverage-6.1.2-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:66af99c7f7b64d050d37e795baadf515b4561124f25aae6e1baa482438ecc388"}, - {file = "coverage-6.1.2-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:ebcc03e1acef4ff44f37f3c61df478d6e469a573aa688e5a162f85d7e4c3860d"}, - {file = "coverage-6.1.2-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98d44a8136eebbf544ad91fef5bd2b20ef0c9b459c65a833c923d9aa4546b204"}, - {file = "coverage-6.1.2-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:c18725f3cffe96732ef96f3de1939d81215fd6d7d64900dcc4acfe514ea4fcbf"}, - {file = "coverage-6.1.2-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:c8e9c4bcaaaa932be581b3d8b88b677489975f845f7714efc8cce77568b6711c"}, - {file = "coverage-6.1.2-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:06d009e8a29483cbc0520665bc46035ffe9ae0e7484a49f9782c2a716e37d0a0"}, - {file = "coverage-6.1.2-cp36-cp36m-win32.whl", hash = "sha256:e5432d9c329b11c27be45ee5f62cf20a33065d482c8dec1941d6670622a6fb8f"}, - {file = "coverage-6.1.2-cp36-cp36m-win_amd64.whl", hash = "sha256:82fdcb64bf08aa5db881db061d96db102c77397a570fbc112e21c48a4d9cb31b"}, - {file = "coverage-6.1.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:94f558f8555e79c48c422045f252ef41eb43becdd945e9c775b45ebfc0cbd78f"}, - {file = "coverage-6.1.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:046647b96969fda1ae0605f61288635209dd69dcd27ba3ec0bf5148bc157f954"}, - {file = "coverage-6.1.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:cc799916b618ec9fd00135e576424165691fec4f70d7dc12cfaef09268a2478c"}, - {file = "coverage-6.1.2-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:62646d98cf0381ffda301a816d6ac6c35fc97aa81b09c4c52d66a15c4bef9d7c"}, - {file = "coverage-6.1.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:27a3df08a855522dfef8b8635f58bab81341b2fb5f447819bc252da3aa4cf44c"}, - {file = "coverage-6.1.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:610c0ba11da8de3a753dc4b1f71894f9f9debfdde6559599f303286e70aeb0c2"}, - {file = "coverage-6.1.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:35b246ae3a2c042dc8f410c94bcb9754b18179cdb81ff9477a9089dbc9ecc186"}, - {file = "coverage-6.1.2-cp37-cp37m-win32.whl", hash = "sha256:0cde7d9fe2fb55ff68ebe7fb319ef188e9b88e0a3d1c9c5db7dd829cd93d2193"}, - {file = "coverage-6.1.2-cp37-cp37m-win_amd64.whl", hash = "sha256:958ac66272ff20e63d818627216e3d7412fdf68a2d25787b89a5c6f1eb7fdd93"}, - {file = "coverage-6.1.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:a300b39c3d5905686c75a369d2a66e68fd01472ea42e16b38c948bd02b29e5bd"}, - {file = "coverage-6.1.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d3855d5d26292539861f5ced2ed042fc2aa33a12f80e487053aed3bcb6ced13"}, - {file = "coverage-6.1.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:586d38dfc7da4a87f5816b203ff06dd7c1bb5b16211ccaa0e9788a8da2b93696"}, - {file = "coverage-6.1.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:a34fccb45f7b2d890183a263578d60a392a1a218fdc12f5bce1477a6a68d4373"}, - {file = "coverage-6.1.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:bc1ee1318f703bc6c971da700d74466e9b86e0c443eb85983fb2a1bd20447263"}, - {file = "coverage-6.1.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:3f546f48d5d80a90a266769aa613bc0719cb3e9c2ef3529d53f463996dd15a9d"}, - {file = "coverage-6.1.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:fd92ece726055e80d4e3f01fff3b91f54b18c9c357c48fcf6119e87e2461a091"}, - {file = "coverage-6.1.2-cp38-cp38-win32.whl", hash = "sha256:24ed38ec86754c4d5a706fbd5b52b057c3df87901a8610d7e5642a08ec07087e"}, - {file = "coverage-6.1.2-cp38-cp38-win_amd64.whl", hash = "sha256:97ef6e9119bd39d60ef7b9cd5deea2b34869c9f0b9777450a7e3759c1ab09b9b"}, - {file = "coverage-6.1.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6e5a8c947a2a89c56655ecbb789458a3a8e3b0cbf4c04250331df8f647b3de59"}, - {file = "coverage-6.1.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7a39590d1e6acf6a3c435c5d233f72f5d43b585f5be834cff1f21fec4afda225"}, - {file = "coverage-6.1.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:9d2c2e3ce7b8cc932a2f918186964bd44de8c84e2f9ef72dc616f5bb8be22e71"}, - {file = "coverage-6.1.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:3348865798c077c695cae00da0924136bb5cc501f236cfd6b6d9f7a3c94e0ec4"}, - {file = "coverage-6.1.2-cp39-cp39-win32.whl", hash = "sha256:fae3fe111670e51f1ebbc475823899524e3459ea2db2cb88279bbfb2a0b8a3de"}, - {file = "coverage-6.1.2-cp39-cp39-win_amd64.whl", hash = "sha256:af45eea024c0e3a25462fade161afab4f0d9d9e0d5a5d53e86149f74f0a35ecc"}, - {file = "coverage-6.1.2-pp36.pp37.pp38-none-any.whl", hash = "sha256:eab14fdd410500dae50fd14ccc332e65543e7b39f6fc076fe90603a0e5d2f929"}, - {file = "coverage-6.1.2.tar.gz", hash = "sha256:d9a635114b88c0ab462e0355472d00a180a5fbfd8511e7f18e4ac32652e7d972"}, + {file = "coverage-6.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6dbc1536e105adda7a6312c778f15aaabe583b0e9a0b0a324990334fd458c94b"}, + {file = "coverage-6.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:174cf9b4bef0db2e8244f82059a5a72bd47e1d40e71c68ab055425172b16b7d0"}, + {file = "coverage-6.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:92b8c845527eae547a2a6617d336adc56394050c3ed8a6918683646328fbb6da"}, + {file = "coverage-6.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:c7912d1526299cb04c88288e148c6c87c0df600eca76efd99d84396cfe00ef1d"}, + {file = "coverage-6.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d5d2033d5db1d58ae2d62f095e1aefb6988af65b4b12cb8987af409587cc0739"}, + {file = "coverage-6.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:3feac4084291642165c3a0d9eaebedf19ffa505016c4d3db15bfe235718d4971"}, + {file = "coverage-6.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:276651978c94a8c5672ea60a2656e95a3cce2a3f31e9fb2d5ebd4c215d095840"}, + {file = "coverage-6.2-cp310-cp310-win32.whl", hash = "sha256:f506af4f27def639ba45789fa6fde45f9a217da0be05f8910458e4557eed020c"}, + {file = "coverage-6.2-cp310-cp310-win_amd64.whl", hash = "sha256:3f7c17209eef285c86f819ff04a6d4cbee9b33ef05cbcaae4c0b4e8e06b3ec8f"}, + {file = "coverage-6.2-cp311-cp311-macosx_10_14_x86_64.whl", hash = "sha256:13362889b2d46e8d9f97c421539c97c963e34031ab0cb89e8ca83a10cc71ac76"}, + {file = "coverage-6.2-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:22e60a3ca5acba37d1d4a2ee66e051f5b0e1b9ac950b5b0cf4aa5366eda41d47"}, + {file = "coverage-6.2-cp311-cp311-win_amd64.whl", hash = "sha256:b637c57fdb8be84e91fac60d9325a66a5981f8086c954ea2772efe28425eaf64"}, + {file = "coverage-6.2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f467bbb837691ab5a8ca359199d3429a11a01e6dfb3d9dcc676dc035ca93c0a9"}, + {file = "coverage-6.2-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2641f803ee9f95b1f387f3e8f3bf28d83d9b69a39e9911e5bfee832bea75240d"}, + {file = "coverage-6.2-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:1219d760ccfafc03c0822ae2e06e3b1248a8e6d1a70928966bafc6838d3c9e48"}, + {file = "coverage-6.2-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:9a2b5b52be0a8626fcbffd7e689781bf8c2ac01613e77feda93d96184949a98e"}, + {file = "coverage-6.2-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:8e2c35a4c1f269704e90888e56f794e2d9c0262fb0c1b1c8c4ee44d9b9e77b5d"}, + {file = "coverage-6.2-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:5d6b09c972ce9200264c35a1d53d43ca55ef61836d9ec60f0d44273a31aa9f17"}, + {file = "coverage-6.2-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:e3db840a4dee542e37e09f30859f1612da90e1c5239a6a2498c473183a50e781"}, + {file = "coverage-6.2-cp36-cp36m-win32.whl", hash = "sha256:4e547122ca2d244f7c090fe3f4b5a5861255ff66b7ab6d98f44a0222aaf8671a"}, + {file = "coverage-6.2-cp36-cp36m-win_amd64.whl", hash = "sha256:01774a2c2c729619760320270e42cd9e797427ecfddd32c2a7b639cdc481f3c0"}, + {file = "coverage-6.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:fb8b8ee99b3fffe4fd86f4c81b35a6bf7e4462cba019997af2fe679365db0c49"}, + {file = "coverage-6.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:619346d57c7126ae49ac95b11b0dc8e36c1dd49d148477461bb66c8cf13bb521"}, + {file = "coverage-6.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0a7726f74ff63f41e95ed3a89fef002916c828bb5fcae83b505b49d81a066884"}, + {file = "coverage-6.2-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:cfd9386c1d6f13b37e05a91a8583e802f8059bebfccde61a418c5808dea6bbfa"}, + {file = "coverage-6.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:17e6c11038d4ed6e8af1407d9e89a2904d573be29d51515f14262d7f10ef0a64"}, + {file = "coverage-6.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c254b03032d5a06de049ce8bca8338a5185f07fb76600afff3c161e053d88617"}, + {file = "coverage-6.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:dca38a21e4423f3edb821292e97cec7ad38086f84313462098568baedf4331f8"}, + {file = "coverage-6.2-cp37-cp37m-win32.whl", hash = "sha256:600617008aa82032ddeace2535626d1bc212dfff32b43989539deda63b3f36e4"}, + {file = "coverage-6.2-cp37-cp37m-win_amd64.whl", hash = "sha256:bf154ba7ee2fd613eb541c2bc03d3d9ac667080a737449d1a3fb342740eb1a74"}, + {file = "coverage-6.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f9afb5b746781fc2abce26193d1c817b7eb0e11459510fba65d2bd77fe161d9e"}, + {file = "coverage-6.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:edcada2e24ed68f019175c2b2af2a8b481d3d084798b8c20d15d34f5c733fa58"}, + {file = "coverage-6.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:a9c8c4283e17690ff1a7427123ffb428ad6a52ed720d550e299e8291e33184dc"}, + {file = "coverage-6.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f614fc9956d76d8a88a88bb41ddc12709caa755666f580af3a688899721efecd"}, + {file = "coverage-6.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:9365ed5cce5d0cf2c10afc6add145c5037d3148585b8ae0e77cc1efdd6aa2953"}, + {file = "coverage-6.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:8bdfe9ff3a4ea37d17f172ac0dff1e1c383aec17a636b9b35906babc9f0f5475"}, + {file = "coverage-6.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:63c424e6f5b4ab1cf1e23a43b12f542b0ec2e54f99ec9f11b75382152981df57"}, + {file = "coverage-6.2-cp38-cp38-win32.whl", hash = "sha256:49dbff64961bc9bdd2289a2bda6a3a5a331964ba5497f694e2cbd540d656dc1c"}, + {file = "coverage-6.2-cp38-cp38-win_amd64.whl", hash = "sha256:9a29311bd6429be317c1f3fe4bc06c4c5ee45e2fa61b2a19d4d1d6111cb94af2"}, + {file = "coverage-6.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:03b20e52b7d31be571c9c06b74746746d4eb82fc260e594dc662ed48145e9efd"}, + {file = "coverage-6.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:215f8afcc02a24c2d9a10d3790b21054b58d71f4b3c6f055d4bb1b15cecce685"}, + {file = "coverage-6.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:a4bdeb0a52d1d04123b41d90a4390b096f3ef38eee35e11f0b22c2d031222c6c"}, + {file = "coverage-6.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:c332d8f8d448ded473b97fefe4a0983265af21917d8b0cdcb8bb06b2afe632c3"}, + {file = "coverage-6.2-cp39-cp39-win32.whl", hash = "sha256:6e1394d24d5938e561fbeaa0cd3d356207579c28bd1792f25a068743f2d5b282"}, + {file = "coverage-6.2-cp39-cp39-win_amd64.whl", hash = "sha256:86f2e78b1eff847609b1ca8050c9e1fa3bd44ce755b2ec30e70f2d3ba3844644"}, + {file = "coverage-6.2-pp36.pp37.pp38-none-any.whl", hash = "sha256:5829192582c0ec8ca4a2532407bc14c2f338d9878a10442f5d03804a95fac9de"}, + {file = "coverage-6.2.tar.gz", hash = "sha256:e2cad8093172b7d1595b4ad66f24270808658e11acf43a8f95b41276162eb5b8"}, ] crashtest = [ {file = "crashtest-0.3.1-py3-none-any.whl", hash = "sha256:300f4b0825f57688b47b6d70c6a31de33512eb2fa1ac614f780939aa0cf91680"}, @@ -4351,8 +4432,8 @@ flake8 = [ {file = "flake8-3.9.2.tar.gz", hash = "sha256:07528381786f2a6237b061f6e96610a4167b226cb926e2aa2b6b1d78057c576b"}, ] flake8-2020 = [ - {file = "flake8_2020-1.6.0-py2.py3-none-any.whl", hash = "sha256:e464cef7889117e7ae7253e35fcb8272bd8ae68fc10bb3399ef85b036c092528"}, - {file = "flake8_2020-1.6.0.tar.gz", hash = "sha256:3e438d9d531577fbb9332bbd0bf394eca890f3b7a5311e2278fb3582381a2f13"}, + {file = "flake8_2020-1.6.1-py2.py3-none-any.whl", hash = "sha256:efcc056fb723e1ea5307e3b663c7c328f1c23a5ff0a0fd3be695a918d8245c3a"}, + {file = "flake8_2020-1.6.1.tar.gz", hash = "sha256:db523e3383befc17c895219551ff6c9b2f6e0a5cae4c7739ea65a2238bdc6f74"}, ] flake8-annotations-complexity = [ {file = "flake8_annotations_complexity-0.0.6-py3-none-any.whl", hash = "sha256:078a84e8269ef82c4c9de5198638e9a91a2089307d4e559666464a87b528ea69"}, @@ -4370,8 +4451,8 @@ flake8-broken-line = [ {file = "flake8_broken_line-0.3.0-py3-none-any.whl", hash = "sha256:611f79c7f27118e7e5d3dc098ef7681c40aeadf23783700c5dbee840d2baf3af"}, ] flake8-bugbear = [ - {file = "flake8-bugbear-21.9.2.tar.gz", hash = "sha256:db9a09893a6c649a197f5350755100bb1dd84f110e60cf532fdfa07e41808ab2"}, - {file = "flake8_bugbear-21.9.2-py36.py37.py38-none-any.whl", hash = "sha256:4f7eaa6f05b7d7ea4cbbde93f7bcdc5438e79320fa1ec420d860c181af38b769"}, + {file = "flake8-bugbear-21.11.29.tar.gz", hash = "sha256:8b04cb2fafc6a78e1a9d873bd3988e4282f7959bb6b0d7c1ae648ec09b937a7b"}, + {file = "flake8_bugbear-21.11.29-py36.py37.py38-none-any.whl", hash = "sha256:179e41ddae5de5e3c20d1f61736feeb234e70958fbb56ab3c28a67739c8e9a82"}, ] flake8-builtins = [ {file = "flake8-builtins-1.5.3.tar.gz", hash = "sha256:09998853b2405e98e61d2ff3027c47033adbdc17f9fe44ca58443d876eb00f3b"}, @@ -4534,8 +4615,8 @@ mccabe = [ {file = "mccabe-0.6.1.tar.gz", hash = "sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f"}, ] more-itertools = [ - {file = "more-itertools-8.11.0.tar.gz", hash = "sha256:0a2fd25d343c08d7e7212071820e7e7ea2f41d8fb45d6bc8a00cd6ce3b7aab88"}, - {file = "more_itertools-8.11.0-py3-none-any.whl", hash = "sha256:88afff98d83d08fe5e4049b81e2b54c06ebb6b3871a600040865c7a592061cbb"}, + {file = "more-itertools-8.12.0.tar.gz", hash = "sha256:7dc6ad46f05f545f900dd59e8dfb4e84a4827b97b3cfecb175ea0c7d247f6064"}, + {file = "more_itertools-8.12.0-py3-none-any.whl", hash = "sha256:43e6dd9942dffd72661a2c4ef383ad7da1e6a3e968a927ad7a6083ab410a688b"}, ] mr-proper = [ {file = "mr_proper-0.0.7-py3-none-any.whl", hash = "sha256:74a1b60240c46f10ba518707ef72811a01e5c270da0a78b5dd2dd923d99fdb14"}, @@ -4567,8 +4648,8 @@ mypy = [ {file = "mypy-0.910.tar.gz", hash = "sha256:704098302473cb31a218f1775a873b376b30b4c18229421e9e9dc8916fd16150"}, ] mypy-boto3-accessanalyzer = [ - {file = "mypy-boto3-accessanalyzer-1.20.1.tar.gz", hash = "sha256:646f95a38586a8d17c4253859f30897141869e4eab65d3790c8fe1bb581aee64"}, - {file = "mypy_boto3_accessanalyzer-1.20.1-py3-none-any.whl", hash = "sha256:31656fa0f3876af071f7eabf99218ee6f3c40deab57d241136b3764273fc1aaf"}, + {file = "mypy-boto3-accessanalyzer-1.20.17.tar.gz", hash = "sha256:b31cfddb0339a4db7969beeea34c3ca2a6992ad9d4fba42c09efc8aabceba53e"}, + {file = "mypy_boto3_accessanalyzer-1.20.17-py3-none-any.whl", hash = "sha256:36f49b9320317875b459cae7890850be027b709afc5e444436c1d3ab730734ed"}, ] mypy-boto3-account = [ {file = "mypy-boto3-account-1.20.1.tar.gz", hash = "sha256:611e8a99e1638ba6dab17a39bd5364061ac257aea2751ec8e5de076facd1ac70"}, @@ -4598,6 +4679,10 @@ mypy-boto3-amplifybackend = [ {file = "mypy-boto3-amplifybackend-1.20.8.tar.gz", hash = "sha256:08746360cf8708612dc78ff1ec510ffd0a6d520b1703c7c15117b69dbd8e6885"}, {file = "mypy_boto3_amplifybackend-1.20.8-py3-none-any.whl", hash = "sha256:cf1bb60e8f755206022efe09da4cf7df54b7556d179c1d04a9565a0d65370091"}, ] +mypy-boto3-amplifyuibuilder = [ + {file = "mypy-boto3-amplifyuibuilder-1.20.19.tar.gz", hash = "sha256:21ffd24068c5512ff3c43f226fe843ed7e87b0f64737a11ed1f2498d6d0547ee"}, + {file = "mypy_boto3_amplifyuibuilder-1.20.19-py3-none-any.whl", hash = "sha256:f3c025388ec8130eade8a82901f095889a09e2bd7fafd27a5f274ef1b366ad26"}, +] mypy-boto3-apigateway = [ {file = "mypy-boto3-apigateway-1.20.8.tar.gz", hash = "sha256:04f96a8a958bc7707f53ec1aac953caf734f6424e32bd643d824ea43228671ce"}, {file = "mypy_boto3_apigateway-1.20.8-py3-none-any.whl", hash = "sha256:99fb2d68d4ed5780236fc370c20791dfdead6e63e7f3637add510ca6c0cb8164"}, @@ -4651,8 +4736,8 @@ mypy-boto3-appstream = [ {file = "mypy_boto3_appstream-1.20.10-py3-none-any.whl", hash = "sha256:111b38f1c0b2c9ef436f88029594c3f458e9535256b94f9f60e17306ec0eab4a"}, ] mypy-boto3-appsync = [ - {file = "mypy-boto3-appsync-1.20.1.tar.gz", hash = "sha256:8cefb3635c53bfbbbaee3b3eacd51df173446e38adc363c9b0359731ee8b2694"}, - {file = "mypy_boto3_appsync-1.20.1-py3-none-any.whl", hash = "sha256:4775d085aca452be7a53ddcc195fbc792cc803d786119c7507ca2a04c5c14e7a"}, + {file = "mypy-boto3-appsync-1.20.21.tar.gz", hash = "sha256:8447140744df71bf480266f8eba5873fb2e004026172feb318e2058b4f3faae1"}, + {file = "mypy_boto3_appsync-1.20.21-py3-none-any.whl", hash = "sha256:33a1238919e88a305b30b8229576db2ad2e79d6ce1fb6468754c3b66be447cdb"}, ] mypy-boto3-athena = [ {file = "mypy-boto3-athena-1.20.1.tar.gz", hash = "sha256:747b7167a9656a7aebb0b8b2483f8521767489b42bc47017171c8d73fa699428"}, @@ -4663,24 +4748,28 @@ mypy-boto3-auditmanager = [ {file = "mypy_boto3_auditmanager-1.20.9-py3-none-any.whl", hash = "sha256:8fd88f7dff74213b1b0f8eea56e3cb7926bebf1dc4a1895a77c0c0a0f0eb6d96"}, ] mypy-boto3-autoscaling = [ - {file = "mypy-boto3-autoscaling-1.20.1.tar.gz", hash = "sha256:bd54230521676ed736264ff9f782016b8617453f121c755cc4b26befe5648b47"}, - {file = "mypy_boto3_autoscaling-1.20.1-py3-none-any.whl", hash = "sha256:63babec396e6d7d821a7537748580254ee11af4e49b4b2b2c6b2e8e52ca967e6"}, + {file = "mypy-boto3-autoscaling-1.20.14.tar.gz", hash = "sha256:470d51985240c9ccb5f7899c1913a84cc6496e03e6caf88505d46fb75a37b7ef"}, + {file = "mypy_boto3_autoscaling-1.20.14-py3-none-any.whl", hash = "sha256:fdc67f00f8b55c307d3184288d5fa3ef6cdc05a020a78ff3b9e85f5f2a566ed1"}, ] mypy-boto3-autoscaling-plans = [ {file = "mypy-boto3-autoscaling-plans-1.20.1.tar.gz", hash = "sha256:c29c508f92bc0ed1ea362d34697509cf3bb974a4657758ad814fdd7ecad9dfdd"}, {file = "mypy_boto3_autoscaling_plans-1.20.1-py3-none-any.whl", hash = "sha256:b6110e49e2bf6e08927fb5932afcc0ad98fd0415fd263fadafae246d12b8e42c"}, ] mypy-boto3-backup = [ - {file = "mypy-boto3-backup-1.20.3.tar.gz", hash = "sha256:f2e1a08a7d7fd3a4ddad40249775624e0f7d07fb1efc3d0545b7b6aa900f1bda"}, - {file = "mypy_boto3_backup-1.20.3-py3-none-any.whl", hash = "sha256:d49e9d4bf46e41e3a3e0f3ba9bcc86431994da7c1fb8bba0111588c0c9f3e42c"}, + {file = "mypy-boto3-backup-1.20.12.tar.gz", hash = "sha256:1bc07af20de48dc2baf6b81f7420620cbc2e170275dbdfcb898727970de49279"}, + {file = "mypy_boto3_backup-1.20.12-py3-none-any.whl", hash = "sha256:c14b30bf90e2d258639d79b1566aa1fba1b9d1570a7691f691614d2adc1a6148"}, +] +mypy-boto3-backup-gateway = [ + {file = "mypy-boto3-backup-gateway-1.20.17.tar.gz", hash = "sha256:e60840a5731dd9a24517862c098029a355391c0181166d8391441fdec9052b8f"}, + {file = "mypy_boto3_backup_gateway-1.20.17-py3-none-any.whl", hash = "sha256:cba15dee0f047d8b555c8c47827058151f7a1e362f951e4dba1bad4f8bf7a946"}, ] mypy-boto3-batch = [ {file = "mypy-boto3-batch-1.20.10.tar.gz", hash = "sha256:d8a3e2c511082b678167cf82c52abbd4c8e737143308665c11323c2caaae4f24"}, {file = "mypy_boto3_batch-1.20.10-py3-none-any.whl", hash = "sha256:03579be59c96f5ce7276c55436486970a686171b1a37d78b516eeb75a2f8c429"}, ] mypy-boto3-braket = [ - {file = "mypy-boto3-braket-1.20.1.tar.gz", hash = "sha256:c8ccd04acd92388b8a29fc74beb86833deac219ae9942dd5598ecf9aacdc70cb"}, - {file = "mypy_boto3_braket-1.20.1-py3-none-any.whl", hash = "sha256:9ba58bdeeee94af757f2592918ce615fc7a88b256c6919be4df0f22cb1c074c3"}, + {file = "mypy-boto3-braket-1.20.11.tar.gz", hash = "sha256:a3eac861b896e2ee1e95b489f0e288ddd980521741c239c7554b687485d2b985"}, + {file = "mypy_boto3_braket-1.20.11-py3-none-any.whl", hash = "sha256:18a2b6f26c1c6c8696e8eeb583031947e40818d37a059e7f19d9a2e68e2b73d2"}, ] mypy-boto3-budgets = [ {file = "mypy-boto3-budgets-1.20.1.tar.gz", hash = "sha256:f7316a02649d386c2d354fe8b865206bbf31e42b0f3688afdc133fe72b45141d"}, @@ -4699,8 +4788,8 @@ mypy-boto3-chime-sdk-identity = [ {file = "mypy_boto3_chime_sdk_identity-1.20.1-py3-none-any.whl", hash = "sha256:4ba3345c00ed6db96c02195586079ab78f93e1bf812d3b32225963c2c7111273"}, ] mypy-boto3-chime-sdk-meetings = [ - {file = "mypy-boto3-chime-sdk-meetings-1.20.9.tar.gz", hash = "sha256:101d3fc0c05e8c4ec3d82284b9e6c70702c478e87facbbf940cfdd9d1f952f5f"}, - {file = "mypy_boto3_chime_sdk_meetings-1.20.9-py3-none-any.whl", hash = "sha256:a740287e99c06a95f3bdf1ccb49b561f5c0493dfa6bc6f3ce48b4f16b9c14568"}, + {file = "mypy-boto3-chime-sdk-meetings-1.20.11.tar.gz", hash = "sha256:da282d1971421483cfa1d2836981a53f71581856a39d91eb9fd11f9d8d61fcfc"}, + {file = "mypy_boto3_chime_sdk_meetings-1.20.11-py3-none-any.whl", hash = "sha256:424ee0e244de5898e1e4e0b499aad441680c8e8f3b55af0f42ea7f794c9b869c"}, ] mypy-boto3-chime-sdk-messaging = [ {file = "mypy-boto3-chime-sdk-messaging-1.20.1.tar.gz", hash = "sha256:b65895e96f9f402fd7bcc4b120dfa1f2a32dfb405fbebc718d0af3690764ae2c"}, @@ -4719,8 +4808,8 @@ mypy-boto3-clouddirectory = [ {file = "mypy_boto3_clouddirectory-1.20.1-py3-none-any.whl", hash = "sha256:fb4b0e6bfe791e047ddafffc78a4e6afe1bae16cd257f0c53909ab378c25dfef"}, ] mypy-boto3-cloudformation = [ - {file = "mypy-boto3-cloudformation-1.20.10.tar.gz", hash = "sha256:1dd812d3015a5b3f1f1e28b0addae32010e3febc9917de8eaa11f7fa629a4c76"}, - {file = "mypy_boto3_cloudformation-1.20.10-py3-none-any.whl", hash = "sha256:4b5ff3795588bcd5479ef6167fcf33371a03f5d795bbe1e22487e89d4f2b1329"}, + {file = "mypy-boto3-cloudformation-1.20.11.tar.gz", hash = "sha256:763b2d69eda46ac05cd533efba26fc1854e627a1cb844bfd941d88201d325953"}, + {file = "mypy_boto3_cloudformation-1.20.11-py3-none-any.whl", hash = "sha256:57052da7bf7e2eb966e4bda37be9828be7f11fdc67337bd59bbfb98d8e222319"}, ] mypy-boto3-cloudfront = [ {file = "mypy-boto3-cloudfront-1.20.1.tar.gz", hash = "sha256:01b2c65fa522c56bf15f540558d6a15465591a0b8848e417c877628c5299accd"}, @@ -4807,20 +4896,20 @@ mypy-boto3-comprehend = [ {file = "mypy_boto3_comprehend-1.20.1-py3-none-any.whl", hash = "sha256:16e4fd9db16f60d70abfdec7b5d7c535073e011a7986f2836ec8692e0e537dbb"}, ] mypy-boto3-comprehendmedical = [ - {file = "mypy-boto3-comprehendmedical-1.20.1.tar.gz", hash = "sha256:7bf6a8fcc01bd2b1ef881eb92449f20982597fa67ed625e3193d69d9fe7c7cde"}, - {file = "mypy_boto3_comprehendmedical-1.20.1-py3-none-any.whl", hash = "sha256:0bc9204c37c977c5b3d68a581f6107dd5c15043b714d557b2e9b8a4be763578c"}, + {file = "mypy-boto3-comprehendmedical-1.20.22.tar.gz", hash = "sha256:27c3426de8bf82a03e09742997cd05bfded79f7484ae180a0906df54635e842c"}, + {file = "mypy_boto3_comprehendmedical-1.20.22-py3-none-any.whl", hash = "sha256:ffc574b92a69b372db30c13aa8cf04af968c8113626977938b34e260229db730"}, ] mypy-boto3-compute-optimizer = [ - {file = "mypy-boto3-compute-optimizer-1.20.1.tar.gz", hash = "sha256:b5a3a73fe8b65c16847cc051a7043a5b830d5fbfc3559ce6d25fedd7968a7af1"}, - {file = "mypy_boto3_compute_optimizer-1.20.1-py3-none-any.whl", hash = "sha256:f3eef02fc822ec737e2fe8fc394b2cae92abb75814cd0a6af05e0d84e9635c68"}, + {file = "mypy-boto3-compute-optimizer-1.20.16.tar.gz", hash = "sha256:67c89adbf09240a796a76647c6cba994391ceb14d4c5aa2f5643977ddcf1c3fc"}, + {file = "mypy_boto3_compute_optimizer-1.20.16-py3-none-any.whl", hash = "sha256:23d90efe89cd93a1a053d48068ba6b037b6c7915dee1af2c42ea335cc15d1321"}, ] mypy-boto3-config = [ {file = "mypy-boto3-config-1.20.1.tar.gz", hash = "sha256:7ca4ad191d303185f2a261034ef45df6cb253d17eb700c0b522f9a3835fdd33f"}, {file = "mypy_boto3_config-1.20.1-py3-none-any.whl", hash = "sha256:5d642abd8293d3ca081f2177f1409ff0f7a8850a52e55c858892176c741f43fb"}, ] mypy-boto3-connect = [ - {file = "mypy-boto3-connect-1.20.5.tar.gz", hash = "sha256:b87aa8a83cb1d66e0b82b39d251a60e5888c2604edb8504208fbc297a0d28733"}, - {file = "mypy_boto3_connect-1.20.5-py3-none-any.whl", hash = "sha256:c91220aae30cf3d7f057b236e983ae57852bce8916c279ef807dd5dd3288cb8d"}, + {file = "mypy-boto3-connect-1.20.11.tar.gz", hash = "sha256:8c066edf520e7cbddae8dc8b9669f5cb511aedf820fe0df685ccbdd4a464739a"}, + {file = "mypy_boto3_connect-1.20.11-py3-none-any.whl", hash = "sha256:3d1698d6384efbf536f36d796b5f569175ad92a4ec6b37e85c39449b111fdc6d"}, ] mypy-boto3-connect-contact-lens = [ {file = "mypy-boto3-connect-contact-lens-1.20.1.tar.gz", hash = "sha256:c04df80e93ba63f12d34d40adaa76c24b25c68271cb052d47140fceebf77b14f"}, @@ -4835,16 +4924,16 @@ mypy-boto3-cur = [ {file = "mypy_boto3_cur-1.20.1-py3-none-any.whl", hash = "sha256:659525122936e00d9d122e064d728c83e9f01c15940ea4ba677fff78fe4f4357"}, ] mypy-boto3-customer-profiles = [ - {file = "mypy-boto3-customer-profiles-1.20.1.tar.gz", hash = "sha256:66468e296fe72772696352fad458bdebb56ed1889f5a225e9eb9a152623bd814"}, - {file = "mypy_boto3_customer_profiles-1.20.1-py3-none-any.whl", hash = "sha256:bf368a7986bb89f94f89a213c70780dd1df59e522909622d4a86ea4a926d154c"}, + {file = "mypy-boto3-customer-profiles-1.20.13.tar.gz", hash = "sha256:7d4625e783aaadfd348e4fcb9b200b430dcebd57992dc7bf3a02cb67ae2cc634"}, + {file = "mypy_boto3_customer_profiles-1.20.13-py3-none-any.whl", hash = "sha256:fd4b419061dd1c77cfb6b6481ccae6289c80bf6f1472c338c08566a9ff3e5f7a"}, ] mypy-boto3-databrew = [ {file = "mypy-boto3-databrew-1.20.9.tar.gz", hash = "sha256:d86aea29554c871a12770fa4fcb54f671bbccf7beacf1cf6c04bb08fab57e371"}, {file = "mypy_boto3_databrew-1.20.9-py3-none-any.whl", hash = "sha256:719ebbdde7d7fc79513ca712006f497a28a7ad7ca9e4a6f94cf05b945a8e1284"}, ] mypy-boto3-dataexchange = [ - {file = "mypy-boto3-dataexchange-1.20.1.tar.gz", hash = "sha256:015470cee97decacdb8bd2f6a32a0a47b9c43a70914e054103887c1eaea6c713"}, - {file = "mypy_boto3_dataexchange-1.20.1-py3-none-any.whl", hash = "sha256:e9c7dbf37bcf6e5d7fa6e09839f8e04a20f13fab8d452745334ef4d285c8739c"}, + {file = "mypy-boto3-dataexchange-1.20.16.tar.gz", hash = "sha256:205578d78925b42ea10f1c572e163aa047e9b3c2a336378f9a3a6415fdadaa3f"}, + {file = "mypy_boto3_dataexchange-1.20.16-py3-none-any.whl", hash = "sha256:ca4445877bc4f2ee919738d7331839e038ae4cc0a350c3f10d169189b6d32b61"}, ] mypy-boto3-datapipeline = [ {file = "mypy-boto3-datapipeline-1.20.1.tar.gz", hash = "sha256:2874a7f6208a878c97f6035a5948df0b7f2a45410c683434919f1323cd88d4a2"}, @@ -4867,12 +4956,12 @@ mypy-boto3-devicefarm = [ {file = "mypy_boto3_devicefarm-1.20.1-py3-none-any.whl", hash = "sha256:b7ba9bdda3565113a6a3393c2eb6dbbf2c394c41b4f1e7b4115ff9f5b935015a"}, ] mypy-boto3-devops-guru = [ - {file = "mypy-boto3-devops-guru-1.20.5.tar.gz", hash = "sha256:b2890f6622dbff4a2fa0cdc2e84676d48b0379ded458137bbb0876b4b306e72f"}, - {file = "mypy_boto3_devops_guru-1.20.5-py3-none-any.whl", hash = "sha256:3b83f27c3fd9c8a9685254457ff555263e9a43f1e7fd0a7c61abc55082a474a9"}, + {file = "mypy-boto3-devops-guru-1.20.18.tar.gz", hash = "sha256:f498a07feec9a039b1ac8650da06d449ecfc374e0ecaedc4990b9626ae22dc6c"}, + {file = "mypy_boto3_devops_guru-1.20.18-py3-none-any.whl", hash = "sha256:67047727dd6f970988e3213d9f81587333da86f0ecd960cd0d4d5dc54f925dff"}, ] mypy-boto3-directconnect = [ - {file = "mypy-boto3-directconnect-1.20.1.tar.gz", hash = "sha256:078566fdc289b40e30a671699e0818e6c5d70dc926a5272f2bcd3fd1eebaea24"}, - {file = "mypy_boto3_directconnect-1.20.1-py3-none-any.whl", hash = "sha256:d9c3f4e5ed8682786aded8c7086353df1c174b7613f8e94115c38cf216385874"}, + {file = "mypy-boto3-directconnect-1.20.18.tar.gz", hash = "sha256:19db327164b76b48b9b35e424ac56ba4bed6314bc4105fa31ad32b99e8641ed0"}, + {file = "mypy_boto3_directconnect-1.20.18-py3-none-any.whl", hash = "sha256:97b92e581cf126ce27fec9484d76fe57185c0ce9efce6a6075291f0e0738130c"}, ] mypy-boto3-discovery = [ {file = "mypy-boto3-discovery-1.20.1.tar.gz", hash = "sha256:155eac55e97a9101a024d64c35e9413ae64b9a40fbf2e1a975715d7367f7ff5d"}, @@ -4883,8 +4972,8 @@ mypy-boto3-dlm = [ {file = "mypy_boto3_dlm-1.20.1-py3-none-any.whl", hash = "sha256:c4276a3d5b916f8e4c239b9dc6c31ba65c4611fc2d96571ac50dd53379c07739"}, ] mypy-boto3-dms = [ - {file = "mypy-boto3-dms-1.20.6.tar.gz", hash = "sha256:1da61b7f5d620770b0e4252359796a3c2f540e470b62cc26658652f15ff8f6c9"}, - {file = "mypy_boto3_dms-1.20.6-py3-none-any.whl", hash = "sha256:3f452cbd40368d7664df77001066373cb9c00b7f7cd3730217420dc90135a08f"}, + {file = "mypy-boto3-dms-1.20.11.tar.gz", hash = "sha256:c1460076c71a9530f91c0880fc24db1344bfe2e4de757b4568439aff867e1126"}, + {file = "mypy_boto3_dms-1.20.11-py3-none-any.whl", hash = "sha256:d39917182cfbac8191073b3d654ea6d09f5846e6296d3d3896d1d89f0c88d60d"}, ] mypy-boto3-docdb = [ {file = "mypy-boto3-docdb-1.20.1.tar.gz", hash = "sha256:8f0e894de5600c205e3655b4698469fdbf4b4c4725de97e6632df17294688936"}, @@ -4899,8 +4988,8 @@ mypy-boto3-ds = [ {file = "mypy_boto3_ds-1.20.1-py3-none-any.whl", hash = "sha256:ebe5645da27579eeb8666817039fd15e937cf943ab70d75db2163b7649c9e180"}, ] mypy-boto3-dynamodb = [ - {file = "mypy-boto3-dynamodb-1.20.4.tar.gz", hash = "sha256:f82e4a82ca6492e415d3c44103790bccf51c95804a44416feddd19baa1054a70"}, - {file = "mypy_boto3_dynamodb-1.20.4-py3-none-any.whl", hash = "sha256:3aa686949deb6254d3797d40ba5423a387f8aec7060b8cf542e2df2a2f4bd26d"}, + {file = "mypy-boto3-dynamodb-1.20.18.tar.gz", hash = "sha256:c01bf21384993adb7fdb57451826cbc6bee6c8602276295d9aee6d930f9e908a"}, + {file = "mypy_boto3_dynamodb-1.20.18-py3-none-any.whl", hash = "sha256:80b39a75b42937ed15ce6d333ede77f4b03273627b46999e6068383e7ae8b6dc"}, ] mypy-boto3-dynamodbstreams = [ {file = "mypy-boto3-dynamodbstreams-1.20.1.tar.gz", hash = "sha256:819abc44725ad02be5c7fec73a3723b39bf84d713c19593d91a923f1cf946054"}, @@ -4911,40 +5000,40 @@ mypy-boto3-ebs = [ {file = "mypy_boto3_ebs-1.20.1-py3-none-any.whl", hash = "sha256:4ee35353f67fece81291673b2a982fb6507c153c692643b48d7f7e15c3bdc55c"}, ] mypy-boto3-ec2 = [ - {file = "mypy-boto3-ec2-1.20.6.tar.gz", hash = "sha256:06855fc03bd8ea3d99e2b93e602796a429d697904fbf9afac2fd11452f5413f5"}, - {file = "mypy_boto3_ec2-1.20.6-py3-none-any.whl", hash = "sha256:5286a0403557968474b9e14039ad05047764557f19555c23f4bb61f64e210019"}, + {file = "mypy-boto3-ec2-1.20.23.tar.gz", hash = "sha256:b9cfca9baa5e41652d6d612feb24f54eedbf68a647acc26f518d308067eba355"}, + {file = "mypy_boto3_ec2-1.20.23-py3-none-any.whl", hash = "sha256:07149380b194b566ff6113277fbb7e4f54cc73b9f617d7ee7a24f21c9d48e5f9"}, ] mypy-boto3-ec2-instance-connect = [ {file = "mypy-boto3-ec2-instance-connect-1.20.1.tar.gz", hash = "sha256:e09e0a93ab476758c5f02f112eba23347c105e1a68feb622eda440b0dbd03b7c"}, {file = "mypy_boto3_ec2_instance_connect-1.20.1-py3-none-any.whl", hash = "sha256:63a12a70c2273a7ef47f3f29bd246fdd743f8c6f8ab78579c599841b098cf971"}, ] mypy-boto3-ecr = [ - {file = "mypy-boto3-ecr-1.20.1.tar.gz", hash = "sha256:87d24d8ee7600c6baf4b02c4cf4e34de39713b2b7e3fd59abda708ba72bc0397"}, - {file = "mypy_boto3_ecr-1.20.1-py3-none-any.whl", hash = "sha256:012bc549f8e679332de9bea4a07b33f64b7553a4cc320ee49e92ca15616eb5d2"}, + {file = "mypy-boto3-ecr-1.20.16.tar.gz", hash = "sha256:0edc06bcba2d364a0abffd51a9d780c179929d16ae4a3d125e33e0c452e176fd"}, + {file = "mypy_boto3_ecr-1.20.16-py3-none-any.whl", hash = "sha256:cf4da5b0d832d233d467487bc008c05932e10b65624b76073f2ba3a4d8d5a544"}, ] mypy-boto3-ecr-public = [ {file = "mypy-boto3-ecr-public-1.20.1.tar.gz", hash = "sha256:03829f55784e6c749f95611f5b9e68d5afc5a451089931bae753522d27d6cf93"}, {file = "mypy_boto3_ecr_public-1.20.1-py3-none-any.whl", hash = "sha256:d4be5897563dcec316ae3a8e468fbbb816c68431b3f755e7ef0e112635573f91"}, ] mypy-boto3-ecs = [ - {file = "mypy-boto3-ecs-1.20.3.tar.gz", hash = "sha256:94c9d34d97458f7be23649344864e27deaae53b59eeccb255654eed6cf3970c6"}, - {file = "mypy_boto3_ecs-1.20.3-py3-none-any.whl", hash = "sha256:2c8d9236c6a8d473232f219b2c90b700befcc92373d74da68a73d232874a7fcc"}, + {file = "mypy-boto3-ecs-1.20.12.tar.gz", hash = "sha256:477dc2ad6f1ae4a39a1c599032248446f24d2fe3e33ba99912db5eb64ee24f4b"}, + {file = "mypy_boto3_ecs-1.20.12-py3-none-any.whl", hash = "sha256:6f2c0b226abcc93c5b75bdfffabe380fb286b4e144b85f45f52847b42b4970f6"}, ] mypy-boto3-efs = [ {file = "mypy-boto3-efs-1.20.1.tar.gz", hash = "sha256:5947930d5721c7d0c5a188f9f88cef3623b5c63155472aa8516eb08837b529f6"}, {file = "mypy_boto3_efs-1.20.1-py3-none-any.whl", hash = "sha256:a026d95a67450ef3b4f03d798b0d5c4e268726e08a28a93054d30b27fe34f80b"}, ] mypy-boto3-eks = [ - {file = "mypy-boto3-eks-1.20.6.tar.gz", hash = "sha256:a651d24352980e8ec9b697454acac93fbacd6f6f62baa2cf366d354033e6a680"}, - {file = "mypy_boto3_eks-1.20.6-py3-none-any.whl", hash = "sha256:b8002d9e88154ecf88d28bf128a807a404aba18be094ef118ff93ddfc56ff04a"}, + {file = "mypy-boto3-eks-1.20.11.tar.gz", hash = "sha256:d68d8c014ae48600d5c5086db48afdba264f8c2a0c03261aa8c4ebac61184399"}, + {file = "mypy_boto3_eks-1.20.11-py3-none-any.whl", hash = "sha256:f89511b4c81396aa6b61c96ed9c3753297e57f7fdbc2e04afc580f9d9786a3b1"}, ] mypy-boto3-elastic-inference = [ {file = "mypy-boto3-elastic-inference-1.20.1.tar.gz", hash = "sha256:203e8c718b62c581d87d751d03fcecfc1bc0ad7233b5adf0cb1c179342d4bb7a"}, {file = "mypy_boto3_elastic_inference-1.20.1-py3-none-any.whl", hash = "sha256:7f276a45b3129dbe0cac75fec717f69544ce79b211ecf8a5c8be569377f6e2ac"}, ] mypy-boto3-elasticache = [ - {file = "mypy-boto3-elasticache-1.20.1.tar.gz", hash = "sha256:1d4fccc8cdee90b1e7d1f7103d8f2ebaf441398455ca7d0ff6435665de68bb59"}, - {file = "mypy_boto3_elasticache-1.20.1-py3-none-any.whl", hash = "sha256:a908a170da42b25dbb469a1c87d4ce6d521becebc414feb98ad17808bef92823"}, + {file = "mypy-boto3-elasticache-1.20.13.tar.gz", hash = "sha256:b3f9cf083c2587f4e3ad21cd4a2adb096c357e9c9b5ec49417aa848201917036"}, + {file = "mypy_boto3_elasticache-1.20.13-py3-none-any.whl", hash = "sha256:7e7777d4ae5789f52a664d290cabee9674937efab69922b5d0e25e35379b9e53"}, ] mypy-boto3-elasticbeanstalk = [ {file = "mypy-boto3-elasticbeanstalk-1.20.1.tar.gz", hash = "sha256:3306bd514919f65f4fbeeff79e3004d1fdef1693a28ef766d9e713a97aacda61"}, @@ -4959,8 +5048,8 @@ mypy-boto3-elb = [ {file = "mypy_boto3_elb-1.20.1-py3-none-any.whl", hash = "sha256:9788c342147a01acd0aa2f1f0bf2a91d71e51a9fd77df2cb2e1de4836e84fb86"}, ] mypy-boto3-elbv2 = [ - {file = "mypy-boto3-elbv2-1.20.1.tar.gz", hash = "sha256:b14dc362d845c2b4d4b2bdb4fa650f6cf4e31303657cea4ff6046492f582a3fa"}, - {file = "mypy_boto3_elbv2-1.20.1-py3-none-any.whl", hash = "sha256:8bc79af33c569f64ad9588a0b1416b35a311a7e05a3fa7d89ac02a2bbf38cd11"}, + {file = "mypy-boto3-elbv2-1.20.12.tar.gz", hash = "sha256:e8da09406091b20fca4c914aa891080367b57d11d4a0c6eb3e095fadee24193e"}, + {file = "mypy_boto3_elbv2-1.20.12-py3-none-any.whl", hash = "sha256:35be9f8a27254d0bc512a2d5a6fb8d13a3abc9ec29a81104473f20a7f5432a3f"}, ] mypy-boto3-emr = [ {file = "mypy-boto3-emr-1.20.1.tar.gz", hash = "sha256:20ff48769291e49945b655253c4c0d2f39a1106c362129ed3148f4d20f262249"}, @@ -4971,20 +5060,24 @@ mypy-boto3-emr-containers = [ {file = "mypy_boto3_emr_containers-1.20.1-py3-none-any.whl", hash = "sha256:5372cce246bdf10e747b299a1d293b8bac7afdc4eed80cc57847408da8336300"}, ] mypy-boto3-es = [ - {file = "mypy-boto3-es-1.20.1.tar.gz", hash = "sha256:56c9ab212c3c34709d639d550d39da25f666d24fc49a9ac8ada59911b9917688"}, - {file = "mypy_boto3_es-1.20.1-py3-none-any.whl", hash = "sha256:0b6706f891554a1a4d8d35a976a4c16acbd9d51c9f3dbedd033d47a39ad89a08"}, + {file = "mypy-boto3-es-1.20.11.tar.gz", hash = "sha256:13ccda66385639e0afa684f884ac20a1ccf0c403e75b764e38d1131a97ef80df"}, + {file = "mypy_boto3_es-1.20.11-py3-none-any.whl", hash = "sha256:f72c04b17d240f5017c101cc9dca7cb327935bcc1b2d5b2e7c7ff12f533a39b5"}, ] mypy-boto3-events = [ {file = "mypy-boto3-events-1.20.1.tar.gz", hash = "sha256:00404cf50f2d1edae472aa5a23be0d84ca8d3cc9f7e1beff2fb28d31737ba70d"}, {file = "mypy_boto3_events-1.20.1-py3-none-any.whl", hash = "sha256:09cea9995432ca96177ee2e76090c1a4b964d77cc87c0c39c57a114ec4da4ac6"}, ] +mypy-boto3-evidently = [ + {file = "mypy-boto3-evidently-1.20.16.tar.gz", hash = "sha256:683a8f11a58a17cfe8231a9a3e8191a9965bb5501c09272150c33637893dcb27"}, + {file = "mypy_boto3_evidently-1.20.16-py3-none-any.whl", hash = "sha256:7914ed40150de4fa1fa1e0a2409ab7f8044ff001139712d88a5e03179ba1c5e4"}, +] mypy-boto3-finspace = [ {file = "mypy-boto3-finspace-1.20.1.tar.gz", hash = "sha256:c4f5167e2d7588c55345d268b208e2e17906087f7f869278213d464935f5e784"}, {file = "mypy_boto3_finspace-1.20.1-py3-none-any.whl", hash = "sha256:603d351e489f31dc795989475f5417265b55e61aa05b36d219e00113a36343d8"}, ] mypy-boto3-finspace-data = [ - {file = "mypy-boto3-finspace-data-1.20.1.tar.gz", hash = "sha256:3a3dc7060d1727faad2dda19ad135e8d3821bb195293d0e72da42ede9de8b9a3"}, - {file = "mypy_boto3_finspace_data-1.20.1-py3-none-any.whl", hash = "sha256:e773ef112c2183a272e8266b2caa5d4b1ea8d8f24fa757fb26de0067df917d72"}, + {file = "mypy-boto3-finspace-data-1.20.12.tar.gz", hash = "sha256:2eb5fc65a3734190969edbdbe6a73a674b273e66593414c01622b4ae2d77d557"}, + {file = "mypy_boto3_finspace_data-1.20.12-py3-none-any.whl", hash = "sha256:67f6533e7e347ce4786a17624799c846210be4afb8a92624ff4d4050f337d4d1"}, ] mypy-boto3-firehose = [ {file = "mypy-boto3-firehose-1.20.1.tar.gz", hash = "sha256:af1800d5a1c33762ba40e698928294d6860ec9a4864694741a2496e11c67ef03"}, @@ -5011,8 +5104,8 @@ mypy-boto3-frauddetector = [ {file = "mypy_boto3_frauddetector-1.20.1-py3-none-any.whl", hash = "sha256:10245c46675785c1658c2f6e441b41616f58d38a3d8d843f6b9f89063e2bb500"}, ] mypy-boto3-fsx = [ - {file = "mypy-boto3-fsx-1.20.1.tar.gz", hash = "sha256:efb4d2dc55353b501c0d04578fd69646892b21a51dce3e8032a20425ef554104"}, - {file = "mypy_boto3_fsx-1.20.1-py3-none-any.whl", hash = "sha256:cddfe43bf0456aa2b79d00607e24d4fefedda382867327404abfe8cdf73d4bdc"}, + {file = "mypy-boto3-fsx-1.20.17.tar.gz", hash = "sha256:34ec6ab66c78c09002e06df2e72b039e32f2b3e7ffcce2cb9a97997672b2bd0d"}, + {file = "mypy_boto3_fsx-1.20.17-py3-none-any.whl", hash = "sha256:6605aa0581091e3d88ed66510ac3becad427729411c0d3ff34bb44634e151596"}, ] mypy-boto3-gamelift = [ {file = "mypy-boto3-gamelift-1.20.1.tar.gz", hash = "sha256:519ac6e654167892d8be97655e6dce4f4a4b8a44b7862b088df5a9f05772db7a"}, @@ -5027,8 +5120,8 @@ mypy-boto3-globalaccelerator = [ {file = "mypy_boto3_globalaccelerator-1.20.1-py3-none-any.whl", hash = "sha256:239010655f9ffe4803289ecd235d1794814d13a3a236e95a88515bb1b68dee69"}, ] mypy-boto3-glue = [ - {file = "mypy-boto3-glue-1.20.1.tar.gz", hash = "sha256:b33a9193d2ecf96fa66c75b051695838c35588bb33233dfd0ee9e95ce847aad4"}, - {file = "mypy_boto3_glue-1.20.1-py3-none-any.whl", hash = "sha256:a150ec2bd1a099609ec5fe414f0bedbfaa6f5083ca9e6f21cf3cc868bff7b991"}, + {file = "mypy-boto3-glue-1.20.17.tar.gz", hash = "sha256:d2c62626ff06cc7b0ea06ef9422f9238034ae6029da9479b0c9fc15ede3eaa40"}, + {file = "mypy_boto3_glue-1.20.17-py3-none-any.whl", hash = "sha256:f6d3b96ee05837013a84e2a4cf7c60389dbbf157988306b2a57fbc312348412f"}, ] mypy-boto3-grafana = [ {file = "mypy-boto3-grafana-1.20.1.tar.gz", hash = "sha256:629f89d5098863e3f451a2b6c06d9788c77d7c799572a31dfefc08a81924afa5"}, @@ -5051,8 +5144,8 @@ mypy-boto3-guardduty = [ {file = "mypy_boto3_guardduty-1.20.1-py3-none-any.whl", hash = "sha256:dfba4bb04d8791e4ea554c2c63ba495c550fa85f3df7ca92015e80e04ace00bb"}, ] mypy-boto3-health = [ - {file = "mypy-boto3-health-1.20.2.tar.gz", hash = "sha256:c83a4a7e3a5a806793a2025b603a6d72ad38f2d21f3664640a1395dde1bcb4d2"}, - {file = "mypy_boto3_health-1.20.2-py3-none-any.whl", hash = "sha256:e5f6b01ffa1059a7e3715444e959876ab35288df960e3cf8792104d5de487f54"}, + {file = "mypy-boto3-health-1.20.22.tar.gz", hash = "sha256:fbb82e23badb28137c7c38fe498f1eb35ed5f35ec19ac561edf97fac2880d3f2"}, + {file = "mypy_boto3_health-1.20.22-py3-none-any.whl", hash = "sha256:615c284020dea3b99fb2f57918d5491ed1188b8cf8f8136879c175c1f9a1f99f"}, ] mypy-boto3-healthlake = [ {file = "mypy-boto3-healthlake-1.20.1.tar.gz", hash = "sha256:2fb62c20a9159691c7862f789b5cb9753620128354a71c7f658a75679ec0b7a8"}, @@ -5071,8 +5164,8 @@ mypy-boto3-identitystore = [ {file = "mypy_boto3_identitystore-1.20.1-py3-none-any.whl", hash = "sha256:ec1cb9acedf879ff1f1adfa0debc884b075773614db1281d93e83847ff34e97c"}, ] mypy-boto3-imagebuilder = [ - {file = "mypy-boto3-imagebuilder-1.20.1.tar.gz", hash = "sha256:a8d016aaaed010a767402a5b370afe68458505181e059ef0733ecb1d1c2b5ae0"}, - {file = "mypy_boto3_imagebuilder-1.20.1-py3-none-any.whl", hash = "sha256:cbf940bb9fa3c579ad23db862adc9d1d01548358fb4ea87e7d639adf7013922d"}, + {file = "mypy-boto3-imagebuilder-1.20.13.tar.gz", hash = "sha256:93fb1c158b5b0b79dad2ff510869f67a1607ef99880cc60a584942e564c45684"}, + {file = "mypy_boto3_imagebuilder-1.20.13-py3-none-any.whl", hash = "sha256:88bb46d77c90952f484004afad31400f87496f9610586630276f5e90a5747d3a"}, ] mypy-boto3-importexport = [ {file = "mypy-boto3-importexport-1.20.1.tar.gz", hash = "sha256:4b68419d434ebc3a41c062bce3da543ee671bfe9815f8c8f28247d83693a1611"}, @@ -5082,9 +5175,13 @@ mypy-boto3-inspector = [ {file = "mypy-boto3-inspector-1.20.1.tar.gz", hash = "sha256:d6d82e1d4f15bc4f5e7d9787f9125c3bb188608ab3cd69186620f4261a7adc18"}, {file = "mypy_boto3_inspector-1.20.1-py3-none-any.whl", hash = "sha256:49f940f2940cc0805ec9cc2eb56f99aaa3d29e82f82e15f47e8b97f29c6ac677"}, ] +mypy-boto3-inspector2 = [ + {file = "mypy-boto3-inspector2-1.20.16.tar.gz", hash = "sha256:6ed2da352ae4a84030ab2ef6764f03cac7a6af20a7dec0d546f3ce70b717d3cd"}, + {file = "mypy_boto3_inspector2-1.20.16-py3-none-any.whl", hash = "sha256:369671848097523d2b5723ccd17a4e4c5f69cc943f0ebe690a76e53d74f82747"}, +] mypy-boto3-iot = [ - {file = "mypy-boto3-iot-1.20.1.tar.gz", hash = "sha256:d01f018e99e9b0774f1ab54319511a3947cec1a3a1152be9d4edf926d64be97f"}, - {file = "mypy_boto3_iot-1.20.1-py3-none-any.whl", hash = "sha256:271df647247cf5705a86bb1a377eee34d386e170ec4b742d11a77a577e85d47a"}, + {file = "mypy-boto3-iot-1.20.22.tar.gz", hash = "sha256:b59d0739ad9a95fb5e80797f935828fcb2ed4b0299e07d0fe19832915af3732d"}, + {file = "mypy_boto3_iot-1.20.22-py3-none-any.whl", hash = "sha256:a658afcbf849abcd363040361dfab613f7d8ed8ba5d7531ed4ef448953c539de"}, ] mypy-boto3-iot-data = [ {file = "mypy-boto3-iot-data-1.20.1.tar.gz", hash = "sha256:23cbd27c40f9d7aecc333b113a48919a72b61fb7113ca351d69cfa4cabbcf42a"}, @@ -5107,8 +5204,8 @@ mypy-boto3-iotanalytics = [ {file = "mypy_boto3_iotanalytics-1.20.1-py3-none-any.whl", hash = "sha256:28c64f10be5d439bdbde4b0e041b2f2be74594cb8ed32fec540338f607861771"}, ] mypy-boto3-iotdeviceadvisor = [ - {file = "mypy-boto3-iotdeviceadvisor-1.20.1.tar.gz", hash = "sha256:856233811dcece351777d4b22a46b51bee3f76619a5c737e08d0f897cc4e9bf6"}, - {file = "mypy_boto3_iotdeviceadvisor-1.20.1-py3-none-any.whl", hash = "sha256:7ad2b31728f326696590f72d182520cf8502182e903635249506aa4a746e3a88"}, + {file = "mypy-boto3-iotdeviceadvisor-1.20.14.tar.gz", hash = "sha256:628b2084546d4f2855742f27891faaf37c15e45e161276e7711dbcc8114c2cf9"}, + {file = "mypy_boto3_iotdeviceadvisor-1.20.14-py3-none-any.whl", hash = "sha256:6d26c01d524daacb1ccf356b7236c2dab78494bcba71a803e4e9b8d444177d20"}, ] mypy-boto3-iotevents = [ {file = "mypy-boto3-iotevents-1.20.1.tar.gz", hash = "sha256:1a785e85a52efa7ee090438b6a472d7f258f73b11d04627bc5d7af4f2267b157"}, @@ -5127,36 +5224,40 @@ mypy-boto3-iotsecuretunneling = [ {file = "mypy_boto3_iotsecuretunneling-1.20.1-py3-none-any.whl", hash = "sha256:a12df6badf87a8c15fb9bf781aa001b27714486435fecaed6774c4383dcce5a3"}, ] mypy-boto3-iotsitewise = [ - {file = "mypy-boto3-iotsitewise-1.20.1.tar.gz", hash = "sha256:926f08a29f52ac593fd36587696b7ffe520c2f7fd9ea3ef37865e56f49d25e20"}, - {file = "mypy_boto3_iotsitewise-1.20.1-py3-none-any.whl", hash = "sha256:356839c60419b320f9c33ab76d387d3513e2c9d0040792dfd343d43f9d064a6f"}, + {file = "mypy-boto3-iotsitewise-1.20.16.tar.gz", hash = "sha256:1d63d31c32f8efb01ba50760715e159068a398a1236b351e8383b084466d8c78"}, + {file = "mypy_boto3_iotsitewise-1.20.16-py3-none-any.whl", hash = "sha256:c1db10b1cb5f76d5a2c0e63bb41c275b28a7ffdb6a215c16e56ab6f50f02f61d"}, ] mypy-boto3-iotthingsgraph = [ {file = "mypy-boto3-iotthingsgraph-1.20.1.tar.gz", hash = "sha256:cfa6646e94443db3971ed679f6fb931f0559ccc4692d8bb2fad923189ebbb4f8"}, {file = "mypy_boto3_iotthingsgraph-1.20.1-py3-none-any.whl", hash = "sha256:2e21c9b0b9a3c78c1dda4083677b0a2fd949abcb49aa7a0e15e707d6583ee7d3"}, ] +mypy-boto3-iottwinmaker = [ + {file = "mypy-boto3-iottwinmaker-1.20.17.tar.gz", hash = "sha256:992ab00711410a31b5f4312c6a908bca465686a4d0fc61152153a796a128b97d"}, + {file = "mypy_boto3_iottwinmaker-1.20.17-py3-none-any.whl", hash = "sha256:f276f9631512a2b394127188867d56a7b17c4104e5ac78c313736888a9acfb76"}, +] mypy-boto3-iotwireless = [ - {file = "mypy-boto3-iotwireless-1.20.1.tar.gz", hash = "sha256:89900b67b6dc7e40f35b4cb1af57462af172c46983a46dca056e1d98898f4530"}, - {file = "mypy_boto3_iotwireless-1.20.1-py3-none-any.whl", hash = "sha256:fd2710a82f75ae25091bd8f586947553f030ea4d5a5ba362c981343cdc8fe70d"}, + {file = "mypy-boto3-iotwireless-1.20.12.tar.gz", hash = "sha256:aec3933007cc2b704197227260e0e63929aaa07f5766884005c0fa8a28d67ec8"}, + {file = "mypy_boto3_iotwireless-1.20.12-py3-none-any.whl", hash = "sha256:2953b823f73b11575b0472ab5edb04f0d415b5a6a2d5d5372b013a6d090e3ae9"}, ] mypy-boto3-ivs = [ {file = "mypy-boto3-ivs-1.20.9.tar.gz", hash = "sha256:a7aec4f9dbb7cd9dcc939c75fd5427e9bafa22eac6c856a25a532bc558e17a46"}, {file = "mypy_boto3_ivs-1.20.9-py3-none-any.whl", hash = "sha256:dba3758e6d1c89f80ef6ebaa72b15526d5a87a5f66547aef7d7b60ff0b807087"}, ] mypy-boto3-kafka = [ - {file = "mypy-boto3-kafka-1.20.9.tar.gz", hash = "sha256:ec4220de6a5e004e46b89167fc85116467f9287676963b6df4c121748bce8a16"}, - {file = "mypy_boto3_kafka-1.20.9-py3-none-any.whl", hash = "sha256:74afb3b749970c9f934a26c67feb0d5740a6e0c790c1d31af164676937723d07"}, + {file = "mypy-boto3-kafka-1.20.17.tar.gz", hash = "sha256:ea4ba35ca00cc333f3952faf3a4ec95a59e8687c632c580d713ec555513cf5d2"}, + {file = "mypy_boto3_kafka-1.20.17-py3-none-any.whl", hash = "sha256:f21e181a218db1ad7fc6830a20341e8004d80513e40d0aadbfc767dd7d5975e7"}, ] mypy-boto3-kafkaconnect = [ {file = "mypy-boto3-kafkaconnect-1.20.1.tar.gz", hash = "sha256:c4fe5fc8ae1060c69d238d367f8b687c44c2dbb77bf36f969a2265dd7dd51420"}, {file = "mypy_boto3_kafkaconnect-1.20.1-py3-none-any.whl", hash = "sha256:48a2fc822771e0ed5bb62d964d0e7003464a9b6413d0f6cd7aecec5d922b9179"}, ] mypy-boto3-kendra = [ - {file = "mypy-boto3-kendra-1.20.1.tar.gz", hash = "sha256:f7bb37fc7e72a1ed522016a99736d266900f7ad8bc864e53b8b8a67f1f5e974d"}, - {file = "mypy_boto3_kendra-1.20.1-py3-none-any.whl", hash = "sha256:13d3463ec6f962aca5caffb47cc18d393b8bd8d9f5b20bea2eb725d241d007c5"}, + {file = "mypy-boto3-kendra-1.20.18.tar.gz", hash = "sha256:330744f9080b78c888f515dd4ea75f79e37658e36a2d6ac56c27b3622bfcdc19"}, + {file = "mypy_boto3_kendra-1.20.18-py3-none-any.whl", hash = "sha256:370d2251ecde2a306cea0af291f77a884cfe66ddbe889e8c48a5c9071b749c5a"}, ] mypy-boto3-kinesis = [ - {file = "mypy-boto3-kinesis-1.20.1.tar.gz", hash = "sha256:c4aa47db47c01f5d32844a0d98de7e4ef14885f82c0bf894d2a16890d46cd44c"}, - {file = "mypy_boto3_kinesis-1.20.1-py3-none-any.whl", hash = "sha256:4940f3f09ece0d100f32129bc4a9f18529d27f53ececf23dd793df9ec2f12e6c"}, + {file = "mypy-boto3-kinesis-1.20.17.tar.gz", hash = "sha256:71d62238f7a28a6161f08cbe74b8b2b0fddb35a5c781d58f847e9284a4f83b14"}, + {file = "mypy_boto3_kinesis-1.20.17-py3-none-any.whl", hash = "sha256:82fccd8d0b4e5cd530dd17fea852f4d86f65c2fe8469e7d36ebebca5110dca23"}, ] mypy-boto3-kinesis-video-archived-media = [ {file = "mypy-boto3-kinesis-video-archived-media-1.20.1.tar.gz", hash = "sha256:34bce8d66fcd047c3b3314a2f3950d325a221bf734fe08b53f4093ea05e358e8"}, @@ -5187,12 +5288,12 @@ mypy-boto3-kms = [ {file = "mypy_boto3_kms-1.20.1-py3-none-any.whl", hash = "sha256:39c10228d7668b75fe18d790d04cd3ab364f2cb0319e3a9d7eb6641be98ac87c"}, ] mypy-boto3-lakeformation = [ - {file = "mypy-boto3-lakeformation-1.20.1.tar.gz", hash = "sha256:c72b2bdf25f7524cae672529e5c805f6b6ff9bad92efa42262b0a36331d4a908"}, - {file = "mypy_boto3_lakeformation-1.20.1-py3-none-any.whl", hash = "sha256:ed6d21e43695c20858531e18d4a28487cf1ce2133a8338903226ee20e05026fe"}, + {file = "mypy-boto3-lakeformation-1.20.17.tar.gz", hash = "sha256:4d5fc419125a2807422ddd384638b970b67be50075000f8ee59b30cc2d0f74b2"}, + {file = "mypy_boto3_lakeformation-1.20.17-py3-none-any.whl", hash = "sha256:1670fbcf5101dca3c4905ceb48fcb32d7df39d87951d9b6ab82fe70613e8e722"}, ] mypy-boto3-lambda = [ - {file = "mypy-boto3-lambda-1.20.10.tar.gz", hash = "sha256:e64e7f9c727dca716713116d5c7f1c825c1964374d4e4eeea513beeddae73620"}, - {file = "mypy_boto3_lambda-1.20.10-py3-none-any.whl", hash = "sha256:a5d4586792400c6b9d0d0b82ff5f2b2eaccc148fe388c0ed51378e279ccffa1a"}, + {file = "mypy-boto3-lambda-1.20.13.tar.gz", hash = "sha256:8245c9ff98af11c58c713261049825c00a13648eeca00369ea80140b56e6ecba"}, + {file = "mypy_boto3_lambda-1.20.13-py3-none-any.whl", hash = "sha256:26513ac4bfe815ec1b05ab10ba10afe7c274397dcbadd4953a7e32a169503b35"}, ] mypy-boto3-lex-models = [ {file = "mypy-boto3-lex-models-1.20.1.tar.gz", hash = "sha256:8cd0b6ae5354cc0474154b915bd9e40334f9159bc86cbcc845c9d2502b8df7f9"}, @@ -5203,8 +5304,8 @@ mypy-boto3-lex-runtime = [ {file = "mypy_boto3_lex_runtime-1.20.1-py3-none-any.whl", hash = "sha256:7cb648ea350f6bb9fc417d2325ca6322396bb63e7452eaea2869bae90bbf30ea"}, ] mypy-boto3-lexv2-models = [ - {file = "mypy-boto3-lexv2-models-1.20.9.tar.gz", hash = "sha256:8dde7c702a9470f1a9ee8f777e0c6844b0374c11cb285c38ca88f78333bc134f"}, - {file = "mypy_boto3_lexv2_models-1.20.9-py3-none-any.whl", hash = "sha256:ff6d479300e8d0152dc0d0f6ee66673801bba677b0dd5a14d4b5723795b7cec4"}, + {file = "mypy-boto3-lexv2-models-1.20.23.tar.gz", hash = "sha256:4d6708b8d03691fdade858d9c9bafc00866763a1e72920b36414d9facd90a76c"}, + {file = "mypy_boto3_lexv2_models-1.20.23-py3-none-any.whl", hash = "sha256:63e64888547715fb35694dee26827a1cbf686337a499c55f34fd8087cdf7a35e"}, ] mypy-boto3-lexv2-runtime = [ {file = "mypy-boto3-lexv2-runtime-1.20.10.tar.gz", hash = "sha256:eda7eb7e6b7c29afbea1327cf27cb56e0960b46af2789477c429eada0da42d2b"}, @@ -5219,12 +5320,12 @@ mypy-boto3-lightsail = [ {file = "mypy_boto3_lightsail-1.20.1-py3-none-any.whl", hash = "sha256:8dabc200be9d41043697090ba799d3c55b84b94d0a3eb86f3b0b3d1d6d16ab3e"}, ] mypy-boto3-location = [ - {file = "mypy-boto3-location-1.20.7.tar.gz", hash = "sha256:dc475ad600beadc75c2132a558e5f4eb3251f9addc66755e8489d9eaacfb6135"}, - {file = "mypy_boto3_location-1.20.7-py3-none-any.whl", hash = "sha256:ee3851e15a599e8e130da7d924afabb29adcaf4ef7e2c57e96db860d5a74cab3"}, + {file = "mypy-boto3-location-1.20.21.tar.gz", hash = "sha256:e9e0abbe902eb4899dfb92ee51a1d34d85fe8b8d5408f5740844709331b7b858"}, + {file = "mypy_boto3_location-1.20.21-py3-none-any.whl", hash = "sha256:ea9c130604b2240ffa287c3940e3b070d2e8f847032cb1545a05f1b7291adc6e"}, ] mypy-boto3-logs = [ - {file = "mypy-boto3-logs-1.20.1.tar.gz", hash = "sha256:e2cb94da2c228c96577dd92e49a363fd4dc761f8a615516ae1960f113a48715f"}, - {file = "mypy_boto3_logs-1.20.1-py3-none-any.whl", hash = "sha256:11ad54e4b1daf63334c8006e2fe3749e142580f7a47701758f11372da4c15341"}, + {file = "mypy-boto3-logs-1.20.22.tar.gz", hash = "sha256:3babd25794cc23af0840a78058d2cbbb0505b9c69dc0d19133352650d4ef729c"}, + {file = "mypy_boto3_logs-1.20.22-py3-none-any.whl", hash = "sha256:900214d741383a33a6edf04e0a2f9983bbd0f1cae245aa14bc8a7765764c49ed"}, ] mypy-boto3-lookoutequipment = [ {file = "mypy-boto3-lookoutequipment-1.20.1.tar.gz", hash = "sha256:177df3c1eeb20d172f4a0d471a103fe635831f114104871ea106abe8ec8ef1a5"}, @@ -5235,8 +5336,8 @@ mypy-boto3-lookoutmetrics = [ {file = "mypy_boto3_lookoutmetrics-1.20.1-py3-none-any.whl", hash = "sha256:2d9750a5a009837a479b9cfe0c32df0fc3d76184e72773fb5b97038e7c064778"}, ] mypy-boto3-lookoutvision = [ - {file = "mypy-boto3-lookoutvision-1.20.1.tar.gz", hash = "sha256:1150b8a7cb2e411e59c00d13ebaf03ebb8efcb9060daaa2235fd9b7bb9c2dbe7"}, - {file = "mypy_boto3_lookoutvision-1.20.1-py3-none-any.whl", hash = "sha256:e987717246c48e332d1d6e5c058576612db4861f02290149ed6dc1d509bc0c11"}, + {file = "mypy-boto3-lookoutvision-1.20.22.tar.gz", hash = "sha256:7fa54ce0d3ea76a8e2ab032057e5c2c74afd092334a0764aa2e2d4f38f51ee95"}, + {file = "mypy_boto3_lookoutvision-1.20.22-py3-none-any.whl", hash = "sha256:1680b558d704562373b759cba9a44c9932cb88a5ae326f10a12e5ab834bed22c"}, ] mypy-boto3-machinelearning = [ {file = "mypy-boto3-machinelearning-1.20.1.tar.gz", hash = "sha256:347c37286a9a60ffe17f75e9e3c2fa3ce6702773ddf287495af62589e77c3330"}, @@ -5247,8 +5348,8 @@ mypy-boto3-macie = [ {file = "mypy_boto3_macie-1.20.1-py3-none-any.whl", hash = "sha256:2f093a37f33a449329ea3611892c1ff4b4ae589f23df6b7b8bd77f2cc9182416"}, ] mypy-boto3-macie2 = [ - {file = "mypy-boto3-macie2-1.20.1.tar.gz", hash = "sha256:f477215ba936c0306943183125d2e44f46bb99c53e487b70a90d26696ef724a7"}, - {file = "mypy_boto3_macie2-1.20.1-py3-none-any.whl", hash = "sha256:5a759ed8b50d4466b2d16c5f26da6e1a186407dc320133a3a17344ef90e00ce3"}, + {file = "mypy-boto3-macie2-1.20.12.tar.gz", hash = "sha256:001f3de2d4f99c8928fd183b8227022092d86996259d56f81e56e97059374879"}, + {file = "mypy_boto3_macie2-1.20.12-py3-none-any.whl", hash = "sha256:fb3bc746dc14a7c3b8da26b66368e3f051a4330cd19d8ded3806a9f001507944"}, ] mypy-boto3-managedblockchain = [ {file = "mypy-boto3-managedblockchain-1.20.1.tar.gz", hash = "sha256:c9e4c69d558eb90b23cb088b2e89488853f26973b46889161059a436f99e8de4"}, @@ -5311,8 +5412,12 @@ mypy-boto3-mgh = [ {file = "mypy_boto3_mgh-1.20.1-py3-none-any.whl", hash = "sha256:b0c3e9f98ff2191bb9745acb3380c30855c0687fd7dc386e9d17fd609457c8ba"}, ] mypy-boto3-mgn = [ - {file = "mypy-boto3-mgn-1.20.1.tar.gz", hash = "sha256:e1325742146a8fea2ac906c4f636e80d26ba409491330d9e4d7f136f88a89e0d"}, - {file = "mypy_boto3_mgn-1.20.1-py3-none-any.whl", hash = "sha256:0da37c7f8c6b6a7de8934757e4f80729cd55e8acb24c80dfc7d919efa35580a1"}, + {file = "mypy-boto3-mgn-1.20.14.tar.gz", hash = "sha256:ea039acacd9e81cc87814ec8edba3b17fc1ddf1243630c8d6f1f6ce4279bf3b7"}, + {file = "mypy_boto3_mgn-1.20.14-py3-none-any.whl", hash = "sha256:7292d83893626b562b58406a4ed42d06cc59dad14119853d433ff8c5cae0b512"}, +] +mypy-boto3-migration-hub-refactor-spaces = [ + {file = "mypy-boto3-migration-hub-refactor-spaces-1.20.15.tar.gz", hash = "sha256:ccc1ffd6a2da58ff7543f9ed419a1377df6e980ff75d520a45f452dfeef1c514"}, + {file = "mypy_boto3_migration_hub_refactor_spaces-1.20.15-py3-none-any.whl", hash = "sha256:aa5602b5905d670b4cf773c99e705d51bcf956f29db24621ea0c34816ccfb011"}, ] mypy-boto3-migrationhub-config = [ {file = "mypy-boto3-migrationhub-config-1.20.1.tar.gz", hash = "sha256:179cb5f113ce616f86f71b28e189a899f01f1644ae3d25dfe27f3013e4717db2"}, @@ -5343,20 +5448,20 @@ mypy-boto3-neptune = [ {file = "mypy_boto3_neptune-1.20.1-py3-none-any.whl", hash = "sha256:4a25db724ec9a1658e5488fef1a1cea6c94f1670033a3f136cd18564a59085cd"}, ] mypy-boto3-network-firewall = [ - {file = "mypy-boto3-network-firewall-1.20.1.tar.gz", hash = "sha256:169544c7bf7041e09d5273b9159871f13f8472f743f041532f62cf655ab54292"}, - {file = "mypy_boto3_network_firewall-1.20.1-py3-none-any.whl", hash = "sha256:42af7aa483555c968cb516a9ed77143323d8c5f62208c0dbbdc6963df4143aa7"}, + {file = "mypy-boto3-network-firewall-1.20.23.tar.gz", hash = "sha256:9378b9e1462bf7dbddc51b68410418b4bd7b93b6fc40fc063f19b7828e460d18"}, + {file = "mypy_boto3_network_firewall-1.20.23-py3-none-any.whl", hash = "sha256:2a1b2e0b6e128643d4fae627a252a2c873adf7f45847e1c1ce949a02c8a488c6"}, ] mypy-boto3-networkmanager = [ - {file = "mypy-boto3-networkmanager-1.20.1.tar.gz", hash = "sha256:03f76a686037fc8c5e3545bdb0440321cf012a37f89ccf5f7e944a66c348a46c"}, - {file = "mypy_boto3_networkmanager-1.20.1-py3-none-any.whl", hash = "sha256:a1cad97c415127a8182ab9254f381048061fad258fc23379e0efee361ec92792"}, + {file = "mypy-boto3-networkmanager-1.20.19.tar.gz", hash = "sha256:87657d89292f4e1dcb68133d86cbc19e812ef62407942ba9a4f8d1c36efb71e6"}, + {file = "mypy_boto3_networkmanager-1.20.19-py3-none-any.whl", hash = "sha256:312e7a51c946f2d9f9248a8cabd7f21407a0b4612fab70818f5a0de80bf1aac0"}, ] mypy-boto3-nimble = [ {file = "mypy-boto3-nimble-1.20.1.tar.gz", hash = "sha256:5ce33f82546f355b9d212606fbaf82ba45477e5714680959344db56a340e49e7"}, {file = "mypy_boto3_nimble-1.20.1-py3-none-any.whl", hash = "sha256:8a5589aaa3fca24f938ab233e2e632400dc7359887aaa45a88645785eea24250"}, ] mypy-boto3-opensearch = [ - {file = "mypy-boto3-opensearch-1.20.1.tar.gz", hash = "sha256:99089d69cdb42a01d5850d4b9addc39993be0ce6fbbbc28447ac6367f0d6afcd"}, - {file = "mypy_boto3_opensearch-1.20.1-py3-none-any.whl", hash = "sha256:7b276ae5afba59482f7b681e76700bbd4c91206c23f258739e5fad259479613e"}, + {file = "mypy-boto3-opensearch-1.20.12.tar.gz", hash = "sha256:894c338b9b331c249095d0164616db3c398d37a134f9d4abef3d333a56320bbb"}, + {file = "mypy_boto3_opensearch-1.20.12-py3-none-any.whl", hash = "sha256:4a67fcfac70a9bc8f469678a06c99dfed002f74a3fe1ff71e5b9497505d59648"}, ] mypy-boto3-opsworks = [ {file = "mypy-boto3-opsworks-1.20.1.tar.gz", hash = "sha256:10703a90a2bc7a9b836eec24c650aaebeebd4d79998a055f2c1b3d3ddc4a766f"}, @@ -5371,32 +5476,32 @@ mypy-boto3-organizations = [ {file = "mypy_boto3_organizations-1.20.1-py3-none-any.whl", hash = "sha256:fd2d33665762017df59e04c05f42a2c995c590e2803bdc99538beaf6635bbda2"}, ] mypy-boto3-outposts = [ - {file = "mypy-boto3-outposts-1.20.1.tar.gz", hash = "sha256:6cc858d6f8e79c621ba1d9f6211979358dd58e512128821faf625d8380e48462"}, - {file = "mypy_boto3_outposts-1.20.1-py3-none-any.whl", hash = "sha256:9ee6e2ffa3598dc69b1f3ad4adbf74a016f153a2a2240210a7a54683ea8ad82b"}, + {file = "mypy-boto3-outposts-1.20.22.tar.gz", hash = "sha256:756ecd383a09d4baee7ef039e4c253ffe60cbf10aac914b10f9c9d79e9ee3d44"}, + {file = "mypy_boto3_outposts-1.20.22-py3-none-any.whl", hash = "sha256:b3463ef916d1079286a0ef6b5da6213de6d4dd3e4016584bc02a5582fe06e989"}, ] mypy-boto3-panorama = [ {file = "mypy-boto3-panorama-1.20.1.tar.gz", hash = "sha256:030bdf046462366b9f79cf8e178dd8f410171f46383230c5abb7f53ad815897b"}, {file = "mypy_boto3_panorama-1.20.1-py3-none-any.whl", hash = "sha256:05148e9192c83971a27f436eb09f0c3f8a5e0127f87475d7645015e0e5429fce"}, ] mypy-boto3-personalize = [ - {file = "mypy-boto3-personalize-1.20.1.tar.gz", hash = "sha256:51b7d6089b1b7b25dd91a66cd6de1465e35c83e6e79a16818873589d6600febf"}, - {file = "mypy_boto3_personalize-1.20.1-py3-none-any.whl", hash = "sha256:099ca3c4567557eee65d91ac4e3d6b4862938cca8d3707302c63402fe92d32e3"}, + {file = "mypy-boto3-personalize-1.20.15.tar.gz", hash = "sha256:6c4b0fdac372abab69c29b9064c9f3e047e29fdd39efdbea3d0b810fd5614c25"}, + {file = "mypy_boto3_personalize-1.20.15-py3-none-any.whl", hash = "sha256:3a1c3af0932f3fb3a9acbcd594157fa2beb6f7bf0d673e4aae829b9c12b58ac1"}, ] mypy-boto3-personalize-events = [ {file = "mypy-boto3-personalize-events-1.20.1.tar.gz", hash = "sha256:8d423448fca40b699a0c4614d074e29c56bc3cb2b7e63012d1cf84010cd81a12"}, {file = "mypy_boto3_personalize_events-1.20.1-py3-none-any.whl", hash = "sha256:cf33b0a6ee55484a0b91469ed5a4b2892d9d6d939584fa4e53a10a5a4d3d1a1c"}, ] mypy-boto3-personalize-runtime = [ - {file = "mypy-boto3-personalize-runtime-1.20.1.tar.gz", hash = "sha256:1636a0eada1c3003d9d9691f339e30a36b670a303bf5c571b3b3a36a4ba38fd5"}, - {file = "mypy_boto3_personalize_runtime-1.20.1-py3-none-any.whl", hash = "sha256:40e8af4bdaa8254075e3bd9afc7f28308cabf094882f9e8851be5b84a9a9ebf2"}, + {file = "mypy-boto3-personalize-runtime-1.20.15.tar.gz", hash = "sha256:5b4dda533a11809cb6ed72d4f1abf204408b2e2b9f061b22347f432349bade03"}, + {file = "mypy_boto3_personalize_runtime-1.20.15-py3-none-any.whl", hash = "sha256:3248555f2714bd62ffea2ee622ccfc086de0d4b78488e5ad79282c848c19531a"}, ] mypy-boto3-pi = [ {file = "mypy-boto3-pi-1.20.1.tar.gz", hash = "sha256:9345304b4d758dceb037a5bd2b1d9e5521b75d76b4c95c6657584f9a64ae095c"}, {file = "mypy_boto3_pi-1.20.1-py3-none-any.whl", hash = "sha256:6bd486fadc618be6dce36a69f8831da0782da22b6ebf233969a963de2b3993e2"}, ] mypy-boto3-pinpoint = [ - {file = "mypy-boto3-pinpoint-1.20.1.tar.gz", hash = "sha256:42aacd5e20a45f321499ff340b8abdf7724f32a11d2573f82eb9c7266fcdc757"}, - {file = "mypy_boto3_pinpoint-1.20.1-py3-none-any.whl", hash = "sha256:10ccf5b0d0b4dda47c6e4ce79cc19393658e28dcbefbdd2b4272387b6f42429f"}, + {file = "mypy-boto3-pinpoint-1.20.14.tar.gz", hash = "sha256:0e3cb7bd0577f8168097215ff0c4d56c8e9940ff3e6a1fb60f293fbdd2156032"}, + {file = "mypy_boto3_pinpoint-1.20.14-py3-none-any.whl", hash = "sha256:cb8443e39d7ac0435b253128ad436a80fceff0f6be9f67f71c8e2885d5912943"}, ] mypy-boto3-pinpoint-email = [ {file = "mypy-boto3-pinpoint-email-1.20.1.tar.gz", hash = "sha256:c365660a1c30de0a992daccc478a5e568ae34719364ad48037de5b2de9d4dd5f"}, @@ -5415,8 +5520,8 @@ mypy-boto3-pricing = [ {file = "mypy_boto3_pricing-1.20.1-py3-none-any.whl", hash = "sha256:b08c4aba9da4a669726ccbe40b60a6141dff377b4a22859b588adce4e05181c8"}, ] mypy-boto3-proton = [ - {file = "mypy-boto3-proton-1.20.1.tar.gz", hash = "sha256:09c66672f2d89b9d0cfebbde83cdf90bef35d4337ac3104e91d4da00b74f829b"}, - {file = "mypy_boto3_proton-1.20.1-py3-none-any.whl", hash = "sha256:f1a1b7c0c8b4e4b43e3be7d114e2e321e0ac795774212d2e354a02b7c30c5c41"}, + {file = "mypy-boto3-proton-1.20.13.tar.gz", hash = "sha256:8fecc572b737739910193935ae318d6fb98a3a90c4b75534c8f341d61e953f0f"}, + {file = "mypy_boto3_proton-1.20.13-py3-none-any.whl", hash = "sha256:902be63e6f1385e8afd01f0141588ef4aed02556aa39b05b9b8408bacee3563c"}, ] mypy-boto3-qldb = [ {file = "mypy-boto3-qldb-1.20.1.tar.gz", hash = "sha256:fe102bd56267519924fab55e3a014bd2152ef4f7fa745866ac58c82bbc5c9a5c"}, @@ -5427,32 +5532,36 @@ mypy-boto3-qldb-session = [ {file = "mypy_boto3_qldb_session-1.20.1-py3-none-any.whl", hash = "sha256:89fe36266997a82837849880b0e2a5c746df00329e0b612eaf9588db99256a88"}, ] mypy-boto3-quicksight = [ - {file = "mypy-boto3-quicksight-1.20.1.tar.gz", hash = "sha256:8a690f40c97915a7c520aecb43212b756a6f7566d9396e05a4c620620edb4ccd"}, - {file = "mypy_boto3_quicksight-1.20.1-py3-none-any.whl", hash = "sha256:07cb4a4ca0171272ba7614ae2e8bc975b38e40190931f304efd6171cde14f30a"}, + {file = "mypy-boto3-quicksight-1.20.11.tar.gz", hash = "sha256:531555bc2658cc394dbc11cf03a80c16fb8e48ce080bba7cbd5c67e2ab4a1311"}, + {file = "mypy_boto3_quicksight-1.20.11-py3-none-any.whl", hash = "sha256:62acd0261ffb9a68a4a9895ba7b01e381d9b221abdaffec90d87eeaf0b2db45a"}, ] mypy-boto3-ram = [ - {file = "mypy-boto3-ram-1.20.1.tar.gz", hash = "sha256:0925cb82cce1f22e93af551b6f6adf17c80ad9e8aa77634be05b373f32e27f44"}, - {file = "mypy_boto3_ram-1.20.1-py3-none-any.whl", hash = "sha256:c5467e840387a8ac402248c530d5d7d824dcc9ae1133085cb1de8d66f62fda16"}, + {file = "mypy-boto3-ram-1.20.19.tar.gz", hash = "sha256:2f94d8fd890ccc343cb2337547930928672a959ff3c352a7abe7a1122ed88dcf"}, + {file = "mypy_boto3_ram-1.20.19-py3-none-any.whl", hash = "sha256:c30d5107a16224a2418111bf6ee6942bc02b39d30285c476cf9d0a0d1b6c6673"}, +] +mypy-boto3-rbin = [ + {file = "mypy-boto3-rbin-1.20.16.tar.gz", hash = "sha256:9c7f2598514e931d7da80d88026fe96d1ba9475c581e6c447ae81ce945779d04"}, + {file = "mypy_boto3_rbin-1.20.16-py3-none-any.whl", hash = "sha256:2de799c8246165fc11cc50b412cbbb121a1d963f2d042b71704698bddd191385"}, ] mypy-boto3-rds = [ - {file = "mypy-boto3-rds-1.20.1.tar.gz", hash = "sha256:d6c10fa2a91399b9d1841f15598942df1d6aab6921186c1166540e80897d3fb7"}, - {file = "mypy_boto3_rds-1.20.1-py3-none-any.whl", hash = "sha256:b471c03bc5f8ee6adbd4c7ee0404dee2001994f1d28eb514264e2ce25afd6588"}, + {file = "mypy-boto3-rds-1.20.12.tar.gz", hash = "sha256:386237c3e8ccf94f1939de9e62e11bfa804d526e1b0967f6d238d1b8bc58250b"}, + {file = "mypy_boto3_rds-1.20.12-py3-none-any.whl", hash = "sha256:5ca66e84bb861e6fc7772f3896234e2b0b87ae91c2a21487df062b2d680976bb"}, ] mypy-boto3-rds-data = [ {file = "mypy-boto3-rds-data-1.20.1.tar.gz", hash = "sha256:b57a4ba42a3471b49fd1306d467cc59b9cc03c0626180a55fcfa31d9362436c9"}, {file = "mypy_boto3_rds_data-1.20.1-py3-none-any.whl", hash = "sha256:8b0287fad26a4658eae7ed43ae67ee3481f2ba8fd39555ebe130ed890e316a44"}, ] mypy-boto3-redshift = [ - {file = "mypy-boto3-redshift-1.20.10.tar.gz", hash = "sha256:125c43f177762806e7d72383dfe77290336508c8455993d66e3d6ef88b878b50"}, - {file = "mypy_boto3_redshift-1.20.10-py3-none-any.whl", hash = "sha256:a1f186463fea439351012b1df571eca130a7499d81fe7c5304b4831579f7b81c"}, + {file = "mypy-boto3-redshift-1.20.12.tar.gz", hash = "sha256:df47bf7f59371e5f5e6b510c093f5f1a76c9ac34d17f65ea9e2ba1e3ce9039de"}, + {file = "mypy_boto3_redshift-1.20.12-py3-none-any.whl", hash = "sha256:8a98724d885d4d75652f8831a0705c3b7dad4310b884e24b5def6a9ea86ebeec"}, ] mypy-boto3-redshift-data = [ - {file = "mypy-boto3-redshift-data-1.20.9.tar.gz", hash = "sha256:e7feede7449b69cfcc82122ae93e45180e428690561f575bdeb1d862937bf5d4"}, - {file = "mypy_boto3_redshift_data-1.20.9-py3-none-any.whl", hash = "sha256:e60f8b6ab6156230e602d6490de48400228838b19695a942763a1c66aec3cf91"}, + {file = "mypy-boto3-redshift-data-1.20.17.tar.gz", hash = "sha256:d5159c893187130e9eff426d28b27dd69baa6062e0129adcada639fa119c271a"}, + {file = "mypy_boto3_redshift_data-1.20.17-py3-none-any.whl", hash = "sha256:f29b373f7bdf179dd88eca7a56f674f082b2f3f5a188caa6db675d9dc149037e"}, ] mypy-boto3-rekognition = [ - {file = "mypy-boto3-rekognition-1.20.1.tar.gz", hash = "sha256:6d733299689d7d6ef2909b89e6dfbf8666f60bb754d26637479c623615f13cb3"}, - {file = "mypy_boto3_rekognition-1.20.1-py3-none-any.whl", hash = "sha256:25661d445564c66bd87eb09113d7d187a2835b68463582234aa0daf5432928ae"}, + {file = "mypy-boto3-rekognition-1.20.20.tar.gz", hash = "sha256:dbdb1cceae505785c7ba3bf1e8ce127723c62aaa8b32f752a18bd4bb34ad4e3b"}, + {file = "mypy_boto3_rekognition-1.20.20-py3-none-any.whl", hash = "sha256:c7620cce941d20b967561c0a8138ac651ab9a1bfe631d0cf3336896e390decf4"}, ] mypy-boto3-resiliencehub = [ {file = "mypy-boto3-resiliencehub-1.20.3.tar.gz", hash = "sha256:03badb69d67d90666609b754632946abbe13305e476448aa862f0addee630270"}, @@ -5471,44 +5580,48 @@ mypy-boto3-robomaker = [ {file = "mypy_boto3_robomaker-1.20.1-py3-none-any.whl", hash = "sha256:d2b4641d42669ac46b013098122bc12d31b48ee8b6f1febd7409ff9df1f7b5c8"}, ] mypy-boto3-route53 = [ - {file = "mypy-boto3-route53-1.20.1.tar.gz", hash = "sha256:20a968db08a4baed6ef47e7b978e3dec7c164dc162cd16c09e16d82314009206"}, - {file = "mypy_boto3_route53-1.20.1-py3-none-any.whl", hash = "sha256:931a1da8c25d83260f690648d11351207d39657993bce9537ade04dad1f79622"}, + {file = "mypy-boto3-route53-1.20.21.tar.gz", hash = "sha256:0bd644235c7f808e08fffed88eb965025f4bed89a53689906f930e9752eceeb3"}, + {file = "mypy_boto3_route53-1.20.21-py3-none-any.whl", hash = "sha256:b0c260be2c8a8d72b17c753e518b8a44f1cb85e9feea2a2dce5bbedf8b6348f9"}, ] mypy-boto3-route53-recovery-cluster = [ {file = "mypy-boto3-route53-recovery-cluster-1.20.1.tar.gz", hash = "sha256:1f3e52f983e22198d1a854be11fe2566382d803abce43e4edbd381a8b3db12c6"}, {file = "mypy_boto3_route53_recovery_cluster-1.20.1-py3-none-any.whl", hash = "sha256:8bc0c17ca9d0456ea4ea90e7bf619c615146abe9f88ebfd9e929e4660bd88862"}, ] mypy-boto3-route53-recovery-control-config = [ - {file = "mypy-boto3-route53-recovery-control-config-1.20.1.tar.gz", hash = "sha256:2662e6d93d07e477fcbbefd2e296ee5d37c0fa91a999fdf266b4f620e4c6ddf5"}, - {file = "mypy_boto3_route53_recovery_control_config-1.20.1-py3-none-any.whl", hash = "sha256:af411e2be006e0fa2d0519c0bffee7d758380d4b0cda770a3d5def1c2cd18a12"}, + {file = "mypy-boto3-route53-recovery-control-config-1.20.23.tar.gz", hash = "sha256:abc212eb6173eab99ab82ec6d7a9d366fafa2be90ad8971c7ac9ef7f7d9e901f"}, + {file = "mypy_boto3_route53_recovery_control_config-1.20.23-py3-none-any.whl", hash = "sha256:9db1fe5f272d697f0221f525b8f035e4e65fa6e28f6f7fff529eeedfe4ee4624"}, ] mypy-boto3-route53-recovery-readiness = [ {file = "mypy-boto3-route53-recovery-readiness-1.20.1.tar.gz", hash = "sha256:e72c5c46d3cb12bb96c985c9f1e7c19d407cb003dd4a8407b553675c93349522"}, {file = "mypy_boto3_route53_recovery_readiness-1.20.1-py3-none-any.whl", hash = "sha256:5d52d3f5a899ff10db400fe037c930c1a81a62a55030099dba6d0c68bbd74fe4"}, ] mypy-boto3-route53domains = [ - {file = "mypy-boto3-route53domains-1.20.1.tar.gz", hash = "sha256:6871f5571d9eeb66434f1b593e5b012c1e5b87e0470d6f5c2c80da8339bbe96d"}, - {file = "mypy_boto3_route53domains-1.20.1-py3-none-any.whl", hash = "sha256:0dffb067b44d2a69eb66c237c8855f4fe365500f124074d5aaad8fa62ed71041"}, + {file = "mypy-boto3-route53domains-1.20.23.tar.gz", hash = "sha256:710704197407f5849a23dfe1d3df2feaf463aec00c37ceb67efea39f31aefa0a"}, + {file = "mypy_boto3_route53domains-1.20.23-py3-none-any.whl", hash = "sha256:2c5386b3adb454735d3ea2098cb6fa1ad4a8ac61c598a7bd9fe1b2f244310450"}, ] mypy-boto3-route53resolver = [ {file = "mypy-boto3-route53resolver-1.20.1.tar.gz", hash = "sha256:d0db0fed5e60cc20b3048babe733b66b068985e2f9ffcf05406e3016b66f8737"}, {file = "mypy_boto3_route53resolver-1.20.1-py3-none-any.whl", hash = "sha256:58460452541e5905eb1e5c12e819e1d6af288adc290c4583734cd8cff08d5d4b"}, ] +mypy-boto3-rum = [ + {file = "mypy-boto3-rum-1.20.16.tar.gz", hash = "sha256:8b9c8295912db080216ee1b452c339ca763c230d36554672ef2be15fd1a4c4ca"}, + {file = "mypy_boto3_rum-1.20.16-py3-none-any.whl", hash = "sha256:98bc156c4464e16d925c066141a1d29179e0a921275f721b59a2432a99993582"}, +] mypy-boto3-s3 = [ - {file = "mypy-boto3-s3-1.20.1.tar.gz", hash = "sha256:4675a50e25e8974ef8822920f22e38f6bc7810d1bb01cee4cfd94c8b5dab92ec"}, - {file = "mypy_boto3_s3-1.20.1-py3-none-any.whl", hash = "sha256:44276f3efb51c5299652882b348df28da376667303fedfd49d40fca0b9146d9d"}, + {file = "mypy-boto3-s3-1.20.17.tar.gz", hash = "sha256:ed9c3c3713845c34662c28711d05d553f1f347ccfa1ee2f15fc6c1de966e0aa7"}, + {file = "mypy_boto3_s3-1.20.17-py3-none-any.whl", hash = "sha256:662709293bd1a83d66e40a34abf3c3b4deb9f9dcb88ae1cc6aacb65615967429"}, ] mypy-boto3-s3control = [ - {file = "mypy-boto3-s3control-1.20.1.tar.gz", hash = "sha256:bd0fa272a254685191e0395bc925296299b5fd96069b4fe73c78dc3a0491782e"}, - {file = "mypy_boto3_s3control-1.20.1-py3-none-any.whl", hash = "sha256:1ecfc4b61ce647b09fa7df4a9e4e08051c5e1f913bd441830f252853ccbc0a71"}, + {file = "mypy-boto3-s3control-1.20.11.tar.gz", hash = "sha256:1989fcc75162ff321b73abf085685cd720b2e0a22086e4dc1c11ea836ab598e3"}, + {file = "mypy_boto3_s3control-1.20.11-py3-none-any.whl", hash = "sha256:d2a7c416bdd20d03e96a49c418745adaf41a8a2d03d7910edc8be27f52e084d8"}, ] mypy-boto3-s3outposts = [ {file = "mypy-boto3-s3outposts-1.20.1.tar.gz", hash = "sha256:0114cb8058888e26c5619fcab2f1e028833e8acaf55ea16cd8f513d977429efc"}, {file = "mypy_boto3_s3outposts-1.20.1-py3-none-any.whl", hash = "sha256:3517329d1dd66d916bbf8c0cfd1b63a3f8e0c971c49b651e280836f08a4598f5"}, ] mypy-boto3-sagemaker = [ - {file = "mypy-boto3-sagemaker-1.20.1.tar.gz", hash = "sha256:274526ffe0b9f8db20da850c419613d88c0e785145f4508f8e76017ba228d398"}, - {file = "mypy_boto3_sagemaker-1.20.1-py3-none-any.whl", hash = "sha256:6a6a2fa66681585c6d11b06f576edcee5e37f25df2e2cbad64ad957fc394b115"}, + {file = "mypy-boto3-sagemaker-1.20.22.tar.gz", hash = "sha256:bfce1d840c9c5fbf8e467fff063b9721d54f3ae4b33e5232114ea29a389003a6"}, + {file = "mypy_boto3_sagemaker-1.20.22-py3-none-any.whl", hash = "sha256:5c6aee800a80d9c736ac8d4cb47ae0ce60e712280b8624c2c268fb95a2d5eb04"}, ] mypy-boto3-sagemaker-a2i-runtime = [ {file = "mypy-boto3-sagemaker-a2i-runtime-1.20.1.tar.gz", hash = "sha256:74d98e9d7bbafc8b679d38802cc80584f589f1cad804680bfacf33c9b92c3aff"}, @@ -5523,12 +5636,12 @@ mypy-boto3-sagemaker-featurestore-runtime = [ {file = "mypy_boto3_sagemaker_featurestore_runtime-1.20.1-py3-none-any.whl", hash = "sha256:270f16d96f775153c2a1c326dd66810a387347f34e46399c6823866343fa601a"}, ] mypy-boto3-sagemaker-runtime = [ - {file = "mypy-boto3-sagemaker-runtime-1.20.1.tar.gz", hash = "sha256:c71b04f6115cb78bcffa14664f7cc721f41249875b37805b46360da9310b3136"}, - {file = "mypy_boto3_sagemaker_runtime-1.20.1-py3-none-any.whl", hash = "sha256:7991a9895d9dfa978f360fa697e22cdf3dd8b02b25a9b179ac5f02c9a9d2831e"}, + {file = "mypy-boto3-sagemaker-runtime-1.20.18.tar.gz", hash = "sha256:9ef4ae92eb685a1a7e62d5cf38fa2f209d94985cebc9517d0eef5d7b41bf3471"}, + {file = "mypy_boto3_sagemaker_runtime-1.20.18-py3-none-any.whl", hash = "sha256:59e8f38d935ff66362160777336d988c66165e8ffce0eca53e6a06ff6ae0b0fa"}, ] mypy-boto3-savingsplans = [ - {file = "mypy-boto3-savingsplans-1.20.1.tar.gz", hash = "sha256:24e4676b934fe6bde2b64cb89971d178dd3898655bf8c86aba9aa038fab39e00"}, - {file = "mypy_boto3_savingsplans-1.20.1-py3-none-any.whl", hash = "sha256:8adf5559806ab6903ec10864ac2992f59a6bb092e2dd33d940982408bd1f87a1"}, + {file = "mypy-boto3-savingsplans-1.20.23.tar.gz", hash = "sha256:4cf981b66d519bf906faa175f05847a06c095fb676c8c0a329622a3ce9029b47"}, + {file = "mypy_boto3_savingsplans-1.20.23-py3-none-any.whl", hash = "sha256:65bb109be728009bc949d5710bae109b2da316eee673131823e371bbac274954"}, ] mypy-boto3-schemas = [ {file = "mypy-boto3-schemas-1.20.1.tar.gz", hash = "sha256:9c3fc745c79b8faee8dee2a5de0d6dbe63e69c0eeb32a238b74ad20f3e9220bd"}, @@ -5575,16 +5688,16 @@ mypy-boto3-sesv2 = [ {file = "mypy_boto3_sesv2-1.20.1-py3-none-any.whl", hash = "sha256:0d1ac36b02b711c85b37981966e1935bd4079ecf5924e27dc104710b4437333a"}, ] mypy-boto3-shield = [ - {file = "mypy-boto3-shield-1.20.1.tar.gz", hash = "sha256:ffa449bbe476faea7c86d487d0a89145aa88ad1371f0e37ef8e8429c4cda0a3c"}, - {file = "mypy_boto3_shield-1.20.1-py3-none-any.whl", hash = "sha256:140eb1c2fcf8ddeaa333f967a0262e29482173fe20dd912937d74c6eda46ed08"}, + {file = "mypy-boto3-shield-1.20.18.tar.gz", hash = "sha256:2d2974b0f74704b96ccf9f7d8edcdc519aaa7566edc045ae5af62b2ac331f77a"}, + {file = "mypy_boto3_shield-1.20.18-py3-none-any.whl", hash = "sha256:9c0c27c54ae59109e8e885f2c4c9ef79bc6591b96c223ab2dae180b2fed1b467"}, ] mypy-boto3-signer = [ {file = "mypy-boto3-signer-1.20.1.tar.gz", hash = "sha256:c6f817037aa4ec054e8d1c843edaee51b907ce167d76209dca6d0f077ad1c2e3"}, {file = "mypy_boto3_signer-1.20.1-py3-none-any.whl", hash = "sha256:fccf79e2afb842b1d4e98393f0aebe74a62887dcf54a293d2040bfe63b919358"}, ] mypy-boto3-sms = [ - {file = "mypy-boto3-sms-1.20.1.tar.gz", hash = "sha256:7d4628a6e5d0f3f8e36411084a54cd2f876cd143d712575053716f3889604440"}, - {file = "mypy_boto3_sms-1.20.1-py3-none-any.whl", hash = "sha256:088e379e1791d96c74a0c78693311857d1b6eb919fffa363ccc87ce24f1e8b77"}, + {file = "mypy-boto3-sms-1.20.23.tar.gz", hash = "sha256:17fe35cc7f10d60b4563965c5b6f0879812e50d106c9a2438e035b700b47f62c"}, + {file = "mypy_boto3_sms-1.20.23-py3-none-any.whl", hash = "sha256:98a676a6503fea364f632c97568bb3d2a23e519d248a88ddc04974fed0332174"}, ] mypy-boto3-sms-voice = [ {file = "mypy-boto3-sms-voice-1.20.1.tar.gz", hash = "sha256:93aef85a75d6410cc9af4faf8042faecc0f1b0b508b769ca68e9214d928af798"}, @@ -5595,20 +5708,20 @@ mypy-boto3-snow-device-management = [ {file = "mypy_boto3_snow_device_management-1.20.1-py3-none-any.whl", hash = "sha256:f9bd4eb76b893cee3d289a9c615d306be8369ae92a945e5958ab1487a1ae5bc9"}, ] mypy-boto3-snowball = [ - {file = "mypy-boto3-snowball-1.20.1.tar.gz", hash = "sha256:40cc7a024be93bc92b673b20eb17938b0715e39dcb1ceafebd4bb0def5c1ff14"}, - {file = "mypy_boto3_snowball-1.20.1-py3-none-any.whl", hash = "sha256:0eaca1d7c68d52a9ee6509878ff4822bbe93e5498eba91c57dcc1318aa212829"}, + {file = "mypy-boto3-snowball-1.20.17.tar.gz", hash = "sha256:9075c4678cb8c58234bda0239fa6e2c2eb921da990caf8eca21e04d8c7e4e8f5"}, + {file = "mypy_boto3_snowball-1.20.17-py3-none-any.whl", hash = "sha256:0920ad116c23efcf82a429560b6e1ff0161e00209a59d32d2c6f818ed4da3070"}, ] mypy-boto3-sns = [ {file = "mypy-boto3-sns-1.20.8.tar.gz", hash = "sha256:343bf98d9b85982ac2a6ba6dccaa0260ada0d2015b9f1b6daa646fc825ee0db1"}, {file = "mypy_boto3_sns-1.20.8-py3-none-any.whl", hash = "sha256:3c011a5c56e0d6c41b289341892b6452852c619bd6b1fdfb08bfd8a0b44ada5a"}, ] mypy-boto3-sqs = [ - {file = "mypy-boto3-sqs-1.20.1.tar.gz", hash = "sha256:b1113241704a1015c63add947654571a8b67ade7895fd11a79282b9a1d65b5bc"}, - {file = "mypy_boto3_sqs-1.20.1-py3-none-any.whl", hash = "sha256:b12c71cbad7976aa83dcb2c41c227dc5b520555bf2022c825044568be3e45f82"}, + {file = "mypy-boto3-sqs-1.20.12.tar.gz", hash = "sha256:1c284553d0269b4379a6e9e18ff86e7dc8798c9b5a78db667ae78591779ffeb4"}, + {file = "mypy_boto3_sqs-1.20.12-py3-none-any.whl", hash = "sha256:0956b4fdc56f58a1666fb540a6c921e433d4d88b91914d1c73812985ea60a21d"}, ] mypy-boto3-ssm = [ - {file = "mypy-boto3-ssm-1.20.6.tar.gz", hash = "sha256:9903d65fcbe59db9b393fa3aa1801583dbe4421d571a35d13297fd5a19467e1c"}, - {file = "mypy_boto3_ssm-1.20.6-py3-none-any.whl", hash = "sha256:f0b186a5dff17a0d225d78ea5fcf7d840b2235f95b0e0188f9ffb5bbc3bd3b60"}, + {file = "mypy-boto3-ssm-1.20.16.tar.gz", hash = "sha256:1f14fb62988a5dd3a4fed8110c240a14220d807565c9e58f47515849f2c639c2"}, + {file = "mypy_boto3_ssm-1.20.16-py3-none-any.whl", hash = "sha256:14c8e8da6eb4fccd609cc3dbcc3a52cbd7b986ed1ecce15829fbae76c9c7150b"}, ] mypy-boto3-ssm-contacts = [ {file = "mypy-boto3-ssm-contacts-1.20.1.tar.gz", hash = "sha256:14f0be049151c7b04ac0a9afafc8689783ffcba8123d74583356904f6bc7cd79"}, @@ -5635,16 +5748,16 @@ mypy-boto3-stepfunctions = [ {file = "mypy_boto3_stepfunctions-1.20.1-py3-none-any.whl", hash = "sha256:437a875c2752018ba858cf29315e1519fc66908a17e1ef499506401a6930651f"}, ] mypy-boto3-storagegateway = [ - {file = "mypy-boto3-storagegateway-1.20.1.tar.gz", hash = "sha256:e83183935825183da654a41e380454c51c7ded09328cff9b1ab8b8ef47ecbe5d"}, - {file = "mypy_boto3_storagegateway-1.20.1-py3-none-any.whl", hash = "sha256:9d2c6e658d5d16e01f94809b2a20617f1b13cdb9fc427632f04d7f4eda7ac990"}, + {file = "mypy-boto3-storagegateway-1.20.17.tar.gz", hash = "sha256:63d6ef4a140b29fe61ade3bcb0b1c347248282a70f4ec56102d4441dab411a1a"}, + {file = "mypy_boto3_storagegateway-1.20.17-py3-none-any.whl", hash = "sha256:81a62e71717aea14debd95b203c460f94e3ddbc6e738ab913c4ee8afa0878f72"}, ] mypy-boto3-sts = [ - {file = "mypy-boto3-sts-1.20.1.tar.gz", hash = "sha256:b2e0afbea858a1be9f4cc35e7b9b3dbce46c8bd8dd4f5946a1de650a6afcd617"}, - {file = "mypy_boto3_sts-1.20.1-py3-none-any.whl", hash = "sha256:261a6febafcde2ad8554b2a37f60396edd51af01143e3b98e4e94a581ef14226"}, + {file = "mypy-boto3-sts-1.20.12.tar.gz", hash = "sha256:de14a4c82bd3e7d3aaae0aa3cb43b712ef454e9cf4246efa213e09a9e678bb95"}, + {file = "mypy_boto3_sts-1.20.12-py3-none-any.whl", hash = "sha256:787b9021d3b823714f38ecab23ca19f64867ad2d38eeab9cd758d63bdefdb502"}, ] mypy-boto3-support = [ - {file = "mypy-boto3-support-1.20.1.tar.gz", hash = "sha256:e93ec71141e9621e79e0be8728794114b80e6c7e49e22d9e5fef5cba0875c1a2"}, - {file = "mypy_boto3_support-1.20.1-py3-none-any.whl", hash = "sha256:af448053d2de0fafec1bc0f231d8ec2624bb4f9c12785af2cf1a17c8e5b6165c"}, + {file = "mypy-boto3-support-1.20.22.tar.gz", hash = "sha256:65d8c19ada2464ef7902e54075611b219e41633a865aa8743ac86844d1cccdb0"}, + {file = "mypy_boto3_support-1.20.22-py3-none-any.whl", hash = "sha256:a7fd3991a3db6c68942d81a239a78f5aeb3887576bbb325bd73c9b202829a2d2"}, ] mypy-boto3-swf = [ {file = "mypy-boto3-swf-1.20.1.tar.gz", hash = "sha256:ad847e5d5d6523ba5a2c2ee2fa636d37c4dbaa53c50c5534604040c1b540d7b5"}, @@ -5655,16 +5768,16 @@ mypy-boto3-synthetics = [ {file = "mypy_boto3_synthetics-1.20.1-py3-none-any.whl", hash = "sha256:cde898aee47f3804d77c1af71ac58943e3cac5dd238305d5b6a3c952d9e0101b"}, ] mypy-boto3-textract = [ - {file = "mypy-boto3-textract-1.20.1.tar.gz", hash = "sha256:dc8d2490a6f9034142a6867353c07d494bc5109c1e64fd88334a4627bfa284f1"}, - {file = "mypy_boto3_textract-1.20.1-py3-none-any.whl", hash = "sha256:fab708cf2d4641c1c565fab1b7f44f70f3fa44ca7f123f7177fb58aaf31602b2"}, + {file = "mypy-boto3-textract-1.20.15.tar.gz", hash = "sha256:a59c7894f4a72c983dc4a73f0f3bec64d0d5de50a4cebe3ab06fe0c1e416c651"}, + {file = "mypy_boto3_textract-1.20.15-py3-none-any.whl", hash = "sha256:8f73fde9c4965e9fa4a25197b14a2afd03a625fc28d57df6e6b7e367384f98c2"}, ] mypy-boto3-timestream-query = [ - {file = "mypy-boto3-timestream-query-1.20.1.tar.gz", hash = "sha256:48fa87b13e96c59eedac5ff36998f5d6a9092a10c87fed566281459ed0bf7c93"}, - {file = "mypy_boto3_timestream_query-1.20.1-py3-none-any.whl", hash = "sha256:20950fd608ddda653c7bf493363e21e947274583c8b1f06a1a302a10d57f4a0c"}, + {file = "mypy-boto3-timestream-query-1.20.13.tar.gz", hash = "sha256:4720f2b3e66cee8c38143c447c80731cc6eb805e3d985b5e6b6da0b3e93c2104"}, + {file = "mypy_boto3_timestream_query-1.20.13-py3-none-any.whl", hash = "sha256:f9ab418143c97cdda8a99f92ff4314ce0e01067de3add027b20a501911b42bba"}, ] mypy-boto3-timestream-write = [ - {file = "mypy-boto3-timestream-write-1.20.1.tar.gz", hash = "sha256:7ba259c72cd7a706d79d334f44257ce0645930f16e1d8997180c5a39d6cbbddd"}, - {file = "mypy_boto3_timestream_write-1.20.1-py3-none-any.whl", hash = "sha256:de05bb182889ef93496e5a988c86662c0344548e54399adc3db5520835e75e0f"}, + {file = "mypy-boto3-timestream-write-1.20.13.tar.gz", hash = "sha256:84784395fc855f2c324f03df2a8ca54e71f8e6307c5d570373d6e108619997d9"}, + {file = "mypy_boto3_timestream_write-1.20.13-py3-none-any.whl", hash = "sha256:afeba4086ccff4f6c81dd78aa99a1da51002526cf32e2cd69a319179cc3563b1"}, ] mypy-boto3-transcribe = [ {file = "mypy-boto3-transcribe-1.20.1.tar.gz", hash = "sha256:0a8158148d628b74e15a4980e68c36b181a7c77122aee03a84bea868c3d37959"}, @@ -5675,8 +5788,8 @@ mypy-boto3-transfer = [ {file = "mypy_boto3_transfer-1.20.6-py3-none-any.whl", hash = "sha256:2cb8b47bcdd7fa15afd6adf831d7aef6095f465df9b8317f5860ecbd64eb9f88"}, ] mypy-boto3-translate = [ - {file = "mypy-boto3-translate-1.20.4.tar.gz", hash = "sha256:5ca5a36df01b70248b528bf83b08638c071e4e0819ab789230efa0d2ab922cc5"}, - {file = "mypy_boto3_translate-1.20.4-py3-none-any.whl", hash = "sha256:525b400bc606e6db3cbd141082b3203b03e176d6e80cbd508709218de8bdaa36"}, + {file = "mypy-boto3-translate-1.20.13.tar.gz", hash = "sha256:751cdc58d4ca068d7a429e36aa043d0e6315bc9b57ecdefb03dffd9a87086b0d"}, + {file = "mypy_boto3_translate-1.20.13-py3-none-any.whl", hash = "sha256:2a78b3ddd8554ed6195a45b30d3ee4d75a1f428392089f0883d0b1fb6233f334"}, ] mypy-boto3-voice-id = [ {file = "mypy-boto3-voice-id-1.20.1.tar.gz", hash = "sha256:b84b2acc76b91a3378c384986baead9996d2d44feca67d158cb7555d479f46cf"}, @@ -5695,8 +5808,8 @@ mypy-boto3-wafv2 = [ {file = "mypy_boto3_wafv2-1.20.6-py3-none-any.whl", hash = "sha256:5bc85604cab6d21e60394dff04c43f4d17d125b13ed78651c31ca267aadb8599"}, ] mypy-boto3-wellarchitected = [ - {file = "mypy-boto3-wellarchitected-1.20.1.tar.gz", hash = "sha256:dea90a239683324af26be8a57873e6658bdebbe90b6f9f212a710e86d94d9a66"}, - {file = "mypy_boto3_wellarchitected-1.20.1-py3-none-any.whl", hash = "sha256:c8b36b76b6dcd12a3fbe71b69aa223a63589ab2199300076557042cb7d855c5c"}, + {file = "mypy-boto3-wellarchitected-1.20.16.tar.gz", hash = "sha256:91f274daaf30e2e439cabef6e0eac9b0e4a4a05f63fea6d9204a632e93c36f79"}, + {file = "mypy_boto3_wellarchitected-1.20.16-py3-none-any.whl", hash = "sha256:f312f68a66c8b52ad530db4c8d6d0ee46ccf14ce46f469f3e0110b2b78f49c5b"}, ] mypy-boto3-wisdom = [ {file = "mypy-boto3-wisdom-1.20.1.tar.gz", hash = "sha256:49a2d775b83c2f823864d8ffe3fd993f5ec2bc8deeece8b9db4e554c099701e7"}, @@ -5719,8 +5832,12 @@ mypy-boto3-workmailmessageflow = [ {file = "mypy_boto3_workmailmessageflow-1.20.1-py3-none-any.whl", hash = "sha256:32b2ed2afd0ada1ed3be9062d9a77211a670ae40521d2d043b5112a796aceded"}, ] mypy-boto3-workspaces = [ - {file = "mypy-boto3-workspaces-1.20.1.tar.gz", hash = "sha256:528829c23dcec1354b262fd16616b1dfccf6081fec56c452e53ef96cc4b53f69"}, - {file = "mypy_boto3_workspaces-1.20.1-py3-none-any.whl", hash = "sha256:39b2378d3ac10f1f41a3111d8b7435b53f66c4b15254f126342c255d16a1fb90"}, + {file = "mypy-boto3-workspaces-1.20.12.tar.gz", hash = "sha256:aada548a9f56a79f28e74b15e48b82b65705e22fca7bc6c2dfd99236e5db9fd8"}, + {file = "mypy_boto3_workspaces-1.20.12-py3-none-any.whl", hash = "sha256:80fb3702a30057dde09b6a813e73f71d34e703e222c9238ea8e17dddd1aed61d"}, +] +mypy-boto3-workspaces-web = [ + {file = "mypy-boto3-workspaces-web-1.20.17.tar.gz", hash = "sha256:c5a9804ee1009415b44f825842c5a01bf36ec52ddc6a09ab0b0aefd183922fd0"}, + {file = "mypy_boto3_workspaces_web-1.20.17-py3-none-any.whl", hash = "sha256:0febf542616356f9c694fccc3f7f74cf3ebc08de8811211a0a5cdd72483cb4b8"}, ] mypy-boto3-xray = [ {file = "mypy-boto3-xray-1.20.1.tar.gz", hash = "sha256:3d5c6d0be7af0165879a9bccec62b684c957a1fa3e6dceb2f558a8640b44501c"}, @@ -5779,8 +5896,8 @@ pylev = [ {file = "pylev-1.4.0.tar.gz", hash = "sha256:9e77e941042ad3a4cc305dcdf2b2dec1aec2fbe3dd9015d2698ad02b173006d1"}, ] pylic = [ - {file = "pylic-2.1.0-py3-none-any.whl", hash = "sha256:40becc545f841dc66779a478321e9430756546e6843f348eea7a95a66d9a6aca"}, - {file = "pylic-2.1.0.tar.gz", hash = "sha256:0d927629cff3771b3f81842ded334eb07d610cd31b9c93957a73dc35a85f6440"}, + {file = "pylic-2.2.0-py3-none-any.whl", hash = "sha256:14b014852b5aa76230a52568da3b0ca4e1f8d7e6a4cc89137da70564237cc8bd"}, + {file = "pylic-2.2.0.tar.gz", hash = "sha256:1fdf980c69b2edcdeb9669b0a1574f55da2560059864dc8c81cbee3dcbd8d225"}, ] pyparsing = [ {file = "pyparsing-3.0.6-py3-none-any.whl", hash = "sha256:04ff808a5b90911829c55c4e26f75fa5ca8a2f5f36aa3a51f68e27033341d3e4"}, @@ -5795,16 +5912,16 @@ pytest-cov = [ {file = "pytest_cov-2.12.1-py2.py3-none-any.whl", hash = "sha256:261bb9e47e65bd099c89c3edf92972865210c36813f80ede5277dceb77a4a62a"}, ] pytest-forked = [ - {file = "pytest-forked-1.3.0.tar.gz", hash = "sha256:6aa9ac7e00ad1a539c41bec6d21011332de671e938c7637378ec9710204e37ca"}, - {file = "pytest_forked-1.3.0-py2.py3-none-any.whl", hash = "sha256:dc4147784048e70ef5d437951728825a131b81714b398d5d52f17c7c144d8815"}, + {file = "pytest-forked-1.4.0.tar.gz", hash = "sha256:8b67587c8f98cbbadfdd804539ed5455b6ed03802203485dd2f53c1422d7440e"}, + {file = "pytest_forked-1.4.0-py3-none-any.whl", hash = "sha256:bbbb6717efc886b9d64537b41fb1497cfaf3c9601276be8da2cccfea5a3c8ad8"}, ] pytest-mock = [ {file = "pytest-mock-3.6.1.tar.gz", hash = "sha256:40217a058c52a63f1042f0784f62009e976ba824c418cced42e88d5f40ab0e62"}, {file = "pytest_mock-3.6.1-py3-none-any.whl", hash = "sha256:30c2f2cc9759e76eee674b81ea28c9f0b94f8f0445a1b87762cadf774f0df7e3"}, ] pytest-xdist = [ - {file = "pytest-xdist-2.4.0.tar.gz", hash = "sha256:89b330316f7fc475f999c81b577c2b926c9569f3d397ae432c0c2e2496d61ff9"}, - {file = "pytest_xdist-2.4.0-py3-none-any.whl", hash = "sha256:7b61ebb46997a0820a263553179d6d1e25a8c50d8a8620cd1aa1e20e3be99168"}, + {file = "pytest-xdist-2.5.0.tar.gz", hash = "sha256:4580deca3ff04ddb2ac53eba39d76cb5dd5edeac050cb6fbc768b0dd712b4edf"}, + {file = "pytest_xdist-2.5.0-py3-none-any.whl", hash = "sha256:6fe5c74fec98906deb8f2d2b616b5c782022744978e7bd4695d39c8f42d0ce65"}, ] python-dateutil = [ {file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"}, @@ -5845,57 +5962,6 @@ pyyaml = [ {file = "PyYAML-6.0-cp39-cp39-win_amd64.whl", hash = "sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c"}, {file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"}, ] -regex = [ - {file = "regex-2021.11.10-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9345b6f7ee578bad8e475129ed40123d265464c4cfead6c261fd60fc9de00bcf"}, - {file = "regex-2021.11.10-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:416c5f1a188c91e3eb41e9c8787288e707f7d2ebe66e0a6563af280d9b68478f"}, - {file = "regex-2021.11.10-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e0538c43565ee6e703d3a7c3bdfe4037a5209250e8502c98f20fea6f5fdf2965"}, - {file = "regex-2021.11.10-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7ee1227cf08b6716c85504aebc49ac827eb88fcc6e51564f010f11a406c0a667"}, - {file = "regex-2021.11.10-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6650f16365f1924d6014d2ea770bde8555b4a39dc9576abb95e3cd1ff0263b36"}, - {file = "regex-2021.11.10-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:30ab804ea73972049b7a2a5c62d97687d69b5a60a67adca07eb73a0ddbc9e29f"}, - {file = "regex-2021.11.10-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:68a067c11463de2a37157930d8b153005085e42bcb7ad9ca562d77ba7d1404e0"}, - {file = "regex-2021.11.10-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:162abfd74e88001d20cb73ceaffbfe601469923e875caf9118333b1a4aaafdc4"}, - {file = "regex-2021.11.10-cp310-cp310-win32.whl", hash = "sha256:98ba568e8ae26beb726aeea2273053c717641933836568c2a0278a84987b2a1a"}, - {file = "regex-2021.11.10-cp310-cp310-win_amd64.whl", hash = "sha256:780b48456a0f0ba4d390e8b5f7c661fdd218934388cde1a974010a965e200e12"}, - {file = "regex-2021.11.10-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:dba70f30fd81f8ce6d32ddeef37d91c8948e5d5a4c63242d16a2b2df8143aafc"}, - {file = "regex-2021.11.10-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e1f54b9b4b6c53369f40028d2dd07a8c374583417ee6ec0ea304e710a20f80a0"}, - {file = "regex-2021.11.10-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fbb9dc00e39f3e6c0ef48edee202f9520dafb233e8b51b06b8428cfcb92abd30"}, - {file = "regex-2021.11.10-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:666abff54e474d28ff42756d94544cdfd42e2ee97065857413b72e8a2d6a6345"}, - {file = "regex-2021.11.10-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5537f71b6d646f7f5f340562ec4c77b6e1c915f8baae822ea0b7e46c1f09b733"}, - {file = "regex-2021.11.10-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ed2e07c6a26ed4bea91b897ee2b0835c21716d9a469a96c3e878dc5f8c55bb23"}, - {file = "regex-2021.11.10-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ca5f18a75e1256ce07494e245cdb146f5a9267d3c702ebf9b65c7f8bd843431e"}, - {file = "regex-2021.11.10-cp36-cp36m-win32.whl", hash = "sha256:93a5051fcf5fad72de73b96f07d30bc29665697fb8ecdfbc474f3452c78adcf4"}, - {file = "regex-2021.11.10-cp36-cp36m-win_amd64.whl", hash = "sha256:b483c9d00a565633c87abd0aaf27eb5016de23fed952e054ecc19ce32f6a9e7e"}, - {file = "regex-2021.11.10-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:fff55f3ce50a3ff63ec8e2a8d3dd924f1941b250b0aac3d3d42b687eeff07a8e"}, - {file = "regex-2021.11.10-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e32d2a2b02ccbef10145df9135751abea1f9f076e67a4e261b05f24b94219e36"}, - {file = "regex-2021.11.10-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:53db2c6be8a2710b359bfd3d3aa17ba38f8aa72a82309a12ae99d3c0c3dcd74d"}, - {file = "regex-2021.11.10-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2207ae4f64ad3af399e2d30dde66f0b36ae5c3129b52885f1bffc2f05ec505c8"}, - {file = "regex-2021.11.10-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d5ca078bb666c4a9d1287a379fe617a6dccd18c3e8a7e6c7e1eb8974330c626a"}, - {file = "regex-2021.11.10-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dd33eb9bdcfbabab3459c9ee651d94c842bc8a05fabc95edf4ee0c15a072495e"}, - {file = "regex-2021.11.10-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:05b7d6d7e64efe309972adab77fc2af8907bb93217ec60aa9fe12a0dad35874f"}, - {file = "regex-2021.11.10-cp37-cp37m-win32.whl", hash = "sha256:e71255ba42567d34a13c03968736c5d39bb4a97ce98188fafb27ce981115beec"}, - {file = "regex-2021.11.10-cp37-cp37m-win_amd64.whl", hash = "sha256:07856afef5ffcc052e7eccf3213317fbb94e4a5cd8177a2caa69c980657b3cb4"}, - {file = "regex-2021.11.10-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ba05430e819e58544e840a68b03b28b6d328aff2e41579037e8bab7653b37d83"}, - {file = "regex-2021.11.10-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7f301b11b9d214f83ddaf689181051e7f48905568b0c7017c04c06dfd065e244"}, - {file = "regex-2021.11.10-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4aaa4e0705ef2b73dd8e36eeb4c868f80f8393f5f4d855e94025ce7ad8525f50"}, - {file = "regex-2021.11.10-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:788aef3549f1924d5c38263104dae7395bf020a42776d5ec5ea2b0d3d85d6646"}, - {file = "regex-2021.11.10-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f8af619e3be812a2059b212064ea7a640aff0568d972cd1b9e920837469eb3cb"}, - {file = "regex-2021.11.10-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:85bfa6a5413be0ee6c5c4a663668a2cad2cbecdee367630d097d7823041bdeec"}, - {file = "regex-2021.11.10-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f23222527b307970e383433daec128d769ff778d9b29343fb3496472dc20dabe"}, - {file = "regex-2021.11.10-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:da1a90c1ddb7531b1d5ff1e171b4ee61f6345119be7351104b67ff413843fe94"}, - {file = "regex-2021.11.10-cp38-cp38-win32.whl", hash = "sha256:0617383e2fe465732af4509e61648b77cbe3aee68b6ac8c0b6fe934db90be5cc"}, - {file = "regex-2021.11.10-cp38-cp38-win_amd64.whl", hash = "sha256:a3feefd5e95871872673b08636f96b61ebef62971eab044f5124fb4dea39919d"}, - {file = "regex-2021.11.10-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f7f325be2804246a75a4f45c72d4ce80d2443ab815063cdf70ee8fb2ca59ee1b"}, - {file = "regex-2021.11.10-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:537ca6a3586931b16a85ac38c08cc48f10fc870a5b25e51794c74df843e9966d"}, - {file = "regex-2021.11.10-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eef2afb0fd1747f33f1ee3e209bce1ed582d1896b240ccc5e2697e3275f037c7"}, - {file = "regex-2021.11.10-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:432bd15d40ed835a51617521d60d0125867f7b88acf653e4ed994a1f8e4995dc"}, - {file = "regex-2021.11.10-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b43c2b8a330a490daaef5a47ab114935002b13b3f9dc5da56d5322ff218eeadb"}, - {file = "regex-2021.11.10-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:962b9a917dd7ceacbe5cd424556914cb0d636001e393b43dc886ba31d2a1e449"}, - {file = "regex-2021.11.10-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fa8c626d6441e2d04b6ee703ef2d1e17608ad44c7cb75258c09dd42bacdfc64b"}, - {file = "regex-2021.11.10-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:3c5fb32cc6077abad3bbf0323067636d93307c9fa93e072771cf9a64d1c0f3ef"}, - {file = "regex-2021.11.10-cp39-cp39-win32.whl", hash = "sha256:3b5df18db1fccd66de15aa59c41e4f853b5df7550723d26aa6cb7f40e5d9da5a"}, - {file = "regex-2021.11.10-cp39-cp39-win_amd64.whl", hash = "sha256:83ee89483672b11f8952b158640d0c0ff02dc43d9cb1b70c1564b49abe92ce29"}, - {file = "regex-2021.11.10.tar.gz", hash = "sha256:f341ee2df0999bfdf7a95e448075effe0db212a59387de1a70690e4acb03d4c6"}, -] requests = [ {file = "requests-2.26.0-py2.py3-none-any.whl", hash = "sha256:6c1246513ecd5ecd4528a0906f910e8f0f9c6b8ec72030dc9fd154dc1a6efd24"}, {file = "requests-2.26.0.tar.gz", hash = "sha256:b8aa58f8cf793ffd8782d3d8cb19e66ef36f7aba4353eec859e74678b01b07a7"}, diff --git a/pyproject.toml b/pyproject.toml index 2e0c0d56..90b519f5 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "aws_sra_examples" -version = "1.2.1" +version = "1.3.0" description = "AWS Security Reference Architecture Examples" authors = ["Amazon Web Services "]