0Pricing
AWS Solutions Architect · 课时

安全架构场景

练习 IAM 最小权限、加密、VPC 隔离以及 WAF/Shield 相关的场景题,巩固安全领域知识

安全架构场景 是 CoddyKit 上的免费 AWS Solutions Architect 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 AWS Solutions Architect 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 AWS Solutions Architect 课程共包含 4 节课。

场景 1:遵循最小权限原则访问 EC2 和 S3

场景:一个 EC2 实例运行着一个 Web 应用程序,需要从特定的 S3 存储桶读取对象。安全团队要求实例上不得存储任何长期凭证,并且访问必须遵循最小权限原则。解决方案:创建一个IAM 角色,并通过策略仅允许对特定存储桶 ARN 执行 s3:GetObject。将该角色作为实例配置文件附加到 EC2 实例。应用程序使用实例元数据服务(IMDS)自动获取临时凭证——无需存储密钥。

# IAM policy for least-privilege EC2 -> S3 read
{
  'Version': '2012-10-17',
  'Statement': [{
    'Effect': 'Allow',
    'Action': ['s3:GetObject'],
    'Resource': 'arn:aws:s3:::my-app-bucket/*'
  }]
}

# Attach role to EC2 instance
aws ec2 associate-iam-instance-profile \
  --instance-id i-1234567890abcdef0 \
  --iam-instance-profile Name=EC2S3ReadRole

场景 2:加密 RDS 数据库中的数据

场景:一家公司将客户 PII 存储在 RDS PostgreSQL 数据库中。合规团队要求启用静态加密,并能够审计密钥使用情况。解决方案:使用 AWS KMS 和客户托管密钥(CMK)启用RDS 加密。CMK 允许安全团队控制密钥轮换、在 CloudTrail 中查看密钥使用情况,并在需要时撤销访问权限。注意:必须在创建 RDS 实例时启用加密——无法直接对现有的未加密 RDS 实例进行原地加密。要加密现有数据库,请先创建快照,再复制快照并启用加密,最后从加密快照恢复。

# Create an encrypted RDS instance
aws rds create-db-instance \
  --db-instance-identifier prod-postgres \
  --db-instance-class db.t3.medium \
  --engine postgres \
  --master-username admin \
  --master-user-password SecurePass123! \
  --storage-encrypted \
  --kms-key-id arn:aws:kms:us-east-1:123456789012:key/mrk-abc123 \
  --allocated-storage 100

场景 3:S3 存储桶——阻止公共访问

场景:某位开发人员意外地将 S3 存储桶设为公共,导致客户数据暴露。安全团队希望确保账户中的任何 S3 存储桶都无法被设为公共,即使开发人员尝试这样做也不行。解决方案:在账户级别启用 S3 Block Public Access。无论各个团队如何配置,它都会覆盖授予公共访问权限的任何存储桶级策略或 ACL。再结合 AWS Config 规则(s3-bucket-public-read-prohibited),持续检测并告警任何不合规的存储桶。

# Block all public access at account level
aws s3control put-public-access-block \
  --account-id 123456789012 \
  --public-access-block-configuration \
    'BlockPublicAcls=true,IgnorePublicAcls=true,BlockPublicPolicy=true,RestrictPublicBuckets=true'

# Deploy Config rule to detect violations
aws configservice put-config-rule \
  --config-rule '{"ConfigRuleName": "s3-bucket-public-read-prohibited", "Source": {"Owner": "AWS", "SourceIdentifier": "S3_BUCKET_PUBLIC_READ_PROHIBITED"}}'

场景 4:数据库层的 VPC 隔离

场景:一家公司希望确保其 RDS 数据库只能从应用程序服务器访问,而不能从 Internet 访问。解决方案:将 RDS 放置在私有子网中,并且不配置 Internet 网关路由。为 RDS 创建一个安全组,仅允许应用程序服务器安全组通过 5432 端口(PostgreSQL)入站,而不是允许任何 IP 地址范围。这样,即使某个应用程序服务器遭到入侵,攻击者也无法从 VPC 外部访问数据库;同时,安全组规则也会限制横向移动。

# Create RDS security group allowing only the app tier SG as source
aws ec2 create-security-group \
  --group-name rds-sg \
  --description 'RDS security group' \
  --vpc-id vpc-abc123

aws ec2 authorize-security-group-ingress \
  --group-id sg-rds \
  --protocol tcp \
  --port 5432 \
  --source-group sg-app  # app tier security group ID only

场景 5:轮换数据库凭证

