近いうちに AWS CLIコマンドで生成されるファイルは ~/.aws/config から ~/.aws/credentials に統合されるというお話

Route53 を DSL で管理する Roadworker は便利だからよく使っていたのですが、 AWS CLI 生成した ~/.aws/config を読み込んでくれなくてちょっと不便だなって思っていたのですが、 Roadworker で ~/.aws/config 読み込まないのはなんで?って質問したら

Want to read from AWS credentials from awscli generated config file · Issue #6 · winebarrel/roadworker

どうやら AWS SDK では ~/.aws/credentials を読み込むのが最近のトレンドのようだったのです。

A New and Standardized Way to Manage Credentials in the AWS SDKs – AWS Security Blog

確かに aws cli のドキュメント調べたらまずはじめに ~/.aws/credentials がないか調べますって書いてあって、だがしかし、 aws configure コマンドは ~/.aws/config ファイルを生成して、なんでかなあって不思議に思ってたんですよね。

Configuring the AWS Command Line Interface – AWS Command Line Interface

親切にも指定したクレデンシャルファイルを読み込むオプションをつけて実装してくださいました。
フィードバック速い!

で、肝心の AWS CLI に質問したら即効で答え返ってきました。
もうその議論はなされていてレビュー通ったらマージされて、リリースされるよって教えてくれました。
僕のすごいへたくそな英語にも親切に答えてくれる。
それなりに通じてるんだろうか・・・。あなたがチュキだからーみたいな感じになってないといいな。

aws configure may have to generate ~/.aws/credentials instead ~/.aws/config · Issue #918 · aws/aws-cli

楽しみだなあ。
issue を登録するだけで contribution graph に色が塗られるのは気持ちいいけど、コード的なコミットもしたいなあ。

いかにも貢献していますって感じでかっこいいじゃないですか。

ちなみに今の AWS CLI のバージョンは 1.4.4 です。
リリースされたらアップグレードしましょう。

pip install --upgrade awscli

あと、Roadworker はとってもオススメです。もっと Star ついてもいいと思う。
僕の尊敬している伊藤直也さんも使ってるので最高です。
いつか直也さんみたいなすごいエンジニアになりたい。

以上、半分以上僕の日記帳でした。

Vagrant AWS Provider を使ってみた

まずはダミーの box イメージをインポートする。

vagrant box add dummy https://github.com/mitchellh/vagrant-aws/raw/master/dummy.box

そして次のような Vagrantfile を書く。
前提条件は以下。

  • IAMで予めEC2にアクセスを制限したユーザのクレデンシャルを払いだしておくこと
  • 使用するキーペアの名前は vagrant
  • 起動するインスタンスタイプは t2.micro (デフォルトだと m3.medium で起動してしまう)
  • Vagrant 用のセキュリティグループを定義してそれを使用
  • 東京リージョンを指定(ap-northeast-1)
  • 起動する AMI は Amazon Linux AMI 2014.03.2 (HVM) (ami-29dc9228)
  • SSH ユーザ名は ec2-user
  • 対応する秘密鍵の場所を指定する。
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure("2") do |config|
config.vm.box = "dummy"
config.vm.provider :aws do |aws, override|
aws.access_key_id = ""
aws.secret_access_key = ""
aws.keypair_name = "vagrant"
aws.instance_type = "t2.micro"
aws.security_groups = [ "vagrant" ]
aws.region = "ap-northeast-1"
# Amazon Linux AMI 2014.03.2 (HVM)
aws.ami = "ami-29dc9228"
override.ssh.username = "ec2-user"
override.ssh.private_key_path = "~/.ssh/aws-ec2-vagrant.pem"
end
end

そして

vagrant up --provider=aws

以下の様なエラーが出るが、ここでは気にしない。

==> default: Rsyncing folder: /Users/wnoguchi/Documents/tmp/vagrant-ec2/ => /vagrant
The following SSH command responded with a non-zero exit status.
Vagrant assumes that this means the command failed!
mkdir -p '/vagrant'
Stdout from the command:
Stderr from the command:
sudo: sorry, you must have a tty to run sudo

IPアドレス知らなくてもSSHできる。

vagrant ssh

グローバルIPが知りたければインスタンスメタデータcurl で取得する。

