尝试使用Terraform构建S3和IAM角色,并从EC2访问S3

首先

我最近开始学习使用 Terraform,所以我打算将我的学习笔记也发布出来。
在完成以下两项内容后,我正在构建 S3 和用于 S3 访问的 IAM 角色。
1. 安装 Terraform 并尝试在 AWS 上创建 EC2 实例。
2. 使用 Terraform 设置 IAM 并通过 Session Manager 连接到 EC2 实例。

在Terraform中添加S3定义。

创建S3空间

使用桶名称demo-s3-bucket-20230226创建S3。

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

  tags = {
    Name = "tf_test_s3"
  }
}

定义用于Terraform访问S3的IAM角色

允许访问S3并定义操作。

我們將指定之前定義過的 S3test-s3-bucket-20230226 作為資源。
由於對資源進行了限制,我們允許所有操作。

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访问内容来定义策略。

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。

 

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 秒后关闭
bannerAds