0Pricing
Terraform Infrastructure as Code · 课时

管理 S3 存储桶与 IAM

学习配置 S3 存储桶,并使用 Terraform 管理 AWS 身份和访问管理(IAM)资源。

管理 S3 存储桶与 IAM 是 CoddyKit 上的免费 Terraform Infrastructure as Code 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Terraform Infrastructure as Code 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Terraform Infrastructure as Code 课程共包含 4 节课。

S3 与 Terraform:云存储

Amazon S3(简单存储服务)提供高度可扩展、持久且高可用的对象存储。它非常适合用于备份、静态网站和数据归档。

使用 Terraform 管理 S3 存储桶有多项优势:

  • 自动化:以编程方式创建和配置存储桶。
  • 版本控制:跟踪存储桶配置的变更。
  • 一致性:确保所有环境中的 S3 设置完全一致。

您的第一个 S3 存储桶

让我们定义一个简单的 S3 存储桶。这里要使用 aws_s3_bucket 资源。

存储桶名称必须在所有 AWS 账户中全局唯一。请选择一个唯一的名称!

请尝试运行以下示例:

resource "aws_s3_bucket" "my_unique_bucket" {
  bucket = "my-coddykit-unique-bucket-12345" # Replace with a globally unique name
}

output "bucket_id" {
  value = aws_s3_bucket.my_unique_bucket.id
}

存储桶命名与区域

创建 S3 存储桶时,请记住以下要点:

  • 全局唯一性:存储桶名称必须在全球所有 AWS 账户中保持唯一。
  • 区域:虽然名称是全局唯一的,但存储桶本身位于特定的 AWS 区域中(由您的 AWS 提供商配置定义)。
  • 命名规则:名称必须使用小写字母,长度为 3 到 63 个字符,并且可以包含连字符。

选择良好的命名规范对于组织管理和保持清晰性至关重要。

S3 安全性与功能

S3 提供对象版本控制等功能,可以保留对象的多个版本;还提供用于安全防护的公共访问阻止功能。对于大多数存储桶而言,默认阻止公共访问至关重要。

此示例启用了版本控制,并确保公共访问受到阻止。

请尝试运行以下示例:

resource "aws_s3_bucket" "my_versioned_bucket" {
  bucket = "coddykit-versioned-bucket-98765" # Replace with a unique name
}

resource "aws_s3_bucket_versioning" "my_versioned_bucket_versioning" {
  bucket = aws_s3_bucket.my_versioned_bucket.id
  versioning_configuration {
    status = "Enabled"
  }
}

resource "aws_s3_bucket_public_access_block" "my_versioned_bucket_public_access_block" {
  bucket = aws_s3_bucket.my_versioned_bucket.id

  block_public_acls       = true
  block_public_and_cross_account_access = true
  ignore_public_acls      = true
  restrict_public_buckets = true
}

output "bucket_name_versioned" {
  value = aws_s3_bucket.my_versioned_bucket.bucket
}

AWS IAM:身份与访问

AWS IAM(身份和访问管理)是一项 Web 服务,可帮助您安全地控制对 AWS 资源的访问。它是安全管理的基础。

借助 IAM,您可以:

  • 管理用户及其编程访问和控制台访问权限。
  • 向特定 AWS 资源授予细粒度权限。
  • 控制 AWS 账户中的用户可以执行哪些操作。

Terraform 允许您像管理 S3 存储桶一样定义和管理 IAM 资源。

创建 IAM 用户

让我们使用 Terraform 创建一个新的 IAM 用户。IAM 用户代表与 AWS 交互的人员或服务。

此用户目前还没有任何权限;接下来我们会为其添加权限。

请尝试运行以下示例:

resource "aws_iam_user" "coddykit_user" {
  name = "coddykit-app-user"
  path = "/system/"
  tags = {
    Department = "DevOps"
  }
}

output "iam_user_name" {
  value = aws_iam_user.coddykit_user.name
}

output "iam_user_arn" {
  value = aws_iam_user.coddykit_user.arn
}

