middleman-blog + S3 WebHosting(IAM ユーザで)

2015/01/06

参考

S3 bucketに紐付いたIAMユーザ作成について

middleman build 後のS3との同期(およびconfig.rb記述)について

S3 - Bucket

  • blog.ngsw.jp
  • Enable website hosting
    • Index Document: index.html
    • Error Document: index.html

とした。

S3 bucket policy

{
    "Version": "2008-10-17",
    "Id": "PolicyXXXXXXXXXXXXX",
    "Statement": [
        {
            "Sid": "StmtXXXXXXXXXXXXX",
            "Effect": "Allow",
            "Principal": {
                "AWS": "*"
            },
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::blog.ngsw.jp/*"
        }
    ]
}

IAM

当該S3Bucket専用ユーザを作成した

Users

  • middleman-user (作成した後に削除した)
    • Access Key ID: AKIAIPY2CC2TIZYBK2TQ
    • Secret Access Key: D/ypsi8mGGQfvdG4VIDtm3+jIBiXoWBxkI/alqqn
      • なおこのユーザはすでに存在しない

Groups

  • blog.ngsw.jp@S3 (作成した)
    • policy は以下
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:*"
      ],
      "Resource": [
        "arn:aws:s3:::blog.ngsw.jp"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:*"
      ],
      "Resource": [
        "arn:aws:s3:::blog.ngsw.jp/*"
      ]
    }
  ]
}

当初上半分の

    {
      "Effect": "Allow",
      "Action": [
        "s3:*"
      ],
      "Resource": [
        "arn:aws:s3:::blog.ngsw.jp"
      ]
    }

の設定はしていたのだけれど、
下半分である、

    {
      "Effect": "Allow",
      "Action": [
        "s3:*"
      ],
      "Resource": [
        "arn:aws:s3:::blog.ngsw.jp/*"
      ]
    }

の設定がなかったので、
当該S3 bucketにアクセスできずはまっていた
うまく行かなかった場合には確認してみていただきたい

middleman-sync 設定

config.rb

activate :sync do |sync|
  sync.fog_provider = 'AWS'
  sync.fog_directory = 'blog.ngsw.jp'
  sync.fog_region = 'ap-northeast-1'
  sync.aws_access_key_id = 'AKIAITLPF4IIJYZSTHCA'
  sync.aws_secret_access_key = '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'
  sync.existing_remote_files = 'keep'
  sync.gzip_compression = false
  sync.after_build = false
end

fog のエラーがでた

fog: the specified s3 bucket name(blog.ngsw.jp) contains a '.' so is not accessible over https as a virtual hosted bucket, which will negatively impact performance.  For details see: http://docs.amazonwebservices.com/AmazonS3/latest/dev/BucketRestrictions.html

middleman-sync は S3 bucket name が FQDN ドメイン名形式してるとこけるらしい。うける

さらに参考にした

middleman s3_sync 設定

config.rb

activate :s3_sync do |s3_sync|
  s3_sync.bucket                     = 'blog.ngsw.jp'
  s3_sync.region                     = 'ap-northeast-1’
  s3_sync.aws_access_key_id          = 'AKIAIPY2CC2TIZYBK2TQ'
  s3_sync.aws_secret_access_key      = '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'
  s3_sync.delete                     = false
  s3_sync.after_build                = false
  s3_sync.prefer_gzip                = true
  s3_sync.path_style                 = true
  s3_sync.reduced_redundancy_storage = false
  s3_sync.acl                        = 'public-read'
  s3_sync.encryption                 = false
end
$ middleman s3_sync

で見事差分だけアップロードしてくれて大変うれしい