场景:应用程序代码目前将数据库凭证硬编码在配置文件中。安全审计将其标记为严重风险。解决方案:将凭证存储在 AWS Secrets Manager 中,并配置自动轮换(Secrets Manager 为 RDS 提供内置的 Lambda 轮换函数)。更新应用程序,使其在运行时使用 SDK 从 Secrets Manager 获取凭证。每次轮换时,应用程序都会自动获得新凭证,无需重新部署。启用 RDS 密钥轮换模板,以实现完全托管且零停机的凭证轮换。

# Store RDS credentials in Secrets Manager
aws secretsmanager create-secret \
  --name prod/myapp/rds \
  --secret-string '{"username":"admin","password":"OldPass123!","host":"rds-endpoint.amazonaws.com","port":5432}'

# Enable automatic rotation every 30 days
aws secretsmanager rotate-secret \
  --secret-id prod/myapp/rds \
  --rotation-lambda-arn arn:aws:lambda:us-east-1:123:function:SecretsManagerRDSPostgreSQLRotationSingleUser \
  --rotation-rules AutomaticallyAfterDays=30

场景 6:检测异常 API 活动

场景:一家公司希望检测 AWS 账户凭证是否遭到泄露,以及这些凭证是否从异常位置被使用。解决方案:在所有 Region 中启用 Amazon GuardDuty。GuardDuty 使用机器学习分析 CloudTrail 事件、VPC Flow Logs 和 DNS 日志,以检测异常行为:来自异常地理位置的 API 调用、EC2 上的比特币挖矿模式、与 Tor 出口节点的通信,或凭证外泄模式。GuardDuty 会生成 Finding,这些 Finding 可以触发 EventBridge 规则,通过 SNS 自动通知安全团队或创建支持工单。

# Enable GuardDuty in a Region
aws guardduty create-detector \
  --enable \
  --finding-publishing-frequency FIFTEEN_MINUTES

# EventBridge rule to react to GuardDuty HIGH severity findings
aws events put-rule \
  --name guardduty-high-severity \
  --event-pattern '{
    "source": ["aws.guardduty"],
    "detail-type": ["GuardDuty Finding"],
    "detail": {"severity": [{"numeric": [">=", 7]}]}
  }'

场景 7:使用 WAF 阻止恶意请求

场景:位于 ALB 后面的 Web 应用程序遭受 SQL 注入攻击。应用程序暂时无法修改。解决方案:将 AWS WAF 与 ALB 关联。部署包含预构建 SQL 注入检测功能的AWS Managed Rules for Common Threats规则组(Core Rule Set + SQL Database 规则组)。WAF 会在 HTTP 请求到达 ALB 之前进行检查,并阻止匹配攻击模式的请求——无需修改应用程序代码。同时启用 WAF logging,将日志发送到 Kinesis Firehose 进行安全分析。

# Create WAF Web ACL with SQL injection protection
aws wafv2 create-web-acl \
  --name AppProtection \
  --scope REGIONAL \
  --default-action Allow={} \
  --rules '[{
    "Name": "AWSManagedRulesSQLiRuleSet",
    "Priority": 1,
    "Statement": {
      "ManagedRuleGroupStatement": {
        "VendorName": "AWS",
        "Name": "AWSManagedRulesSQLiRuleSet"
      }
    },
    "OverrideAction": {"None": {}},
    "VisibilityConfig": {"SampledRequestsEnabled": true, "CloudWatchMetricsEnabled": true, "MetricName": "SQLi"}
  }]' \
  --region us-east-1

场景 8:跨账户 AssumeRole

场景:中央安全账户需要对 AWS Organisation 中的所有工作负载账户拥有只读访问权限,以执行安全审计。解决方案:在每个工作负载账户中创建一个IAM 角色,并设置 Trust policy,允许安全账户(通过账户 ID)AssumeRole。附加只读策略(例如 SecurityAudit AWS 托管策略)。中央账户中的安全团队使用 STS AssumeRole,临时获得每个工作负载账户中的角色权限。这遵循最小权限原则——不会在工作负载账户中创建永久 IAM 用户。

# Trust policy in workload account (allows security account to assume role)
{
  'Version': '2012-10-17',
  'Statement': [{
    'Effect': 'Allow',
    'Principal': {
      'AWS': 'arn:aws:iam::SECURITY_ACCOUNT_ID:root'
    },
    'Action': 'sts:AssumeRole'
  }]
}

# From security account: assume role in workload account
aws sts assume-role \
  --role-arn arn:aws:iam::WORKLOAD_ACCOUNT_ID:role/SecurityAuditRole \
  --role-session-name audit-2024-01

场景 9:使用 SCP 限制操作

