IAM高级 #
一、服务控制策略(SCP) #
1.1 SCP概述 #
text
SCP特点:
├── AWS Organizations功能
├── 限制成员账户权限
├── 不授予权限,只限制权限
├── 影响所有用户(包括root)
└── 必须启用所有功能
1.2 SCP工作原理 #
text
SCP权限模型:
┌─────────────────────────────────────────────────────────────┐
│ 有效权限 │
│ ┌─────────────────────────────────────────────────────────┐│
│ │ IAM策略 ││
│ │ ┌─────────────────────────────────────────────────────┐││
│ │ │ SCP │││
│ │ │ ┌─────────────────────────────────────────────────┐│││
│ │ │ │ 组织管理账户 ││││
│ │ │ └─────────────────────────────────────────────────┘│││
│ │ └─────────────────────────────────────────────────────┘││
│ └─────────────────────────────────────────────────────────┘│
└─────────────────────────────────────────────────────────────┘
1.3 SCP示例 #
json
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "DenyAllExceptS3",
"Effect": "Deny",
"NotAction": [
"s3:*",
"iam:Get*",
"iam:List*"
],
"Resource": "*"
}
]
}
1.4 SCP最佳实践 #
text
SCP建议:
├── 从允许所有开始
├── 逐步添加限制
├── 测试后再应用
├── 使用条件语句
└── 定期审查SCP
二、权限边界 #
2.1 权限边界详解 #
text
权限边界用途:
├── 限制用户/角色的最大权限
├── 权限委托场景
├── 开发者自助权限管理
└── 合规要求
2.2 权限边界示例 #
json
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:*",
"ec2:*",
"lambda:*"
],
"Resource": "*"
},
{
"Effect": "Deny",
"Action": "iam:*",
"Resource": "*"
}
]
}
2.3 有效权限计算 #
text
有效权限 = 身份策略 ∩ 权限边界 ∩ SCP
示例:
├── 身份策略:允许S3和EC2
├── 权限边界:允许S3和Lambda
├── SCP:允许S3、EC2、Lambda
└── 有效权限:仅S3
三、联合身份 #
3.1 联合身份概述 #
text
联合身份类型:
├── 企业联合
│ ├── SAML 2.0
│ └── Microsoft Active Directory
│
├── Web联合
│ ├── Amazon Cognito
│ ├── Login with Amazon
│ ├── Google
│ └── Facebook
│
└── 自定义联合
└── 自定义身份提供商
3.2 SAML联合 #
text
SAML联合配置:
├── 创建IAM身份提供商
├── 配置信任关系
├── 创建角色
├── 映射属性
└── 配置应用程序
bash
aws iam create-saml-provider \
--saml-metadata-document file://metadata.xml \
--saml-provider-name MyProvider
3.3 Web身份联合 #
json
{
"Version": "2012-10-17",
"Statement": [{
"Effect": "Allow",
"Principal": {
"Federated": "graph.facebook.com"
},
"Action": "sts:AssumeRoleWithWebIdentity",
"Condition": {
"StringEquals": {
"graph.facebook.com:app_id": "123456789"
}
}
}]
}
3.4 Amazon Cognito #
text
Cognito特点:
├── 用户池
│ └── 用户目录和认证
│
├── 身份池
│ └── 获取AWS临时凭证
│
└── 支持
├── 用户名/密码
├── 社交登录
└── 企业联合
四、IAM Access Analyzer #
4.1 Access Analyzer概述 #
text
Access Analyzer功能:
├── 分析资源访问策略
├── 发现外部访问
├── 识别过度权限
├── 验证策略
└── 生成策略
4.2 分析器类型 #
text
分析器类型:
├── 区域分析器
│ └── 分析区域内资源
│ └── S3存储桶、IAM角色等
│
└── 组织分析器
└── 分析组织内资源
└── 跨账户访问
4.3 创建分析器 #
bash
aws accessanalyzer create-analyzer \
--analyzer-name my-analyzer \
--type ACCOUNT
4.4 查找结果 #
text
查找结果类型:
├── 外部访问
│ └── 账户外的实体可访问
│
├── 未使用的访问
│ └── 授予但未使用的权限
│
└── 内部访问
└── 账户内的访问
4.5 策略验证 #
bash
aws accessanalyzer validate-policy \
--policy-document file://policy.json \
--policy-type IDENTITY_POLICY
五、IAM条件键 #
5.1 常用条件键 #
text
常用条件键:
├── aws:SourceIp
│ └── 限制源IP地址
│
├── aws:RequestedRegion
│ └── 限制请求区域
│
├── aws:MultiFactorAuthPresent
│ └── 要求MFA
│
├── aws:CurrentTime
│ └── 限制访问时间
│
├── aws:PrincipalArn
│ └── 限制主体ARN
│
└── s3:prefix
└── 限制S3前缀
5.2 条件运算符 #
text
条件运算符:
├── 字符串
│ ├── StringEquals
│ ├── StringNotEquals
│ ├── StringLike
│ └── StringNotLike
│
├── 数字
│ ├── NumericEquals
│ ├── NumericLessThan
│ └── NumericGreaterThan
│
├── 日期
│ ├── DateEquals
│ ├── DateLessThan
│ └── DateGreaterThan
│
├── IP地址
│ ├── IpAddress
│ └── NotIpAddress
│
└── 布尔
├── Bool
└── Null
5.3 条件示例 #
json
{
"Version": "2012-10-17",
"Statement": [{
"Effect": "Allow",
"Action": "s3:*",
"Resource": "*",
"Condition": {
"IpAddress": {
"aws:SourceIp": "192.0.2.0/24"
},
"StringEquals": {
"aws:RequestedRegion": "us-east-1"
},
"Bool": {
"aws:MultiFactorAuthPresent": "true"
}
}
}]
}
六、实例配置文件 #
6.1 实例配置文件概念 #
text
实例配置文件特点:
├── EC2实例的容器
├── 包含IAM角色
├── 自动提供临时凭证
├── 无需管理密钥
└── 安全访问AWS服务
6.2 创建实例配置文件 #
bash
aws iam create-instance-profile \
--instance-profile-name EC2Profile
aws iam add-role-to-instance-profile \
--instance-profile-name EC2Profile \
--role-name EC2Role
6.3 附加到实例 #
bash
aws ec2 associate-iam-instance-profile \
--instance-id i-1234567890abcdef0 \
--iam-instance-profile Name=EC2Profile
七、IAM角色链 #
7.1 角色链概念 #
text
角色链特点:
├── 一个角色担任另一个角色
├── 跨账户访问
├── 权限提升控制
└── 会话持续时间限制
7.2 角色链示例 #
bash
aws sts assume-role \
--role-arn arn:aws:iam::123456789012:role/RoleA \
--role-session-name SessionA
aws sts assume-role \
--role-arn arn:aws:iam::123456789012:role/RoleB \
--role-session-name SessionB
八、IAM最佳实践 #
8.1 权限管理 #
text
权限管理建议:
├── 使用组管理权限
├── 使用角色而非用户
├── 使用托管策略
├── 定期审计权限
├── 使用Access Analyzer
└── 实施最小权限原则
8.2 安全建议 #
text
安全建议:
├── 启用MFA
├── 使用条件限制
├── 定期轮换凭证
├── 监控异常活动
├── 使用CloudTrail审计
└── 实施权限边界
九、小结 #
本章介绍了IAM高级功能:
| 内容 | 要点 |
|---|---|
| SCP | 服务控制策略,限制账户权限 |
| 权限边界 | 限制最大权限 |
| 联合身份 | SAML、Web联合、Cognito |
| Access Analyzer | 分析资源访问策略 |
| 条件键 | 精细权限控制 |
下一步学习 #
了解IAM高级功能后,接下来可以:
最后更新:2026-03-28