読者です 読者をやめる 読者になる 読者になる

らくがきちょう

なんとなく

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

AWS Linux

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

目次

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

新しいロールの作成

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

f:id:sig9:20160710001802p:plain

ロール名の設定

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

f:id:sig9:20160710001821p:plain

ロールタイプの選択

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

f:id:sig9:20160710001830p:plain

ポリシーのアタッチ

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

f:id:sig9:20160710001839p:plain

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

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

f:id:sig9:20160710001848p:plain

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

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

f:id:sig9:20160710001856p:plain

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