[mac] Middleman::S3Syncで使うAWS IAMユーザーのアクセスキー管理
Middleman S3Syncで使うIAMユーザーのアクセスキーをどのように管理するかについてメンバーに相談したところ、年齢詐称しているともっぱら噂の望月氏に教えてもらった方法がシンプルでわかりやすかったのでメモとして残しておきます。
必要なもの
筆者の環境ではrbenvとbundlerを使い、bundle execを省略できるような環境にしています。
用意するものは2つ。簡単です。Middlemanに関するその他の記事はこちらをどうぞ。
- アクセスキーを保存しておくcredentialsファイル
- AWS SDK for Ruby
アクセスキーを保存しておくファイルを作る
AWSのアクセスキーはuser rootに.aws/credentialsというファイルを作り、ここに保存しておくのが慣わしのようです。[...]でプロファイル名を指定します。このプロファイル名はconfig.rbからアクセスキーを呼び出すために必要です。
[s3-static-web-hogehoge] aws_access_key_id = XXXXXXXXXXXXXXXXX aws_secret_access_key = RjoiJksi2eualksIHK/9jhasSnj43ilkSFNU%KS345 [s3-static-web-hogehoge-stg] aws_access_key_id = YYYYYYYYYYYYYYYYY aws_secret_access_key = RjoiJksi2eualksIHK/9jhasSnj43ilkSFNU%KS345
試しに2つのプロファイルを用意していますが1つでも問題ありません。
AWS SDK for Ruby
config.rbでAWS SDK for Rubyを使ってアクセスキーを取得します。AWS SDK for RubyはGemをインストールするだけなのでとても簡単です。
Gemfileに追記
Gemfileにaws-sdk-v1を追記します。
gem 'aws-sdk-v1'
インストール
bundlerを使ってインストールします。
$ bundle install Fetching gem metadata from https://rubygems.org/........ Fetching additional metadata from https://rubygems.org/.. Resolving dependencies... Using CFPropertyList 2.3.0 Using i18n 0.6.11 Using json 1.8.2 Using minitest 5.5.1 Using thread_safe 0.3.4 Using tzinfo 1.2.2 Using activesupport 4.1.9 Using addressable 2.3.7 Using ansi 1.4.3 Using mini_portile 0.6.2 Using nokogiri 1.6.6.2 Installing aws-sdk-v1 1.61.0 Using sass 3.4.11 Using thor 0.19.1 Using bourbon 4.2.0 Using builder 3.2.2 Using bundler 1.7.6 Using hitimes 1.2.2 Using timers 4.0.1 Using celluloid 0.16.0 Using chunky_png 1.3.3 Using coffee-script-source 1.9.0 Using execjs 2.3.0 Using coffee-script 2.3.0 Using multi_json 1.10.1 Using compass-core 1.0.3 Using compass-import-once 1.0.5 Using rb-fsevent 0.9.4 Using ffi 1.9.6 Using rb-inotify 0.9.5 Using compass 1.0.3 Using eventmachine 1.0.6 Using http_parser.rb 0.6.0 Using em-websocket 0.5.1 Using erubis 2.7.0 Using excon 0.44.1 Using exifr 1.2.0 Using fission 0.5.0 Using formatador 0.2.5 Using mime-types 2.4.3 Using net-ssh 2.9.2 Using net-scp 1.2.1 Using fog-core 1.28.0 Using fog-xml 0.1.1 Using fog-atmos 0.1.0 Using fog-json 1.0.0 Using ipaddress 0.8.0 Using fog-aws 0.1.0 Using inflecto 0.0.2 Using fog-brightbox 0.7.1 Using fog-ecloud 0.0.2 Using fog-profitbricks 0.0.1 Using fog-radosgw 0.0.3 Using fog-sakuracloud 1.0.0 Using fog-serverlove 0.1.1 Using fog-softlayer 0.4.0 Using fog-storm_on_demand 0.1.0 Using fog-terremark 0.0.3 Using fog-vmfusion 0.0.1 Using fog-voxel 0.0.2 Using fog 1.27.0 Using fspath 2.1.1 Using tilt 1.4.1 Using haml 4.0.6 Using hike 1.2.3 Using uber 0.0.13 Using hooks 0.4.0 Using htmlcompressor 0.1.2 Using image_size 1.4.1 Using in_threads 1.3.1 Using progress 3.1.0 Using image_optim 0.20.2 Using image_optim_pack 0.2.1.20150203 Using kramdown 1.5.0 Using listen 2.8.5 Using map 6.5.5 Using padrino-support 0.12.4 Using padrino-helpers 0.12.4 Using rack 1.6.0 Using rack-test 0.6.3 Using middleman-core 3.3.7 Using sprockets 2.12.3 Using sprockets-helpers 1.1.0 Using sprockets-sass 1.3.1 Using middleman-sprockets 3.4.1 Using uglifier 2.7.0 Using middleman 3.3.7 Using middleman-blog 3.5.3 Using middleman-imageoptim 0.2.0 Using rack-livereload 0.3.15 Using middleman-livereload 3.4.2 Using middleman-minify-html 3.4.0 Using pmap 1.0.2 Using ruby-progressbar 1.7.1 Using unf_ext 0.0.6 Using unf 0.1.4 Using middleman-s3_sync 3.0.41 Using neat 1.7.1 Your bundle is complete! It was installed into ./vendor/bundle
これで準備は完了です。
config.rbでアクセスキーを取得する
config.rbに手を加えます。
AWS SDKの読み込み
まず最初にファイルの先頭でAWS SDKを読み込みます。
require 'aws-sdk-v1' ...
SDKを使ってアクセスキーを取得
S3Sync設定の部分にアクセスキーを取得するためのコードを追加します。profile_name = 's3-static-web-hogehoge'でプロファイル名を指定して、credential[:access_key_id]とcredential[:secret_access_key]でそれぞれのキーを渡します。
######################## # # S3sync Setting # ######################## activate :s3_sync do |config| # Profile name profile_name = 's3-static-web-hogehoge' # profile_name = 's3-static-web-hogehoge-stg' # <- staging # Get credential credential = AWS::Core::CredentialProviders:: SharedCredentialFileProvider .new(profile_name: profile_name) .get_credentials # S3Sync config config.bucket = 'hogehoge.s3website.com' config.region = 'ap-northeast-1' config.aws_access_key_id = credential[:access_key_id] config.aws_secret_access_key = credential[:secret_access_key] config.delete = true config.after_build = false config.prefer_gzip = true config.path_style = true config.reduced_redundancy_storage = false config.acl = 'public-read' config.encryption = false end
S3Syncを実行してみる
変更されたファイルはありませんが、無事Syncできているようです。
$ middleman s3_sync == LiveReload accepting connections from http://192.168.1.47:35729 s3_sync Gathering the paths to evaluate.== LiveReload accepting connections from http://192.168.1.47:35729 Progress: |====================================================================================================================================================| s3_sync All S3 files are up to date.
これで、環境変数も使うことなく、アクセスキーを充てることができるようになりました。安心してPublicなリポジトリにも置くことができますね。
この記事は初めてのMiddleman:Middleman::S3Syncで使うAWS IAMユーザーのアクセスキー管理方法についての転載です。