S3バケットとIAMの管理
TerraformでS3ストレージバケットをプロビジョニング、設定し、AWS Identity and Access Management(IAM)リソースを管理する方法を学びます。
「S3バケットとIAMの管理」はCoddyKit上の無料Terraform Infrastructure as Codeレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはTerraform Infrastructure as Code学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Terraform Infrastructure as Codeコースには全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チューター)、Terraform Infrastructure as Codeコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Terraform Infrastructure as Codeコースには全4レッスンが含まれています。
「S3バケットとIAMの管理」で何を学びますか?
TerraformでS3ストレージバケットをプロビジョニング、設定し、AWS Identity and Access Management(IAM)リソースを管理する方法を学びます。 ブラウザで直接実行するハンズオンコードでTerraform Infrastructure as Codeを演習し、24時間対応の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フィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- AWS Providerの設定
- EC2インスタンスのプロビジョニング
- S3バケットとIAMの管理
- VPCとネットワークの設定