10
1

More than 1 year has passed since last update.

TerraformでS3とIAMロールを構築してEC2からS3にアクセスしてみる

Last updated at Posted at 2023-03-28

はじめに

Terraformの勉強を始めたので備忘録を兼ねて行ったことを投稿しようと思います。
以下の2つの投稿内容を実施した上でS3とS3アクセス用のIAMロールを構築を行なっています。
TerraformをインストールしてTerraformでAWS上にEC2作ってみる
TerraformでIAMを設定してEC2にセッションマネージャー経由で接続してみる

TerraformにS3の定義を追加

S3を作成する

バケット名demo-s3-bucket-20230226でS3を作成します。

s3.tf
resource "aws_s3_bucket" "test" {
  bucket = "test-s3-bucket-20230226"

  tags = {
    Name = "tf_test_s3"
  }
}

TerraformにS3アクセス用のIAMロールを定義

アクセスを許可するS3と操作を定義

リソースには先程定義したS3test-s3-bucket-20230226を指定します。
リソースで制限しているため、アクション全て許可

iam.tf
data "aws_iam_policy_document" "allow_rw_access_s3_role_policy" {
  statement {
    actions   = ["s3:*"]
    resources = ["arn:aws:s3:::test-s3-bucket-20230226", "arn:aws:s3:::test-s3-bucket-20230226/*"]
    effect    = "Allow"
  }
}

ポリシーを定義

先程定義したS3アクセスの内容をもちいてポリシーを定義します。

iam.tf
resource "aws_iam_policy" "allow_rw_access_s3" {
  name   = "test_s3_policy"
  policy = data.aws_iam_policy_document.allow_rw_access_s3_role_policy.json
}

ポリシーをロールにアタッチ

下記で定義したロールに先程定義したポリシーをアタッチします。

※このロールは既に下記でEC2に付与されています

iam.tf
resource "aws_iam_role_policy_attachment" "test_s3" {
  role       = aws_iam_role.test.name
  policy_arn = aws_iam_policy.allow_rw_access_s3.arn
}

TerraformでS3とIAMロールを作成

Terraformのplan applyを実行

terraform plan
terraform apply

EC2からS3にアクセス

セッションマネージャーでEC2に接続する

以下と同様にEC2に接続します。

aws cliでS3にアクセス

aws cliコマンド使って、作成されたS3にアクセスします。

aws s3 ls s3://test-s3-bucket-20230226

エラーが出なければアクセス確認完了

作成したリソースを削除

terraform の destroyを実行して、AWS上のリソースを削除します。

terraform destroy

さいごに

今回、terraform destroyした時にS3のバケットが空になっていなかったので削除できませんでした。
調べてみるとterraform destroyでaws cliコマンドを実行、S3バケットを空にして削除するやり方で回避しているの見つけました。
terraformでコマンドの実行もできるのは知らなかったので良かったです。

10
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
1