[ec2-user@ip-172-31-25-90 ~]$ curl -w "\n" http://169.254.169.254/latest/meta-data/public-hostname
ec2-54-64-60-151.ap-northeast-1.compute.amazonaws.com
[ec2-user@ip-172-31-25-90 ~]$ curl -w "\n" http://169.254.169.254/latest/meta-data/public-ipv4
54.64.60.151

あとは nginx 入れるなりなんなりして実験して、用が済んだら

vagrant halt

か潔く

vagrant destroy -f

References

  1. mitchellh/vagrant-aws
  2. インスタンスメタデータとユーザーデータ – Amazon Elastic Compute Cloud

AWSで2段階認証(MFA)を構成する(Android版: Google Authenticator使用)

AWSアカウントはGoogleアカウント、Amazonアカウントに次いで大事なアカウントです。
2段階認証、多要素認証、MFA(Multi-Factor Authentication)等々呼ばれ方は様々ですが、
AWSアカウントにも2段階認証を設定することができます。
AWSではMFA(Multi-Factor Authentication, 多要素認証)と呼ばれています。
今回はこれを設定します。

2段階認証を実行するプロセスにはSMSによるメッセージングもできるのですが、
ドコモとかだと海外からのSMSの受信制限とかがかかっていたりして、これを解除しないとうまく受け取れないことがあります。
最初GitHubから2段階認証のワンタイムパスワードを何度やってもSMSで受け取れなくて国コードが間違ってるんじゃないかとか、
先頭の0を取らないといけないじゃないかとか、GitHubのバグなんじゃないかと思いました。

ここではAndroidアプリのGoogle Authenticator(Google認証システム)を使用します。
Google AuthenticatorはGoogleの二段階認証にしか使えないのかと思っていたのですが、
他の2段階認証を採用しているシステムでも使えるようです。
便利ですねー。

MFAの設定を有効にする

  • Management Consoleにログイン後、右上のメニューから[Security Credentials]を選択します。

f:id:wnoguchi0727:20140812213056p:plain

  • あなたがアクセスしようとしているページはAWSアカウントのセキュリティクレデンシャルのページで、
    AWSアカウントのセキュリティクレデンシャルはAWSリソースへの無制限アクセスを提供するものだから
    AWSのベストプラクティスにならってIAMで制限されたユーザを作成してやったほうがいいよーと
    警告が表示されるので[Continue to Security Credentials]をクリックして先に進みます。

f:id:wnoguchi0727:20140812213051p:plain

  • 次に[Your Security Credentials]セクション内の[Multi-Factor Authentication(MFA)]を開いて
    [Activate MFA]ボタンをクリックします。

f:id:wnoguchi0727:20140812213054p:plain

  • [A virtual MFA device]を選択します。

f:id:wnoguchi0727:20140812213044p:plain

  • 要するに、Google Authenticatorを入れてねと書いてあります。

f:id:wnoguchi0727:20140812213045p:plain

  • QRコードが表示されました。
    この段階ではGoogle Authenticatorがインストール済みの前提で話を進めます。
    さらに厳重に認証コードを2連続で入力を促されます。
    そんなことできたんだ・・・。

f:id:wnoguchi0727:20140812213046p:plain

Google Authenticatorを起動する

さて、このQRコードを読み取るためにGoogle Authenticatorを起動します。
こんなアイコンのやつですね。

f:id:wnoguchi0727:20140812213053p:plain

  • [アカウントを設定]をタップします。

f:id:wnoguchi0727:20140812213052p:plain

f:id:wnoguchi0727:20140812213055p:plain

  • AWSアカウントのワンタイムパスワードを生成するところが現れたのがわかると思います。
    右側の円グラフのゲージがこの認証コードの有効な期間なので2回、この認証コードををさっきの認証コード入力欄に入力して[Next Step]をクリックします。

f:id:wnoguchi0727:20140812213050p:plain

  • これで2段階認証を行うためのGoogle AuthenticatorとAWSアカウントが紐付けられました。

f:id:wnoguchi0727:20140812213047p:plain

f:id:wnoguchi0727:20140812213048p:plain

実際にログインしてみる

実際に2段階認証が有効になったかサインアウトしてもう一度ログインしてみます。

  • ログインID、パスワードを入力します。

f:id:wnoguchi0727:20140812213057p:plain

  • 認証コードを求められるようになりました。
    ここでGoogle Authenticatorで生成される認証コードを期限内に入力してログインします。

