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高级功能后,接下来可以:

  1. 安全最佳实践 - 学习安全配置
  2. VPC基础 - 学习网络隔离
  3. 微服务架构 - 学习服务间认证
最后更新:2026-03-28