场景:一家公司使用 AWS Organizations,并希望阻止非生产 OU 中的任何账户启动昂贵的 GPU 实例。解决方案:创建一个Service Control Policy(SCP),拒绝对 GPU 实例系列(p3、p4、g4、g5)执行 ec2:RunInstances,并将其附加到非生产 OU。SCP 对成员账户中的 root 用户和 Administrator 级别 IAM 用户同样生效——它们充当任何身份都无法绕过的防护栏。这样可以防止开发和测试账户产生意外或恶意的大额支出。

# SCP to deny GPU instance types in non-prod OU
{
  'Version': '2012-10-17',
  'Statement': [{
    'Sid': 'DenyGPUInstances',
    'Effect': 'Deny',
    'Action': 'ec2:RunInstances',
    'Resource': 'arn:aws:ec2:*:*:instance/*',
    'Condition': {
      'StringLike': {
        'ec2:InstanceType': ['p3.*', 'p4d.*', 'g4.*', 'g5.*']
      }
    }
  }]
}

场景 10:用于合规审计的审计轨迹

场景:一家金融服务公司必须向审计人员证明,所有 AWS API 调用都已记录、防篡改并保留 7 年。解决方案:创建一个多区域 AWS CloudTrail 追踪,将日志传送到 logging 账户中的专用 S3 存储桶。启用日志文件完整性验证(用于检测日志篡改的加密摘要文件)。在 logging 存储桶上设置 S3 Object Lock 策略,使用 Compliance 模式并将保留期限设为 7 年。这样可以确保在规定的保留期限内,日志无法被删除或修改——即使是 root 用户也无法操作。

# Create multi-region trail with integrity validation
aws cloudtrail create-trail \
  --name compliance-trail \
  --s3-bucket-name central-audit-logs-123 \
  --is-multi-region-trail \
  --enable-log-file-validation \
  --include-global-service-events

aws cloudtrail start-logging --name compliance-trail

场景 11:用于私有 S3 访问的 VPC Endpoint

场景:私有 VPC 中的 EC2 实例需要访问 S3,同时流量不能经过公共 Internet。目前使用 NAT Gateway,但由于 NAT Gateway 数据处理费用较高,成本很高。解决方案:创建一个S3 Gateway VPC Endpoint。在私有子网的路由表中添加路由条目,将 S3 前缀列表指向该 Endpoint。现在,发往 S3 的流量完全停留在 AWS 网络骨干中——无需 NAT Gateway,也无需 Internet 网关。S3 Gateway Endpoint免费(不同于按每小时、每个 AZ 收费的 Interface Endpoint)。这还通过将 S3 访问从公共 Internet 路径中移除,提升了安全性。

# Create S3 Gateway VPC Endpoint
aws ec2 create-vpc-endpoint \
  --vpc-id vpc-abc123 \
  --service-name com.amazonaws.us-east-1.s3 \
  --route-table-ids rtb-private-1a rtb-private-1b

# Result: route table automatically gets a route:
# Destination: pl-63a5400a (S3 prefix list)
# Target: vpce-xyz456 (the Gateway Endpoint)
# EC2 instances now reach S3 privately at no endpoint cost

快速检查

测试您对本课 AWS Solutions Architect (SAA-C03) 概念的理解。

课程回顾

本课通过以下场景进行了练习:使用 IAM 角色和实例配置文件实现无需凭证的 EC2 访问、使用 Secrets Manager 自动轮换数据库凭证、使用 AWS WAF 在不修改代码的情况下阻止注入攻击,以及结合 CloudTrail 和 S3 Object Lock 实现防篡改的合规日志。接下来我们将学习具有弹性和高可用性的架构场景。

常见问题解答

「安全架构场景」课时是免费的吗?

是的 — 「安全架构场景」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 AWS Solutions Architect 课程的其余内容,请升级到 CoddyKit PRO。 AWS Solutions Architect 课程共包含 4 节课。

「安全架构场景」这节课中我会学到什么?

练习 IAM 最小权限、加密、VPC 隔离以及 WAF/Shield 相关的场景题,巩固安全领域知识 你通过在浏览器中直接运行的动手代码来练习 AWS Solutions Architect,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 AWS Solutions Architect 需要有经验吗?

无需任何先前经验。CoddyKit 上的 AWS Solutions Architect 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。

「安全架构场景」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 AWS Solutions Architect 课中编写并运行代码吗?

能。每节 AWS Solutions Architect 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 安全架构场景
  2. 弹性与高可用架构场景
  3. 高性能与成本优化场景
  4. 混合领域全长模拟考试
← 返回 AWS Solutions Architect