DACエンジニアブログ:アドテクゑびす界

DACのエンジニアやマーケター、アナリストが執筆するアドテクの技術系ブログです。

AWSのcredentialsを注意して取り扱う話

はじめに

最近ではオンプレミスでサーバを自前で用意する他に、クラウドサーバを使う機会が増えているかと思います。 弊社では、Amazon Web Services (AWS)を利用しており、多くの処理をAWS上で行っています。

AWSを利用していくにあたっては、アクセス情報(credentials)を注意して取り扱う必要があります。 ここでは、そんなAWSのcredentials (Access Key IDとSecret Access Key) の呼び出し方についてまとめます。

優先順位は以下のようになります。

  1. 環境変数に設定する
  2. 設定ファイル ($HOME/.aws/credentials)にもたせておく
  3. 各言語のSDKを使って、コードに直接もたせる

他にもいくつか設定方法はあるみたいですが、上記3つが使う機会の多い方法だと思うので絞って説明します。

環境変数に設定する

これはそのまんまですね。.bashrcなどに設定としてもたせます。

export AWS_ACCESS_KEY_ID=AKXXXXXXXXXXXXX
export AWS_SECRET_ACCESS_KEY=lxxxxxxxxxxx/yyy/zzzzzzzzzz

このように設定して、コード中で環境変数から展開してしまいましょう。

設定ファイル ($HOME/.aws/credentials)にもたせておく

これはAWSのコマンドラインインターフェイス(CLI)を使います。 CLI自体の導入は解説が多いので割愛しますが、設定は以下のようになります。

 [default]
 aws_access_key_id = AXXXXXXXXXXXXXXXX
 aws_secret_access_key = qxxAAAaaa+XXx/BBBbbxxx+YyYyYDDDDddddyy

 [sample1]
 aws_access_key_id = AYYYYYYYYYYYYYYYYY
 aws_secret_access_key = KNNNNnnnMMM/LLLLlllEEjcccCCCC

上の設定を見て分かると思いますが、この方法では複数の設定を記述できます。 複数の設定を保持しているならば、CLIで実行する場合、以下のように設定を指定して使い分けることができます。

aws s3 ls --profile default
aws s3 ls --profile sample

コマンドラインから操作する場合は便利だと思います。

各言語のSDKを使って、コードに直接もたせる

直接コードの中に書いてしまう方法です。 セキュリティ的にはあまり良いとは言えないので、うまいこと外部のファイルから読み込ませるようにしましょう。

下記のサンプルはRubyでの書き方です。

require "aws-sdk" 

redshift = Aws::Redshift::Client.new(
  region: "ap-northeast-1",
  access_key_id: "AXXXXXXXXXXXXXXXX",
  secret_access_key: "qxxAAAaaa+XXx/BBBbbxxx+YyYyYDDDDddddyy"
)

このように書けますが、上記 2.でcredentialsを設定してしまえばコード中にaccess_key_idとsecret_access_keyをもたせる必要はなくなります。 gitなどでコードを公開する場合は、上手く組み合わせてcredentialsを見えないようにしておく必要があります。

まとめ

クラウドサーバは非常に便利ですが、その分接続情報などの取り扱いには気をつけないといけませんね。