setting-up-ec2-instance-profiles 是做什么的?
通过创建并附加 IAM 角色到 EC2 实例配置文件,安全地调用 AWS 服务,消除硬编码凭据。适用于 EC2 实例需要临时凭据访问 S3、DynamoDB、SQS 或 CloudWatch 等 AWS 服务的场景。
概述
本指南介绍了如何通过以下方式为 EC2 实例配置 IAM 角色:
- 创建具有特定权限的 IAM 角色
- 将 IAM 角色关联到实例配置文件中
- 将实例配置文件附加到 EC2 实例
- 删除硬编码凭据并依赖临时安全凭据
先决条件
- AWS 账户和具有足够权限的 AWS 用户/角色以创建 IAM 角色和 EC2 实例
- AWS CLI 已安装并配置(
aws configure) - 基本的 IAM 和 EC2 概念理解
步骤
1. 创建 IAM 角色
使用 AWS CLI 创建具有所需权限策略的 IAM 角色。示例:
aws iam create-role --role-name MyEC2Role --assume-role-policy-document file://trust-policy.json
trust-policy.json 内容:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "ec2.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
2. 附加策略到 IAM 角色
aws iam attach-role-policy --role-name MyEC2Role --policy-arn arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess
3. 创建实例配置文件
aws iam create-instance-profile --instance-profile-name MyEC2InstanceProfile
aws iam add-role-to-instance-profile --instance-profile-name MyEC2InstanceProfile --role-name MyEC2Role
4. 将实例配置文件附加到 EC2 实例
对于现有实例:
aws ec2 associate-iam-instance-profile --instance-id i-1234567890abcdef0 --iam-instance-profile Name=MyEC2InstanceProfile
或在启动新实例时指定:
aws ec2 run-instances --image-id ami-0abcdef1234567890 --instance-type t2.micro --iam-instance-profile Name=MyEC2InstanceProfile
5. 测试配置
SSH 登录到 EC2 实例并运行:
aws s3 ls
该命令应使用附加角色的临时凭据成功列出 S3 存储桶。
验证
- 确认 EC2 实例元数据中存在角色:
curl http://169.254.169.254/latest/meta-data/iam/security-credentials/ - 检查 IAM 角色的权限是否正确
- 使用 AWS CLI 测试服务调用
资源清理
要移除配置,请执行:
aws ec2 disassociate-iam-instance-profile --association-id <association-id>
aws iam remove-role-from-instance-profile --instance-profile-name MyEC2InstanceProfile --role-name MyEC2Role
aws iam delete-instance-profile --instance-profile-name MyEC2InstanceProfile
aws iam detach-role-policy --role-name MyEC2Role --policy-arn arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess
aws iam delete-role --role-name MyEC2Role
故障排除
- 权限不足:确保 IAM 用户/角色具有
iam:*和ec2:*权限 - 角色未附加:验证信任策略是否正确指定
ec2.amazonaws.com作为服务主体 - 临时凭据过期:AWS 会自动轮换凭据,通常从实例元数据端点重新获取
最佳实践
- 遵循最小权限原则,仅附加所需策略
- 使用特定服务策略而非全管理员权限
- 定期审计 IAM 角色使用情况
- 考虑使用 AWS CloudFormation 或 Terraform 进行基础设施即代码管理