Skip to content

EC2 上の CentOS7 から goofys で S3 をマウントする(IAM ロール利用編)

EC2 インスタンスから S3 バケットをマウントする手順として、以前に EC2 上の CentOS7 から S3 をマウントする(API 利用編) というメモを書きました。この方法ではアクセスキー/シークレットキーを EC2 インスタンスの中に保存しましたが、IAM ロールを使えば EC2 インスタンス内に情報を保存する必要が無くなり、セキュリティが向上します。

S3 バケットマウント用の IAM ロールを作成する

新しいロールの作成

IAM で S3 アクセス用のロールを新規作成します。IAM で「ロール → 新しいロールの作成」をクリックします。

file

ロール名の設定

新規作成するロール名を入力します。今回は「Allow_AmazonS3FullAccess」としました。

file

ロールタイプの選択

ロールタイプは (AWS サービスロールの)「Amazon EC2」の右側にある「選択」をクリックします。

file

ポリシーのアタッチ

デフォルトでは多数のポリシーが表示されていますので、フィルターに「s3」と入力して表示を制限し、「AmazonS3FullAccess」のチェックを入れた状態で「次のステップ」をクリックします。

file

作成されたポリシーの確認

これでロールが作成されました。

file

IAM ロールを EC2 インスタンスに適用する

EC2 のインスタンスを新規作成する際に、作成したロールを適用します。

file

FUSE / git / Go 言語 / goofys のインストール

FUSE、git、Go 言語、goofys のインストール手順は、「アクセスキーを使う場合」も「IAM ロールを使う場合」も同じです。

FUSE と git のインストール

1
2
sudo yum update -y
sudo yum install -y fuse git

Go 言語のインストール

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
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 のインストール

1
2
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 オプションを指定する必要はありません。

1
2
mkdir ~/s3
$GOPATH/bin/goofys --region <REGION> <BUCKET> ~/s3

状態確認

s3-mount-with-goofys という名前のバケットをマウントし、df で状態確認した結果は以下の通りです。

1
2
3
$ 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