|
| 1 | +# Account Alternate Contacts<!-- omit in toc --> |
| 2 | + |
| 3 | +Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. SPDX-License-Identifier: CC-BY-SA-4.0 |
| 4 | + |
| 5 | +## Table of Contents |
| 6 | + |
| 7 | +- [Table of Contents](#table-of-contents) |
| 8 | +- [Introduction](#introduction) |
| 9 | +- [Deployed Resource Details](#deployed-resource-details) |
| 10 | +- [Implementation Instructions](#implementation-instructions) |
| 11 | +- [References](#references) |
| 12 | + |
| 13 | +--- |
| 14 | + |
| 15 | +## Introduction |
| 16 | + |
| 17 | +The Account Alternate Contacts solution sets alternate contacts for all existing and future AWS Organization accounts. |
| 18 | + |
| 19 | +**Key solution features:** |
| 20 | + |
| 21 | +- Sets different alternate contacts for: |
| 22 | + - `Billing`: The alternate billing contact will receive billing-related notifications, such as invoice availability notifications. |
| 23 | + - `Operations`: The alternate operations contact will receive operations-related notifications. |
| 24 | + - `Security`: The alternate security contact will receive security-related notifications, including notifications from the AWS Abuse Team. |
| 25 | +- Assumes a role in the management and member accounts to set the alternate contacts. |
| 26 | +- Sets alternate contacts for all existing accounts including the `management account` and future accounts. |
| 27 | +- Ability to delete alternate contacts via a parameter and CloudFormation update event. |
| 28 | + |
| 29 | +--- |
| 30 | + |
| 31 | +## Deployed Resource Details |
| 32 | + |
| 33 | + |
| 34 | + |
| 35 | +### 1.0 Organization Management Account<!-- omit in toc --> |
| 36 | + |
| 37 | +#### 1.1 AWS CloudFormation<!-- omit in toc --> |
| 38 | + |
| 39 | +- 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. |
| 40 | +- 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`. |
| 41 | +- For parameter details, review the [AWS CloudFormation templates](templates/). |
| 42 | + |
| 43 | +#### 1.2 IAM Roles<!-- omit in toc --> |
| 44 | + |
| 45 | +- The `Lambda IAM Role` is used by the Lambda function to identify existing and future accounts that need Account Alternate Contacts configured. |
| 46 | +- The `Configuration IAM Role` is assumed by the Lambda function to set alternate contacts for the management account and the member accounts. |
| 47 | +- The `Event Rule IAM Role` is assumed by EventBridge to forward Global events to the `Home Region` default Event Bus. |
| 48 | + |
| 49 | +#### 1.3 Regional Event Rules<!-- omit in toc --> |
| 50 | + |
| 51 | +- The `AWS Control Tower Lifecycle Event Rule` triggers the `AWS Lambda Function` when a new AWS Account is provisioned through AWS Control Tower. |
| 52 | +- The `Organization Compliance Scheduled Event Rule` triggers the `AWS Lambda Function` to capture AWS Account status updates (e.g. suspended to active). |
| 53 | + - A parameter is provided to set the schedule frequency. |
| 54 | + - See the [Instructions to Manually Run the Lambda Function](#instructions-to-manually-run-the-lambda-function) for triggering the `AWS Lambda Function` before the next scheduled run time. |
| 55 | +- The `AWS Organizations Event Rule` triggers the `AWS Lambda Function` when updates are made to accounts within the organization. |
| 56 | + - When AWS Accounts are added to the AWS Organization outside of the AWS Control Tower Account Factory. (e.g. account created via AWS Organizations console, account invited from another AWS Organization). |
| 57 | + - When tags are added or updated on AWS Accounts. |
| 58 | + |
| 59 | +#### 1.4 Global Event Rules<!-- omit in toc --> |
| 60 | + |
| 61 | +- If the `Home Region` is different from the `Global Region (e.g. us-east-1)`, then global event rules are created within the `Global Region` to forward events to the `Home Region` default Event Bus. |
| 62 | +- The `AWS Organizations Event Rule` forwards AWS Organization account update events. |
| 63 | + |
| 64 | +#### 1.5 Dead Letter Queue (DLQ)<!-- omit in toc --> |
| 65 | + |
| 66 | +- SQS dead letter queue used for retaining any failed Lambda events. |
| 67 | + |
| 68 | +#### 1.6 AWS Lambda Function<!-- omit in toc --> |
| 69 | + |
| 70 | +- The Lambda function includes logic to set Account Alternate Contacts. |
| 71 | + |
| 72 | +#### 1.7 Lambda CloudWatch Log Group<!-- omit in toc --> |
| 73 | + |
| 74 | +- All the `AWS Lambda Function` logs are sent to a CloudWatch Log Group `</aws/lambda/<LambdaFunctionName>` to help with debugging and traceability of the actions performed. |
| 75 | +- By default the `AWS Lambda Function` will create the CloudWatch Log Group and logs are encrypted with a CloudWatch Logs service managed encryption key. |
| 76 | +- Parameters are provided for changing the default log group retention and encryption KMS key. |
| 77 | + |
| 78 | +#### 1.8 Alarm SNS Topic<!-- omit in toc --> |
| 79 | + |
| 80 | +- SNS Topic used to notify subscribers when messages hit the Dead Letter Queue (DLQ). |
| 81 | + |
| 82 | +#### 1.9 SNS Topic<!-- omit in toc --> |
| 83 | + |
| 84 | +- SNS Topic used to fanout the Lambda function for setting the Account Alternate Contact |
| 85 | + |
| 86 | +#### 1.10 Account Alternate Contacts<!-- omit in toc --> |
| 87 | + |
| 88 | +- Account Alternate Contacts (Billing, Operations, Security) are configured for all accounts. |
| 89 | +- Account Alternate Contacts can be updated as necessary via CloudFormation parameters. |
| 90 | +- Deleting the CloudFormation stack, will not remove the existing Account Alternate Contacts. (see [Solution Delete Instructions](#solution-delete-instructions) for details on deleting alternate contacts) |
| 91 | +- **Note:** If a value is provided to the `Exclude Alternate Contact Account Tags` optional CloudFormation parameter, AWS accounts matching those tags will be excluded from account alternate contacts being applied. |
| 92 | + |
| 93 | +--- |
| 94 | + |
| 95 | +### 2.0 All Existing and Future Organization Member Accounts<!-- omit in toc --> |
| 96 | + |
| 97 | +#### 2.1 AWS CloudFormation<!-- omit in toc --> |
| 98 | + |
| 99 | +- See [1.1 AWS CloudFormation](#11-aws-cloudformation) |
| 100 | + |
| 101 | +#### 2.2 Configuration IAM Role<!-- omit in toc --> |
| 102 | + |
| 103 | +- See [1.3 Configuration IAM Role](#13-configuration-iam-role) |
| 104 | + |
| 105 | +#### 2.3 Account Alternate Contacts<!-- omit in toc --> |
| 106 | + |
| 107 | +- Account Alternate Contacts (Billing, Operations, Security) are configured for all accounts. |
| 108 | +- Account Alternate Contacts can be updated as necessary via CloudFormation parameters. |
| 109 | +- Deleting the CloudFormation stack, will not remove the existing Account Alternate Contacts. (see [Solution Delete Instructions](#solution-delete-instructions) for details on deleting alternate contacts) |
| 110 | +- **Note:** If a value is provided to the `Exclude Alternate Contact Account Tags` optional CloudFormation parameter, AWS accounts matching those tags will be excluded from account alternate contacts being applied. |
| 111 | + |
| 112 | +--- |
| 113 | + |
| 114 | +## Implementation Instructions |
| 115 | + |
| 116 | +### Prerequisites<!-- omit in toc --> |
| 117 | + |
| 118 | +1. [Download and Stage the SRA Solutions](../../../docs/DOWNLOAD-AND-STAGE-SOLUTIONS.md). **Note:** This only needs to be done once for all the solutions. |
| 119 | +2. Verify that the [SRA Prerequisites Solution](../../common/common_prerequisites/) has been deployed. |
| 120 | + |
| 121 | +### Solution Deployment<!-- omit in toc --> |
| 122 | + |
| 123 | +Choose a Deployment Method: |
| 124 | + |
| 125 | +- [AWS CloudFormation](#aws-cloudformation) |
| 126 | +- [Customizations for AWS Control Tower](../../../docs/CFCT-DEPLOYMENT-INSTRUCTIONS.md) |
| 127 | + |
| 128 | +#### AWS CloudFormation<!-- omit in toc --> |
| 129 | + |
| 130 | +In the `management account (home region)`, launch an AWS CloudFormation **Stack** using one of the options below: |
| 131 | + |
| 132 | +- **Option 1:** (Recommended) Use the [sra-account-alternate-contacts-main-ssm.yaml](templates/sra-account-alternate-contacts-main-ssm.yaml) template. This is a more automated approach where some of the CloudFormation parameters are populated from |
| 133 | + SSM parameters created by the [SRA Prerequisites Solution](../../common/common_prerequisites/). |
| 134 | + |
| 135 | + ```bash |
| 136 | + aws cloudformation deploy --template-file $HOME/aws-sra-examples/aws_sra_examples/solutions/account/account_alternate_contacts/templates/sra-account-alternate-contacts-main-ssm.yaml --stack-name sra-account-alternate-contacts-main-ssm --capabilities CAPABILITY_NAMED_IAM --parameter-overrides pBillingContactAction=add pBillingName=<BILLING_NAME> pBillingTitle=<BILLING_TITLE> pBillingEmail=<BILLING_EMAIL> pBillingPhone=<BILLING_PHONE> pOperationsContactAction=add pOperationsName=<OPERATIONS_NAME> pOperationsTitle=<OPERATIONS_TITLE> pOperationsEmail=<OPERATIONS_EMAIL> pOperationsPhone=<OPERATIONS_PHONE> pSecurityContactAction=add pSecurityName=<SECURITY_NAME> pSecurityTitle=<SECURITY_TITLE> pSecurityEmail=<SECURITY_EMAIL> pSecurityPhone=<SECURITY_PHONE> pSRAAlarmEmail=<SRA_ALARM_EMAIL> pExcludeAlternateContactAccountTags='<EXCLUDE_ALTERNATE_CONTACT_ACCOUNT_TAGS>' |
| 137 | + ``` |
| 138 | + |
| 139 | +- **Option 2:** Use the [sra-account-alternate-contacts-main.yaml](templates/sra-account-alternate-contacts-main.yaml) template. Input is required for the CloudFormation parameters where the default is not set. |
| 140 | + |
| 141 | + ```bash |
| 142 | + aws cloudformation deploy --template-file $HOME/aws-sra-examples/aws_sra_examples/solutions/account/account_alternate_contacts/templates/sra-account-alternate-contacts-main.yaml --stack-name sra-account-alternate-contacts-main --capabilities CAPABILITY_NAMED_IAM --parameter-overrides pManagementAccountId=<MANAGEMENT_ACCOUNT_ID> pOrganizationId=<ORGANIZATION_ID> pRootOrganizationalUnitId=<ROOT_ORGANIZATIONAL_UNIT_ID> pSRAStagingS3BucketName=<SRA_STAGING_S3_BUCKET_NAME> pBillingContactAction=add pBillingName=<BILLING_NAME> pBillingTitle=<BILLING_TITLE> pBillingEmail=<BILLING_EMAIL> pBillingPhone=<BILLING_PHONE> pOperationsContactAction=add pOperationsName=<OPERATIONS_NAME> pOperationsTitle=<OPERATIONS_TITLE> pOperationsEmail=<OPERATIONS_EMAIL> pOperationsPhone=<OPERATIONS_PHONE> pSecurityContactAction=add pSecurityName=<SECURITY_NAME> pSecurityTitle=<SECURITY_TITLE> pSecurityEmail=<SECURITY_EMAIL> pSecurityPhone=<SECURITY_PHONE> pSRAAlarmEmail=<SRA_ALARM_EMAIL> pExcludeAlternateContactAccountTags='<EXCLUDE_ALTERNATE_CONTACT_ACCOUNT_TAGS>' |
| 143 | + ``` |
| 144 | + |
| 145 | +#### Verify Solution Deployment<!-- omit in toc --> |
| 146 | + |
| 147 | +1. Log into the `management account` and navigate to the Account page |
| 148 | + 1. Verify that the Alternate Contacts are set correctly. |
| 149 | +2. Log into a member account and verify the Alternate Contacts are set correctly. |
| 150 | + |
| 151 | +#### Solution Delete Instructions<!-- omit in toc --> |
| 152 | + |
| 153 | +**Note:** Deleting the solution will not delete the existing Account Alternate Contacts. If needed, update the CloudFormation stack to provide new alternate contacts. |
| 154 | + |
| 155 | +1. (Optional) In the `management account (home region)`, to delete the alternate contacts, change the `Billing Alternate Contact Action`, `Operations Alternate Contact Action`, and `Security Alternate Contact Action` parameters to `delete` and update |
| 156 | + the AWS CloudFormation Stack (`sra-account-alternate-contacts-main-ssm` or `sra-account-alternate-contacts-main`). |
| 157 | +2. In the `management account (home region)`, delete the AWS CloudFormation **Stack** (`sra-account-alternate-contacts-main-ssm` or `sra-account-alternate-contacts-main`). |
| 158 | +3. In the `management account (home region)`, delete the AWS CloudWatch **Log Group** (e.g. /aws/lambda/<solution_name>) for the Lambda function deployed. |
| 159 | + |
| 160 | +#### Instructions to Manually Run the Lambda Function<!-- omit in toc --> |
| 161 | + |
| 162 | +1. In the `management account (home region)`. |
| 163 | +2. Navigate to the AWS Lambda Functions page. |
| 164 | +3. Select the `checkbox` next to the Lambda Function and select `Test` from the `Actions` menu. |
| 165 | +4. Scroll down to view the `Test event`. |
| 166 | +5. Click the `Test` button to trigger the Lambda Function with the default values. |
| 167 | +6. Verify that the updates were successful within the expected account(s). |
| 168 | + |
| 169 | +--- |
| 170 | + |
| 171 | +## References |
| 172 | + |
| 173 | +- [Update the primary and alternate contact information](https://docs.aws.amazon.com/accounts/latest/reference/manage-acct-update-contact.html) |
| 174 | +- [Adding, changing, or removing alternate contacts](https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/manage-account-payment.html#manage-account-payment-alternate-contacts) |
0 commit comments