Amazon Linux 2023 (AL2023) AMI 全面技术指南:从入门到精通
Amazon Linux 2023(简称 AL2023)是 AWS 推出的新一代开源 Linux 发行版,旨在为云原生应用提供稳定、安全且高性能的运行环境。作为 Amazon Linux 2(AL2)的继任者,AL2023 基于 Fedora 构建,采用了更现代的软件包管理工具(dnf),提供 5 年长期支持(LTS),并深度集成 AWS 服务。本文将详细介绍 AL2023 的核心特性、使用方法、最佳实践及常见问题,帮助用户快速上手并充分利用其优势。
目录#
- AL2023 核心特性解析
- 快速上手:启动 AL2023 实例
- 包管理:使用 DNF 管理软件
- 系统配置与自定义
- 安全最佳实践
- 性能优化指南
- 与 AWS 服务集成
- 常见问题排查
- 从 AL2 迁移至 AL2023
- 参考资料
1. AL2023 核心特性解析#
AL2023 在 AL2 的基础上进行了多项升级,主要特性包括:
1.1 基于 Fedora 的现代化架构#
- 内核版本:默认搭载 Linux 内核 5.15 LTS,支持最新硬件和安全特性(如内核页表隔离 KPTI、控制流强制技术 CET)。
- 包管理工具:采用
dnf(替代 AL2 的yum),提供更快的依赖解析、模块化包管理和更好的性能。 - 生命周期:提供 5 年长期支持(2023-2028),每 6 个月发布一次次要版本(如 AL2023.1、AL2023.2),包含安全更新和功能优化。
1.2 强化的安全性#
- SELinux 默认启用:强制访问控制(MAC)默认处于
enforcing模式,减少攻击面。 - IMDSv2 强制默认:实例元数据服务 v2(IMDSv2)默认启用,防止 Server-Side Request Forgery(SSRF)攻击。
- 最小化基础镜像:默认安装组件精简,仅包含核心工具(如
systemd、dnf、sshd),降低漏洞风险。
1.3 深度集成 AWS 服务#
- 预装 AWS 工具:包含
awscli v2、ssm-agent(AWS Systems Manager 代理)、cloud-init(云初始化工具),开箱即可与 AWS 服务联动。 - 优化的 EBS 与网络:默认启用 EBS 优化、弹性网络适配器(ENA)驱动,提升存储和网络性能。
1.4 灵活的模块化设计#
- 模块流(Module Streams):支持同一软件的多个版本(如 Python 3.9/3.11、Node.js 16/18),可通过
dnf module命令灵活切换。
2. 快速上手:启动 AL2023 实例#
2.1 通过 AWS 控制台启动#
- 登录 AWS 控制台,进入 EC2 服务 → 实例 → 启动实例。
- 在“选择 Amazon 机器镜像(AMI)”步骤中,搜索
Amazon Linux 2023,选择 Amazon Linux 2023 AMI (HVM)。 - 选择实例类型(如
t3.micro,符合免费套餐),配置网络、存储等参数,最后启动实例(需选择密钥对用于 SSH 登录)。
2.2 通过 AWS CLI 启动#
使用以下命令快速启动 AL2023 实例(需替换 <区域>、<密钥对名称> 等参数):
# 获取 AL2023 最新 AMI ID(以 us-east-1 为例)
AMI_ID=$(aws ssm get-parameters --names /aws/service/ami-amazon-linux-latest/amzn2023-ami-hvm-x86_64-gp2 --region us-east-1 --query 'Parameters[0].Value' --output text)
# 启动实例
aws ec2 run-instances \
--image-id $AMI_ID \
--instance-type t3.micro \
--key-name <你的密钥对名称> \
--security-group-ids <安全组ID> \
--subnet-id <子网ID> \
--region us-east-1说明:AL2023 AMI ID 因区域而异,通过 AWS Systems Manager Parameter Store 可动态获取最新 ID(参数路径:
/aws/service/ami-amazon-linux-latest/amzn2023-ami-hvm-x86_64-gp2)。
3. 包管理:使用 DNF 管理软件#
AL2023 使用 dnf 作为默认包管理器,替代 AL2 的 yum。以下是常用操作:
3.1 基础命令#
| 功能 | 命令示例 |
|---|---|
| 安装软件 | sudo dnf install httpd -y |
| 卸载软件 | sudo dnf remove httpd -y |
| 更新所有软件 | sudo dnf update -y |
| 搜索软件 | sudo dnf search python3 |
| 查看已安装软件 | sudo dnf list installed |
| 清理缓存 | sudo dnf clean all |
3.2 模块化包管理#
AL2023 支持“模块流”,允许安装同一软件的多个版本(如 Node.js 16/18):
# 列出所有可用模块
sudo dnf module list
# 安装 Node.js 18
sudo dnf module install nodejs:18 -y
# 切换至 Node.js 16(需先卸载当前版本)
sudo dnf module reset nodejs -y
sudo dnf module install nodejs:16 -y3.3 启用第三方仓库#
默认仓库包含 AWS 优化的软件包,如需额外软件(如 Docker),可手动添加仓库:
# 添加 Docker 官方仓库
sudo dnf config-manager --add-repo=https://download.docker.com/linux/fedora/docker-ce.repo
sudo dnf install docker-ce -y4. 系统配置与自定义#
4.1 用户与 SSH 配置#
-
创建非 root 用户(安全最佳实践):
sudo useradd -m alice # 创建用户并生成家目录 sudo passwd alice # 设置密码 sudo usermod -aG sudo alice # 授予 sudo 权限 -
密钥登录(禁用密码登录):
# 切换至用户 alice su - alice mkdir -p ~/.ssh && chmod 700 ~/.ssh # 上传本地公钥至服务器(本地执行) scp ~/.ssh/id_rsa.pub alice@<实例IP>:~/.ssh/authorized_keys # 服务器端设置权限 chmod 600 ~/.ssh/authorized_keys # 禁用密码登录(编辑 /etc/ssh/sshd_config) sudo sed -i 's/PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config sudo systemctl restart sshd
4.2 网络配置#
AL2023 使用 NetworkManager 管理网络,可通过 nmcli 命令配置:
# 查看网络连接
nmcli connection show
# 修改以太网连接(eth0)为静态 IP
sudo nmcli connection modify eth0 \
ipv4.addresses 10.0.0.100/24 \
ipv4.gateway 10.0.0.1 \
ipv4.dns 8.8.8.8,8.8.4.4 \
ipv4.method manual
sudo nmcli connection up eth0 # 应用配置4.3 存储配置(挂载 EBS 卷)#
- 查看未挂载卷:
lsblk(假设新卷为/dev/xvdf)。 - 格式化卷:
sudo mkfs.xfs /dev/xvdf。 - 挂载卷:
sudo mkdir /data sudo mount /dev/xvdf /data - 设置开机自动挂载(通过 UUID):
# 获取卷 UUID UUID=$(blkid -s UUID -o value /dev/xvdf) # 添加至 /etc/fstab echo "UUID=$UUID /data xfs defaults,noatime 0 0" | sudo tee -a /etc/fstab # 验证挂载 sudo mount -a
5. 安全最佳实践#
5.1 定期更新系统#
通过 dnf 定期更新安全补丁:
sudo dnf update -y # 手动更新自动更新:安装 dnf-automatic 并配置:
sudo dnf install dnf-automatic -y
sudo sed -i 's/apply_updates = no/apply_updates = yes/' /etc/dnf/automatic.conf
sudo systemctl enable --now dnf-automatic.timer5.2 强化 SELinux#
AL2023 默认启用 SELinux enforcing 模式,如需调整:
getenforce # 查看状态(应返回 Enforcing)
# 临时切换至 permissive 模式(用于调试)
sudo setenforce 0
# 永久配置(编辑 /etc/selinux/config,设置 SELINUX=enforcing)解决 SELinux 拒绝问题:
# 安装 sealert 工具
sudo dnf install setroubleshoot-server -y
# 分析审计日志并生成修复建议
sudo sealert -a /var/log/audit/audit.log5.3 配置防火墙(firewalld)#
AL2023 默认启用 firewalld,仅开放必要端口:
# 查看当前规则
sudo firewall-cmd --list-all
# 开放 HTTP 服务(永久生效)
sudo firewall-cmd --add-service=http --permanent
# 开放自定义端口(如 8080)
sudo firewall-cmd --add-port=8080/tcp --permanent
# 重新加载规则
sudo firewall-cmd --reload5.4 启用 IMDSv2#
AL2023 默认强制使用 IMDSv2,可通过 EC2 控制台或 CLI 验证:
# 验证 IMDSv2 配置
curl -s -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"
# 若返回 token,则 IMDSv2 正常启用6. 性能优化指南#
6.1 选择合适的实例类型#
- 计算密集型:选择
c5/c6i实例(如c5.large)。 - 内存密集型:选择
r5/r6i实例。 - 突发性能:选择
t3/t4g实例(搭载 AMD/ARM 处理器,性价比更高)。
6.2 内核参数调优#
通过 /etc/sysctl.conf 优化网络和内存性能:
# 提升 TCP 连接队列长度(适用于高并发服务)
echo "net.core.somaxconn = 1024" | sudo tee -a /etc/sysctl.conf
# 减少 swap 使用(优先使用内存)
echo "vm.swappiness = 10" | sudo tee -a /etc/sysctl.conf
# 应用配置
sudo sysctl -p6.3 EBS 性能优化#
- 使用 gp3 卷(相比 gp2,IOPS 成本降低 20%)。
- 启用 EBS 优化(实例属性中开启,提升存储 I/O 吞吐量)。
- 对大文件使用 XFS 文件系统(支持动态扩容和高吞吐量)。
7. 与 AWS 服务集成#
7.1 AWS Systems Manager (SSM) 管理#
AL2023 预装 ssm-agent,可通过 SSM 远程管理实例(无需开放 SSH 端口):
# 本地 CLI 执行远程命令(需实例关联 SSM 实例配置文件)
aws ssm send-command \
--instance-ids <实例ID> \
--document-name "AWS-RunShellScript" \
--parameters "commands=['sudo dnf update -y']" \
--region us-east-17.2 集成 CloudWatch 监控#
- 基础监控:EC2 实例默认推送 CPU、内存等指标至 CloudWatch。
- 详细监控:安装 CloudWatch 代理采集自定义指标:
# 下载并安装代理 sudo yum install amazon-cloudwatch-agent -y # 运行配置向导生成配置文件 sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-config-wizard
7.3 IAM 实例配置文件#
通过 IAM 实例配置文件授予实例访问 AWS 服务的权限(无需长期密钥):
- 创建 IAM 角色(附加
AmazonS3ReadOnlyAccess策略)。 - 将角色关联至实例(EC2 控制台 → 实例 → 操作 → 安全 → 修改 IAM 角色)。
- 实例中直接访问 S3:
aws s3 ls s3://<你的桶名称> # 无需配置 access key
8. 常见问题排查#
8.1 包安装失败#
症状:dnf install 提示“没有可用软件包”。
解决:
- 检查仓库是否启用:
sudo dnf repolist(默认应包含amazonlinux和amazonlinux-updates)。 - 清理缓存:
sudo dnf clean all && sudo dnf makecache。 - 启用 PowerTools 仓库(包含开发工具):
sudo dnf config-manager --set-enabled amazonlinux-powertools
8.2 网络连接失败#
症状:实例无法访问互联网或被访问。
排查步骤:
- 检查安全组:确保入站规则允许目标端口(如 SSH 22、HTTP 80)。
- 检查网络 ACL:确认子网关联的网络 ACL 未阻止流量。
- 检查路由表:实例子网的路由表是否配置默认路由(指向 Internet Gateway)。
- 检查本地网络:
nmcli connection show eth0确认 IP/网关配置正确。
8.3 SELinux 阻止服务启动#
症状:服务(如 Nginx)启动失败,日志提示“Permission denied”。
解决:使用 sealert 分析并修复:
sudo sealert -a /var/log/audit/audit.log | grep 'suggestion' # 查看修复建议
# 例如,允许 Nginx 访问自定义目录
sudo semanage fcontext -a -t httpd_sys_content_t "/data/www(/.*)?"
sudo restorecon -Rv /data/www9. 从 AL2 迁移至 AL2023#
AL2 将于 2025 年终止支持,建议提前迁移至 AL2023。主要差异及迁移步骤如下:
9.1 AL2 与 AL2023 核心差异#
| 特性 | Amazon Linux 2 | Amazon Linux 2023 |
|---|---|---|
| 包管理器 | yum | dnf |
| 内核版本 | 4.14 | 5.15 |
| SELinux 默认模式 | permissive | enforcing |
| 初始化系统 | systemd(同 AL2023) | systemd |
| 生命周期 | 2020-2025 | 2023-2028 |
9.2 迁移步骤#
- 评估兼容性:
- 使用
dnf替代yum命令(如yum install→dnf install)。 - 检查自定义脚本中是否依赖 AL2 特有包(如
amazon-linux-extras,AL2023 已集成至dnf模块)。
- 使用
- 测试环境验证:在 staging 环境部署 AL2023 实例,运行应用并验证功能。
- 数据迁移:通过 EBS 快照、S3 或 AWS DataSync 迁移数据。
- 切换生产环境:更新启动模板使用 AL2023 AMI,逐步替换 AL2 实例。
10. 参考资料#
通过本文,您已掌握 Amazon Linux 2023 的核心使用方法和最佳实践。AL2023 的现代化架构和 AWS 集成能力将为云原生应用提供更稳定、安全的运行环境,建议在新部署中优先采用。