0Pricing
DevOps Bootcamp · レッスン

S3バケットとIAMの管理

TerraformでS3ストレージバケットをプロビジョニング、設定し、AWS Identity and Access Management(IAM)リソースを管理する方法を学びます。

「S3バケットとIAMの管理」はCoddyKit上の無料DevOps Bootcampレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはDevOps Bootcamp学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 DevOps Bootcampコースには全4レッスンが含まれています。

S3 と Terraform:クラウドストレージ

Amazon S3(Simple Storage Service)は、高いスケーラビリティ、耐久性、可用性を備えたオブジェクトストレージを提供します。バックアップ、静的ウェブサイト、データのアーカイブに最適です。

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 provider の設定で定義)に存在します。
  • 命名規則:名前は小文字で、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(Identity and Access Management)は、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 ユーザー/ポリシーの管理について、次の記述のうち正しいものはどれですか?

振り返り:S3 と IAM

よくできました!このレッスンでは、Terraform を使って AWS S3 バケットと IAM リソースを管理する方法を学びました。

  • S3 バケットをプロビジョニングし、バージョニングを設定して、パブリックアクセスをブロックしました。
  • IAM ユーザーを作成し、特定の権限を付与するカスタムポリシーをアタッチしました。
  • ストレージにおける S3 の重要性と、AWS で安全なアクセス制御を実現する IAM の重要性を理解し、それらをすべてコードとして定義できるようになりました。

次は、高度なステート管理の手法について詳しく学びます。

よくある質問

「S3バケットとIAMの管理」レッスンは無料ですか?

はい。「S3バケットとIAMの管理」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、DevOps Bootcampコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 DevOps Bootcampコースには全4レッスンが含まれています。

「S3バケットとIAMの管理」で何を学びますか?

TerraformでS3ストレージバケットをプロビジョニング、設定し、AWS Identity and Access Management(IAM)リソースを管理する方法を学びます。 ブラウザで直接実行するハンズオンコードでDevOps Bootcampを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

DevOps Bootcampを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのDevOps Bootcampは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。

「S3バケットとIAMの管理」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このDevOps Bootcampレッスンでコードを書いて実行できますか?

はい。すべてのDevOps Bootcampレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. AWS Providerの設定
  2. EC2インスタンスのプロビジョニング
  3. S3バケットとIAMの管理
  4. VPCとネットワークの設定
← DevOps Bootcampに戻る