AWS Landing Zone Accelerator - Part 3: Configuring Global Settings for Your Organization
Welcome back to my deep dive into the AWS Landing Zone Accelerator (LZA)!
We’ve made some good progress so far. In Part 1, we introduced the LZA and explained how it can help you build a well-managed AWS environment. In Part 2, we got hands-on and learned how to set up your AWS Organization and create new accounts.
Now, in Part 3, we’re going to take a broader perspective and explore the global settings that the LZA provides. These settings let you establish standardised configurations across your entire AWS organization, ensuring consistency and simplifying management.
Configuring AWS Control Tower Settings
AWS Control Tower is a service that simplifies the setup and governance of a multi-account AWS environment. It helps organizations establish a well-architected, secure, and compliant AWS environment by automating the creation of a “landing zone” – a pre-configured, multi-account setup based on AWS best practices.
- Automated Landing Zone Setup: Control Tower automates the creation of essential AWS accounts (management, log archive, audit) and configures them with foundational services like AWS Organizations, AWS Config, and AWS CloudTrail. This provides a solid starting point for your AWS environment.
- Controls: It implements pre-configured “controls” – preventive and detective controls that help enforce security, compliance, and operational best practices. These controls can restrict certain actions (preventive) or alert you to non-compliant configurations (detective).
- Account Factory: Control Tower provides an “Account Factory” that allows you to easily provision new AWS accounts with consistent configurations and pre-applied guardrails. This ensures that all accounts within your organization adhere to your established standards.
- Centralised Governance: It offers a centralised dashboard that provides visibility into the compliance status of your accounts and resources, making it easier to manage and govern your AWS environment.
Update the LZA configuration:
- Open the
global-config.yaml
file in your local copy of theaws-accelerator-config
repository. - Find the
controlTower
section and make sure it looks something like this:
controlTower:
enable: true # Confirms you're using Control Tower
landingZone:
version: '3.3' # Specify your Control Tower version
logging:
loggingBucketRetentionDays: 365 # How long to keep logs (in days)
accessLoggingBucketRetentionDays: 365 # How long to keep access logs (in days)
organizationTrail: true # Turns on CloudTrail logging
security:
enableIdentityCenterAccess: true # Enables IAM Identity Center
controls:
controlTowerControls:
- identifier: AWS-GR_ROOT_ACCOUNT_MFA_ENABLED # Example Control Tower control
enable: true # Enable the control
deploymentTargets:
organizationalUnits:
- Root # Apply the control to the whole organization
homeRegion: eu-west-1 # Your main AWS region
enabledRegions: # All the AWS regions you want to use
- eu-west-1
managementAccountAccessRole: AWSControlTowerExecution # Name of the management account role
- enable: Confirms that you’re using AWS Control Tower.
- version: Specifies the version of Control Tower you’re using.
- loggingBucketRetentionDays: How long to keep logs (in days).
- accessLoggingBucketRetentionDays: How long to keep access logs (in days).
- organizationTrail: Turns on CloudTrail logging, which keeps a record of activity in your AWS account.
- enableIdentityCenterAccess: Enables IAM Identity Center, which helps you manage who has access to your AWS resources.
- controls: Control Tower offers a set of guardrails (preventive, detective and proactive) to enforce security and compliance best practices. You can customise which guardrails are active in your Landing Zone. I’ve enabled AWS-GR_ROOT_ACCOUNT_MFA_ENABLED to require MFA for the root user, but you can explore and enable other relevant guardrails based on your needs.
- homeRegion: Your primary AWS region (e.g., eu-west-1 for Ireland).
- enabledRegions: A list of all the AWS regions you want to be able to use.
- managementAccountAccessRole: The name of the IAM role used to access the management account.
Save your changes:
- Use these commands to save your changes and update the LZA configuration:
git add .
git commit -m "Updating the Control Tower Configuration"
git push
Logging
Logging is the process of recording events and actions that occur within a system, application, or network. Think of it as a detailed diary of what’s happening behind the scenes. These logs contain valuable information, such as timestamps, user actions, errors, warnings, and system events.
Logging is absolutely essential for a multitude of reasons:
- Troubleshooting: When something goes wrong, logs are your best friend. They provide a trail of events leading up to the issue, helping you pinpoint the root cause and fix it quickly.
- Debugging: During development, logs help developers understand the flow of their code and identify bugs. They can track variable values, function calls, and other relevant information.
- Monitoring: Logs can be used to monitor the performance and health of systems and applications. By analyzing log data, you can identify performance bottlenecks, detect anomalies, and proactively address potential problems.
- Security: Logs play a crucial role in security. They record user activity, login attempts, and other security-related events, which can be used to detect and investigate security breaches.
- Auditing: Many regulations require organizations to maintain audit trails of system activity. Logs provide this audit trail, demonstrating compliance and accountability.
- Analysis: Logs can be analyzed to gain insights into user behavior, system usage patterns, and other valuable information that can be used to improve pe
Update the LZA configuration:
- Open the
global-config.yaml
file in your local copy of theaws-accelerator-config
repository. - Find the
logging
section and make sure it looks something like this:
logging:
account: LogArchive
centralizedLoggingRegion: eu-west-1
cloudtrail:
enable: false
organizationTrail: false
centralLogBucket:
applyAcceleratorManagedPolicy: true
lifecycleRules:
- enabled: true
abortIncompleteMultipartUpload: 7
expiration: 365
expiredObjectDeleteMarker: false
noncurrentVersionExpiration: 365
accessLogBucket:
enable: true
deploymentTargets:
organizationalUnits:
- Root
applyAcceleratorManagedPolicy: true
lifecycleRules:
- enabled: true
abortIncompleteMultipartUpload: 7
expiration: 365
expiredObjectDeleteMarker: false
noncurrentVersionExpiration: 365
cloudwatchLogs:
enable: true
encryption:
useCMK: true
deploymentTargets:
organizationalUnits:
- Root
dataProtection:
managedDataIdentifiers:
categories:
- Credentials
deploymentTargets:
organizationalUnits:
- Root
dynamicPartitioning: dynamic-partitioning/log-filters.json
elbLogBucket:
applyAcceleratorManagedPolicy: true
lifecycleRules:
- enabled: true
abortIncompleteMultipartUpload: 7
expiration: 365
expiredObjectDeleteMarker: false
noncurrentVersionExpiration: 365
sessionManager:
sendToCloudWatchLogs: true
sendToS3: true
lifecycleRules:
- enabled: true
abortIncompleteMultipartUpload: 7
expiration: 365
expiredObjectDeleteMarker: false
noncurrentVersionExpiration: 365
attachPolicyToIamRoles:
- EC2-Default-SSM-AD-Role
- account: The name of the account where your logs will be stored.
- centralizedLoggingRegion: The AWS region where your central logging account is located.
- cloudtrail: We don’t need to configure this here because we’re using Control Tower, which handles CloudTrail for us.
- centralLogBucket: Settings for your central log bucket, including a lifecycle policy to manage log retention.
- accessLogBucket: Settings for the bucket that stores access logs.
- cloudwatchLogs: Settings for CloudWatch Logs, including encryption and data protection features.
- elbLogBucket: Settings for the bucket that stores logs from Elastic Load Balancers (ELBs).
- sessionManager: Settings for AWS Session Manager logs, which allow you to connect to your EC2 instances securely.
For instance, the above configuration centralises logs in the Log Archive account in eu-west-1, using lifecycle policies for log retention in S3 buckets, enabling CloudWatch Logs encryption with data protection to mask credentials, and setting up dynamic partitioning for CloudWatch Logs. It also manages access logs, ELB logs, and Session Manager logs ensuring comprehensive logging across the AWS organization.
Save your changes:
- Use these commands to save your changes and update the LZA configuration:
git add .
git commit -m "Updating the Logging Configuration"
git push
Configuring S3 Global Settings
The LZA allows you to configure S3 encryption settings across your organization. This is crucial for protecting sensitive data at rest and meeting compliance requirements.
Update the LZA configuration:
- Open the
global-config.yaml
file in your local copy of theaws-accelerator-config
repository. - Configure the
encryption
section under s3 to enable encryption:
encryption:
createCMK: true
deploymentTargets:
organizationalUnits:
- Root
This configuration creates a customer-managed KMS key (CMK) that will be used to encrypt S3 buckets across your organization. This enhances the security of your data stored in S3.
Save your changes:
- Use these commands to save your changes and update the LZA configuration:
git add .
git commit -m "Updating the Encryption Configuration"
git push
Notifications
In the context of the AWS Landing Zone Accelerator (LZA), notifications refer to automated alerts sent to administrators or other stakeholders about events related to the LZA’s operation and the AWS environment it manages. These notifications are typically delivered via email, but other notification channels can be integrated.
- Deployment Status: Notifications about the progress and completion (or failure) of the LZA deployment itself. This keeps administrators informed about the status of the landing zone setup.
- Account Creation/Modification: Alerts about the creation of new AWS accounts through the LZA’s Account Factory or modifications to existing accounts. This provides visibility into account management activities.
- Control Violations: Notifications triggered when resources or configurations deviate from the controls defined by the LZA. For example, if someone attempts to create an S3 bucket without encryption, a notification could be sent.
- Security Events: Alerts about potential security issues, such as unauthorized access attempts, suspicious activity, or security group changes. This helps in quick incident response.
- Compliance Events: Notifications related to compliance checks and audits. For example, alerts about resources that are not compliant with tagging policies or other compliance requirements.
- Operational Events: Notifications about operational events, such as changes to network configurations, updates to critical systems, or resource usage thresholds being reached. This helps with proactive management.
Update the LZA configuration:
- Open the
global-config.yaml
file. - Configure the
snsTopics
section under sns to define your SNS topics:
snsTopics:
deploymentTargets:
organizationalUnits:
- Root
topics:
- name: Security
emailAddresses:
- infosec@example.com
This example creates an SNS topic called “Security” that sends notifications to the email address infosec@example.com
. You can customise this with your own topic names and email addresses.
Save your changes:
- Use these commands to save your changes and update the LZA configuration:
git add .
git commit -m "Updating the SNS Configuration"
git push
Configuring CloudWatch Log Group Retention
CloudWatch Log Group Retention Periods define how long CloudWatch Logs retains log events. You can configure a retention period for each log group, specifying how many days, weeks, months, or years you want to keep the logs. Once the retention period expires, the log events are automatically deleted.
They are crucial for several reasons, particularly within an LZA environment:
- Cost Management: Storing logs indefinitely can become expensive. Retention periods allow you to control log storage costs by automatically deleting older logs that are no longer needed. This is especially important in an LZA, where you might have many accounts generating a large volume of logs.
- Compliance: Certain compliance regulations may require you to retain logs for a specific period (e.g., for auditing purposes). Retention periods help you meet these regulatory requirements by ensuring that logs are kept for the necessary duration. Conversely, some regulations might limit how long you can keep certain types of data. Retention policies help with this as well.
- Performance: Having excessively large log groups can impact the performance of log queries. By setting appropriate retention periods, you can keep log groups at a manageable size, improving query performance.
- Security: Retention policies can help manage the risk associated with storing sensitive data in logs. By deleting logs after a certain period, you can reduce the potential impact of a data breach.
- Log Lifecycle Management: In an LZA, where you’re dealing with multiple accounts and diverse workloads, log lifecycle management is essential. Retention periods provide a consistent way to manage the lifecycle of logs across the entire environment. Different log groups can have different retention requirements based on the type of data they contain. For example, security logs might need to be kept longer than application debug logs.
Update the LZA configuration:
- Open the
global-config.yaml
file in your local copy of theaws-accelerator-config
repository. - Configure the
cloudwatchLogRetention
section under logging to define your log group retention settings:
cloudwatchLogRetentionInDays: 30
This configuration will configure all CloudWatch Log Group to 30 days in all AWS accounts under the management of the LZA. By setting up these global settings, you create consistent configurations for logging retention across your AWS organization. This makes managing your environment easier and helps improve security and compliance.
Save your changes:
- Use these commands to save your changes and update the LZA configuration:
git add .
git commit -m "Updating the CloudWatch Logs Retention"
git push
Configuring Vaults for AWS Backup
In AWS Backup, a Backup Vault is a container for storing your backups (called recovery points). Think of it like a secure, organszed storage location specifically for your backups. Each backup vault has its own set of access policies that control who can create, copy, restore, and delete the backups within it.
They are crucial for several reasons:
- Organization and Isolation: Backup vaults provide a way to organize your backups. You can create different vaults for different types of backups (e.g., production data, development data), different applications, or different compliance requirements. This makes it easier to manage and find the backups you need. Vaults also provide logical isolation. You can control access to each vault independently, preventing unauthorized access to sensitive backups.
- Access Control: Backup vaults allow you to implement granular access control. You can use IAM policies to define who has permission to perform specific actions on the backups within a vault. This ensures that only authorized users can create, restore, or delete backups. You can, for example, grant restore-only access to certain users.
- Encryption: By default, backups stored in a vault are encrypted at rest using AWS KMS. This adds an extra layer of security to your backups, protecting them from unauthorized access even if the underlying storage is compromised. You can even use customer-managed KMS keys for more control.
- Lifecycle Management: While not directly tied to the vault itself, you can combine Backup Vaults with lifecycle policies to automate the transition of backups to different storage tiers (like Glacier) or to delete backups after a certain period. This helps optimize storage costs and meet compliance requirements.
- Disaster Recovery: Backup vaults can be replicated to other AWS regions. This allows you to create copies of your backups in a different location for disaster recovery purposes. If your primary region becomes unavailable, you can restore your backups from the replica vault in the other region.
- Compliance: Backup vaults can help you meet various compliance requirements by providing a secure and auditable way to store and manage your backups. The access control and encryption features are particularly important for compliance.
Update the LZA configuration:
- Open the
global-config.yaml
file in your local copy of theaws-accelerator-config
repository. - Configure the
vaults
section under backup to define your backup vaults:
backup:
vaults:
- name: LocalBackUpVaultGold
deploymentTargets:
organizationalUnits:
- Root
- name: LocalBackUpVaultSilver
deploymentTargets:
organizationalUnits:
- Root
- name: LocalBackUpVaultBronze
deploymentTargets:
organizationalUnits:
- Root
- name: LocalBackUpVaultPlatinum
deploymentTargets:
organizationalUnits:
- Root
- name: CentralizedBackUpVaultGold
deploymentTargets:
accounts:
- Backup
- name: CentralizedBackUpVaultSilver
deploymentTargets:
accounts:
- Backup
- name: CentralizedBackUpVaultBronze
deploymentTargets:
accounts:
- Backup
- name: CentralizedBackUpVaultPlatinum
deploymentTargets:
accounts:
- Backup
This configuration defines several backup vaults, categorized by data classification (“Gold”, “Silver”, “Bronze”, “Platinum”). It creates local vaults in each account within the organization and centralised vaults in a dedicated “Backup” account. This approach provides both local and centralised backup capabilities, allowing for flexible and secure data protection. These vaults link to the Backup Policies that we created in the previous post.
Save your changes:
- Use these commands to save your changes and update the LZA configuration:
git add .
git commit -m "Updating the Backup Vaults Configuration"
git push
Wrapping up
That’s a wrap for this part of our LZA adventure! We’ve covered a lot, setting up global configurations for Control Tower, logging, S3 encryption, SNS notifications, and backup vaults. These are the building blocks for a well-organized, secure, and standardized AWS environment. By standardizing these settings, you can ensure consistent security, efficient log management, and reliable backups across your AWS accounts.
But we’re not done yet! There’s still much more to explore with the LZA. In the next post, we’ll dive into network configuration, setting up VPCs, subnets, and other networking components. After that, we’ll tackle identity and access management, security configurations, and even some customization options.
Stay tuned for more practical guides and insights on mastering the LZA!