理解 IAM 策略

IAM 策略是定义权限的文档。它们规定了在什么条件下,哪些资源允许或拒绝哪些操作。

策略使用 JSON 编写,可以附加到用户、组或角色上。

  • 基于身份的策略:附加到 IAM 身份(用户、组或角色)。
  • 基于资源的策略:附加到资源(例如 S3 存储桶或 SQS 队列)。

授予 S3 权限

现在,让我们创建一个策略,为 IAM 用户授予对特定 S3 存储桶的只读访问权限,然后将其附加到该用户。

aws_iam_policy 资源用于定义策略,aws_iam_user_policy_attachment 用于将策略关联到用户。

请尝试运行以下示例:

resource "aws_s3_bucket" "policy_target_bucket" {
  bucket = "coddykit-policy-bucket-112233" # Unique name
}

resource "aws_iam_user" "s3_reader_user" {
  name = "coddykit-s3-reader"
}

data "aws_iam_policy_document" "s3_read_only_policy" {
  statement {
    actions = [
      "s3:GetObject",
      "s3:ListBucket"
    ]
    resources = [
      aws_s3_bucket.policy_target_bucket.arn,
      "${aws_s3_bucket.policy_target_bucket.arn}/*"
    ]
  }
}

resource "aws_iam_policy" "s3_read_only" {
  name        = "CoddyKitS3ReadOnlyPolicy"
  description = "Grants read-only access to a specific S3 bucket"
  policy      = data.aws_iam_policy_document.s3_read_only_policy.json
}

resource "aws_iam_user_policy_attachment" "attach_s3_read_only" {
  user       = aws_iam_user.s3_reader_user.name
  policy_arn = aws_iam_policy.s3_read_only.arn
}

output "s3_reader_user_name" {
  value = aws_iam_user.s3_reader_user.name
}

output "s3_read_only_policy_arn" {
  value = aws_iam_policy.s3_read_only.arn
}

使用 IAM 组进行组织管理

为了更好地进行管理,尤其是在用户较多时,您可以使用 IAM 组。组是 IAM 用户的集合。

您无需将策略附加到每个用户,而是可以将策略附加到组,这样该组中的所有用户都会继承这些权限。

这可以简化权限管理,也更容易遵循最小权限原则。

快速检查:S3 与 IAM

以下关于使用 Terraform 管理 AWS S3 存储桶以及 IAM 用户和策略的说法中,哪些是 TRUE?

回顾:S3 与 IAM

做得好!在本课中,您学会了如何使用 Terraform 管理 AWS S3 存储桶和 IAM 资源。

  • 我们创建了 S3 存储桶,配置了版本控制,并阻止了公共访问。
  • 我们创建了 IAM 用户,并附加自定义策略以授予特定权限。
  • 现在,您已经理解了 S3 对存储的重要性,以及 IAM 在 AWS 安全访问控制中的作用,而且这些内容都以代码形式定义!

接下来,我们将深入学习高级状态管理技术。

常见问题解答

「管理 S3 存储桶与 IAM」课时是免费的吗?

是的 — 「管理 S3 存储桶与 IAM」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Terraform Infrastructure as Code 课程的其余内容,请升级到 CoddyKit PRO。 Terraform Infrastructure as Code 课程共包含 4 节课。

「管理 S3 存储桶与 IAM」这节课中我会学到什么?

学习配置 S3 存储桶,并使用 Terraform 管理 AWS 身份和访问管理(IAM)资源。 你通过在浏览器中直接运行的动手代码来练习 Terraform Infrastructure as Code,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Terraform Infrastructure as Code 需要有经验吗?

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

「管理 S3 存储桶与 IAM」课时需要多长时间?

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

我能在这节 Terraform Infrastructure as Code 课中编写并运行代码吗?

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

此课程中的所有课时

  1. AWS 提供商配置
  2. 配置 EC2 实例
  3. 管理 S3 存储桶与 IAM
  4. 配置 VPC 与网络
← 返回 Terraform Infrastructure as Code