EC2 インスタンスから S3 バケットをマウントする手順として、以前に EC2 上の CentOS7 から S3 をマウントする(API 利用編) というメモを書きました。この方法ではアクセスキー/シークレットキーを EC2 インスタンスの中に保存しましたが、IAM ロールを使えば EC2 インスタンス内に情報を保存する必要が無くなり、セキュリティが向上します。
S3 バケットマウント用の IAM ロールを作成する
新しいロールの作成
IAM で S3 アクセス用のロールを新規作成します。IAM で「ロール → 新しいロールの作成」をクリックします。
ロール名の設定
新規作成するロール名を入力します。今回は「Allow_AmazonS3FullAccess」としました。
ロールタイプの選択
ロールタイプは (AWS サービスロールの)「Amazon EC2」の右側にある「選択」をクリックします。
ポリシーのアタッチ
デフォルトでは多数のポリシーが表示されていますので、フィルターに「s3」と入力して表示を制限し、「AmazonS3FullAccess」のチェックを入れた状態で「次のステップ」をクリックします。
作成されたポリシーの確認
これでロールが作成されました。
IAM ロールを EC2 インスタンスに適用する
EC2 のインスタンスを新規作成する際に、作成したロールを適用します。
FUSE / git / Go 言語 / goofys のインストール
FUSE、git、Go 言語、goofys のインストール手順は、「アクセスキーを使う場合」も「IAM ロールを使う場合」も同じです。
FUSE と git のインストール
sudo yum update -y
sudo yum install -y fuse git
Go 言語のインストール
cd ~/
curl -O https://storage.googleapis.com/golang/go1.6.2.linux-amd64.tar.gz
tar xvf go1.6.2.linux-amd64.tar.gz
mv go .go
rm go1.6.2.linux-amd64.tar.gz
mkdir bin
mkdir gocode
ln -s ~/.go/bin/go ~/bin/go
echo 'export GOROOT=$HOME/.go' >> ~/.bashrc
echo 'export GOPATH=$HOME/gocode' >> ~/.bashrc
source ~/.bashrc
goofys のインストール
go get github.com/kahing/goofys
go install github.com/kahing/goofys
AWS の資格情報設定
今回の IAM ロールを利用するので、AWS の資格情報を用意する必要はありません(つまり、~/.aws/credentials を作成する必要はありません)。
S3 のバケットをマウントする
「IAM ロールを使う」ということは「API アクセス情報は使わない」ということです。つまり、~/.aws/credentials のプロファイル(Profile)情報は使わないので、goofys でバケットをマウントする際に --profile オプションを指定する必要はありません。
mkdir ~/s3
$GOPATH/bin/goofys --region <REGION> <BUCKET> ~/s3
状態確認
s3-mount-with-goofys という名前のバケットをマウントし、df で状態確認した結果は以下の通りです。
$ df -ahT -t fuse
Filesystem Type Size Used Avail Use% Mounted on
s3-mount-with-goofys fuse 1.0P 0 1.0P 0% /home/centos/s3
コメント