2025.02.04  

【AWS S3 terraform実装】他のAWSアカウントからもアクセスできるようにする

AWS,  Terraform    



S3を利用する際、他のAWSアカウントからもアクセスできるようにしたいという要件が出ることがあります。その際のterraformの実装についてメモ書きします。

他アカウントと共有のS3を作成するAWSアカウントで下記コードをapplyすることで、コード上のbucket_policyに設定したアカウントからも今回作成したS3にアクセスできるようになります。

下記コードに次の変更を加えることでコードをapplyできます。
・変数のaws_account_idアクセスさせたいAWSアカウント(12桁の数字)を設定する
・bucket名のshared-bucket-20250204を検索し、任意の名前で全て置換する

# バケット作成
resource "aws_s3_bucket" "this" {
  bucket = "shared-bucket-20250204"
}

# S3のパブリックアクセスをブロックする設定
resource "aws_s3_bucket_public_access_block" "this" {
  bucket                  = aws_s3_bucket.this.id
  block_public_acls       = true
  block_public_policy     = true
  ignore_public_acls      = true
  restrict_public_buckets = true
}

# S3 バケットのバージョン管理を制御するためのリソース
resource "aws_s3_bucket_versioning" "this" {
  bucket = aws_s3_bucket.this.id
  versioning_configuration {
    status = "Disabled" # S3のバージョニングを無効にする
  }
}

# bucket policyの設定(他環境からのアクセスを許可する設定)
resource "aws_s3_bucket_policy" "this" {
  bucket = aws_s3_bucket.this.id
  policy = jsonencode({
    "Version" : "2012-10-17",
    "Statement" : [
      {
        "Sid" : "shared bucket",
        "Effect" : "Allow",
        "Principal" : {
          "AWS" : "arn:aws:iam::${var.aws_account_id}:root"
        },
        "Action" : [
          "s3:GetLifecycleConfiguration",
          "s3:ListBucket",
          "s3:*Object"
        ],
        "Resource" : [
          "arn:aws:s3:::shared-bucket-20250204",
          "arn:aws:s3:::shared-bucket-20250204/*"
        ]
      }
    ]
    }
  )
}

メモ:"s3:*Object"はResourceに"バケット名/*"を設定しないと設定できない

コメント
現在コメントはありません。
コメントする
コメント入力

名前 (※ 必須)

メールアドレス (※ 必須 画面には表示されません)

送信