f:id:wnoguchi0727:20140812213049p:plain

これでAWSアカウントに2段階認証を設定することができました。

デバイスが壊れた、紛失してログインできなくなってしまったら

GitHubやQiita等はリカバリコードが用意されていますが、AWSの場合は直接問合せする必要があるようです。
要注意。

Amazon Route53にレジストラとしての機能がついたのでさっそく使ってみた

帰ってきて何の気なしにAmazonからのメールをぼーっとみてると
「あーはいはい、またなんか機能追加したのね」ってそのまま即効でアーカイブしそうになったけど、

(2014-08-09追記 日本語ブログエントリ出てました)

Domain Name Registration

You can now purchase a new domain name or transfer the management of your existing domain name to Route 53. When you purchase new domains via Route 53, the service will automatically configure a Hosted Zone for each domain and ensure the privacy of your WHOIS record at no additional charge. In addition, you benefit from AWS‘s consolidated billing to manage your domain name expenses alongside all of your other AWS resources.

この文章見てもしかしてRoute53にレジストラとしての機能が実装されたのか?

って半信半疑で少しぐぐってみたけど日本語の情報全然ないから僕の英語力がおかしいのかと思ったんだけど、
ちょっと試してみました。

上の文章を要約すると

  1. Amazon Route53 でドメインのお買い物ができるようになりました(レジストラになりました)。
  2. ドメインの転送もできます。
  3. Route53 で購入したドメインは自動的に Hosted Zone が構成されます。
  4. 何もしなくてもWHOISレコードからプライバシーが保護されます。
  5. 支払いはAWSの他のサービスの利用料金と統合して請求されます。

ものは試しなのでやってみました

ドメイン買ってみる

  • Route53のダッシュボードでDomainsを選択

f:id:wnoguchi0727:20140802020330p:plain

foo-bar-blah.com はもう僕がお名前.comで取得しちゃっているので買えません。
foo-bar-blah.jp ドメインは $100 だそうです。ぼったくり価格w

f:id:wnoguchi0727:20140802020333p:plain

今回は foo-bar-blah.net を取得することにしました。
Continue をクリック。

f:id:wnoguchi0727:20140802020332p:plain

技術者情報を入力します。
WHOISで個人情報が大公開されないようにするために Privacy Protection を Yes とするのがポイント。

f:id:wnoguchi0727:20140802024714p:plain

最終的な確認画面。規約に同意したらチェックして購入を確定する。

f:id:wnoguchi0727:20140802020335p:plain

ドメインの登録リクエストが正常に送信されたことが確認できる。

f:id:wnoguchi0727:20140802020336p:plain

ダッシュボードに戻ってみると Domain Registration in Progress となっており、登録中であることがわかる。

f:id:wnoguchi0727:20140802020337p:plain

しばらくすると Domains のメニューで選択した時の一覧に先ほど購入したドメインがリストアップされた。

f:id:wnoguchi0727:20140802020339p:plain

Hosted Zoneも自動的に構成されており、すぐに A レコード等を追加して使いはじめることができるようになっていた。

f:id:wnoguchi0727:20140802023645p:plain

すごいな・・・。

ドメイン移管してみる

お名前.comで取得したちょうど期限が切れそうなドメインが合ったのでRoute53に転送しました。

まずは Transfer Domain をクリックする。

f:id:wnoguchi0727:20140802020338p:plain

移管したいドメインを検索する。
今回はもうすぐ有効期限が切れそうなドメイン cloud-clipboard.com を選択した。

f:id:wnoguchi0727:20140802020340p:plain

AuthCode 等を入力して確定。

f:id:wnoguchi0727:20140802020341p:plain

これで移管の申請は完了。

f:id:wnoguchi0727:20140802020342p:plain

たぶんもう少ししたら結果出ると思う(2014/08/01深夜)。

Domain transfer in progress となり、ドメイン移管の手続きが始まったようです(2014/08/02朝)。

f:id:wnoguchi0727:20140802085611p:plain

Geographic Routing with Geo DNS の項についてはよくわかりませんでしたが、
負荷分散的な話でしょうか。誰か教えてください。。。

Lower Prices for DNS Queries では 8/1 から Route53 へのクエリ問合せが20%安くなったよって言ってるんでしょうか。

うーん、英語は難しいですね。