IAMロールを使ってEC2からS3のバケット一覧を取得してみた時のメモ
参考
- Using IAM Roles for Amazon EC2 Instances with the AWS SDK for Ruby
- AWS SDK for Ruby(V2)を利用して、Amazon S3を操作する
EC2からS3へアクセスするIAMロールを作る
- Roles
- Create New Role
- ロール名を決める(S3_Accessなど)
- AWS Services RoleではAmazon EC2を選択
- Attach PolicyではAmazonS3FullAccessを選択(一覧を取るだけなのでReadOnlyのものでもOK)
- Create Role
EC2の起動
起動する時のIAM Roreの項目で先ほどのロールを選択(S3_Accessなど)
確認
以降、対象のEC2にSSHログインしてからの操作。
Rubyでやってみる。まずはAWS-SDKをインストール
$gem install aws-sdk-core
コードを書いてみる
$vi get_buckets.rb
以下のようにする。
require "aws-sdk-core"
Aws.config[:region] = 'ap-northeast-1'
s3 = Aws::S3::Client.new
resp = s3.list_buckets
puts resp.buckets.map(&:name)
実行
$ruby get_buckets.rb
これで取得できちゃいます。credentialsの設定とかを特にしなくて良いので楽。ドキュメントを見るとローカルのcredential情報を探した後になければIAMRoleの情報を探して使うようです。便利。
This code initializes an AWS::S3 object without specifying any credentials, which initiates a search for credentials using the default credential provider chain. The default credential provider chain looks for credentials specified in the environment, and failing that, will look for credentials from EC2’s metadata service.
また、メタデータ(curl http://169.254.169.254/latest/meta-data/iam/security-credentials/S3_Access)を直接取得すると分かるのですが、利用できるAccessKeyIdとSecretAccessKeyは一定周期でより変わるので、直接credentialファイルを置くよりもよりセキュアだと思います。
0 件のコメント:
コメントを投稿