Amazon Linux 2023 (AL2023) AMI 全面技术指南:从入门到精通

Amazon Linux 2023(简称 AL2023)是 AWS 推出的新一代开源 Linux 发行版,旨在为云原生应用提供稳定、安全且高性能的运行环境。作为 Amazon Linux 2(AL2)的继任者,AL2023 基于 Fedora 构建,采用了更现代的软件包管理工具(dnf),提供 5 年长期支持(LTS),并深度集成 AWS 服务。本文将详细介绍 AL2023 的核心特性、使用方法、最佳实践及常见问题,帮助用户快速上手并充分利用其优势。

目录#

  1. AL2023 核心特性解析
  2. 快速上手:启动 AL2023 实例
  3. 包管理:使用 DNF 管理软件
  4. 系统配置与自定义
  5. 安全最佳实践
  6. 性能优化指南
  7. 与 AWS 服务集成
  8. 常见问题排查
  9. 从 AL2 迁移至 AL2023
  10. 参考资料

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)攻击。
  • 最小化基础镜像:默认安装组件精简,仅包含核心工具(如 systemddnfsshd),降低漏洞风险。

1.3 深度集成 AWS 服务#

  • 预装 AWS 工具:包含 awscli v2ssm-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 控制台启动#

  1. 登录 AWS 控制台,进入 EC2 服务实例启动实例
  2. 在“选择 Amazon 机器镜像(AMI)”步骤中,搜索 Amazon Linux 2023,选择 Amazon Linux 2023 AMI (HVM)
  3. 选择实例类型(如 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 -y

3.3 启用第三方仓库#

默认仓库包含 AWS 优化的软件包,如需额外软件(如 Docker),可手动添加仓库:

# 添加 Docker 官方仓库
sudo dnf config-manager --add-repo=https://download.docker.com/linux/fedora/docker-ce.repo
sudo dnf install docker-ce -y

4. 系统配置与自定义#

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 卷)#

  1. 查看未挂载卷:lsblk(假设新卷为 /dev/xvdf)。
  2. 格式化卷:sudo mkfs.xfs /dev/xvdf
  3. 挂载卷:
    sudo mkdir /data
    sudo mount /dev/xvdf /data
  4. 设置开机自动挂载(通过 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.timer

5.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.log

5.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 --reload

5.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 -p

6.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-1

7.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 服务的权限(无需长期密钥):

  1. 创建 IAM 角色(附加 AmazonS3ReadOnlyAccess 策略)。
  2. 将角色关联至实例(EC2 控制台 → 实例 → 操作 → 安全 → 修改 IAM 角色)。
  3. 实例中直接访问 S3:
    aws s3 ls s3://<你的桶名>  # 无需配置 access key

8. 常见问题排查#

8.1 包安装失败#

症状dnf install 提示“没有可用软件包”。
解决

  • 检查仓库是否启用:sudo dnf repolist(默认应包含 amazonlinuxamazonlinux-updates)。
  • 清理缓存:sudo dnf clean all && sudo dnf makecache
  • 启用 PowerTools 仓库(包含开发工具):
    sudo dnf config-manager --set-enabled amazonlinux-powertools

8.2 网络连接失败#

症状:实例无法访问互联网或被访问。
排查步骤

  1. 检查安全组:确保入站规则允许目标端口(如 SSH 22、HTTP 80)。
  2. 检查网络 ACL:确认子网关联的网络 ACL 未阻止流量。
  3. 检查路由表:实例子网的路由表是否配置默认路由(指向 Internet Gateway)。
  4. 检查本地网络: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/www

9. 从 AL2 迁移至 AL2023#

AL2 将于 2025 年终止支持,建议提前迁移至 AL2023。主要差异及迁移步骤如下:

9.1 AL2 与 AL2023 核心差异#

特性Amazon Linux 2Amazon Linux 2023
包管理器yumdnf
内核版本4.145.15
SELinux 默认模式permissiveenforcing
初始化系统systemd(同 AL2023)systemd
生命周期2020-20252023-2028

9.2 迁移步骤#

  1. 评估兼容性
    • 使用 dnf 替代 yum 命令(如 yum installdnf install)。
    • 检查自定义脚本中是否依赖 AL2 特有包(如 amazon-linux-extras,AL2023 已集成至 dnf 模块)。
  2. 测试环境验证:在 staging 环境部署 AL2023 实例,运行应用并验证功能。
  3. 数据迁移:通过 EBS 快照、S3 或 AWS DataSync 迁移数据。
  4. 切换生产环境:更新启动模板使用 AL2023 AMI,逐步替换 AL2 实例。

10. 参考资料#

通过本文,您已掌握 Amazon Linux 2023 的核心使用方法和最佳实践。AL2023 的现代化架构和 AWS 集成能力将为云原生应用提供更稳定、安全的运行环境,建议在新部署中优先采用。