Home

バッテリー死亡

2014-02-12 23:07:16

先日、いつも使っているノート PC を居間で使おうと移動したところ、なぜか強制終了状態に。充電は 100 % だし、なんでだろう? と思ったんですが、どうやらバッテリーが死亡していたようです。バッテリーの死亡具合によっては、充電が 100 % と表示されることもあるそうで。

いったん、バッテリーを外して付け直したら、0 % で充電もできない状態になりました。これは確実に『死亡』です。ということで、さっそく発注しました。ノート PC を持ち歩くわけじゃないですが、UPS 代わりのバッテリー、ないと困ります。

ついでに、いまどきの Thinkpad はどんなものやら見てみると、六段アイソレーションキーボードしかないんですね...。IBM の頃の Thinkpad が懐かしいです...。

Go to TopGo to Top


Amazon IAM の設定

2014-02-07 21:28:08

連日の AWS シリーズですが、今回は IAM ( Identity and Access Management ) です。そもそも、S3 の Web ホスティングを使ってるわけですが、認証関係が必要なこともあるのかな、と思いまして。IAM を有効化して、認証に使えるかともと思ったんですが、IAM におけるパスワードは、あくまでコンソールにログインするためのもののようです。

なので、Web アプリとかで使う場合は、Web アプリ側で認証する、って感じになるんだと思います。とりあえず、こないだ作った「Amazon S3 Read Only Access」ポリシーについてあらためて調べてみると、ちょっとマズそうだということがわかりました。

ポリシーを見てみると、こんな感じになってます。マズいところとしては、S3 全体に対する読み取りアクセスがあるところ。ま、ポリシーのまんまなんですけど。これだと、見られたくないバケットまで見られてしまう危険性があるわけです。


  {
    "Version": "2012-10-17",
    "Statement": [{
      "Effect": "Allow",
      "Action": [
        "s3:Get*",
        "s3:List*"
      ],
      "Resource": "*"
    }]
  }

そこで、特定のバケットのみに制限したポリシーがこちら。これで、このポリシーを適用されたユーザーは、sample.antoine.st バケットしか見られない、と。どうやら、ホスト名の方はバケット内のオブジェクトを列挙するときに必要で、パスがついてる方はオブジェクト ( のコンテンツ ) を取ってくるときに必要になるみたいです。


  {
    "Version":"2012-10-17",
    "Statement": [{
      "Effect":"Allow",
      "Action": [
        "s3:Get*",
        "s3:List*"
      ],
      "Resource": [
        "arn:aws:s3:::sample.antoine.st",
        "arn:aws:s3:::sample.antoine.st/*"
      ]
    }]
  }

ちなみに、ポリシーが設定されていない場合、バケットの ListObject は成功 ( 値は返さない ) で、GetObject で失敗する、といった結果になってました。


で、よくよく考えてみると、二つの方法で認証を制御することができます。つまり、「S3 側のポリシーで IAM ユーザーを指定して許可を与える」ものと「IAM ユーザー ( グループ ) のポリシーで S3 リソースを指定して許可を与える」ものと。

S3 側での設定は↓な感じです。Principal として、IAM ユーザーを指定しています。ユーザー指定にある『999999999999』の部分はアカウント番号で、実際の値は IAM のユーザーサマリで確認することができます。どっちの方法を使うかは、『どういう風にアカウント / リソースを管理していくか』というポリシー次第でしょうか。


  {
    "Version": "2012-10-17",
    "Statement": [{
      "Sid": "Stmt1391660523000",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::999999999999:user/iam-sample-user01"
      },
      "Action": [
        "s3:Get*",
        "s3:List*"
      ],
      "Resource": [
        "arn:aws:s3:::sample.antoine.st",
        "arn:aws:s3:::sample.antoine.st/*"
      ]
    }]
  }

とりあえず、こんなところですが、認証まわりはやっぱり面白いです。クロスオリジンとかフェデレーションとかマルチファクタとかもあるので、時間ができたらいろいろやってみようと思います。


おまけ

S3 用の基本認証サービス? としては 『s3auth』 というのがありました。軽くドキュメントを読んだだけで、実際に試してはいませんが、なかなか面白そうな感じです。

Go to TopGo to Top


.NET で Amazon S3 プログラミング

2014-02-05 22:05:32

開発者らしく、たまにはプログラミングの話題を。昨日、ちょっと話に出ていた Programmatic Billing Access を調べてみたところ、請求書データが S3 の指定したバケットに保存される、ってことがわかりました。となれば、S3 に対してあれやこれやするプログラムを書けばいい、ってことになります。

1.SDK のダウンロード

まずは、何はなくても SDK、ということで、AWS SDK for .NET から .NET 用の SDK をダウンロードします。Visual Studio 2013 に統合した形で AWS にアクセスできる AWS Explorer や、プロジェクトのテンプレートが含まれてます。

2.IAM アカウントを作成

S3 にアクセスするためのアカウントを作ります。IAM Management Console で、グループ「s3readers」を作成して、パーミッションはテンプレートとして用意されている「Amazon S3 Read Only Access」を選択します。その後で、ユーザー「s3reader」を作成と。アクセスキーとシークレットアクセスキーが生成されるので、どこかにメモしておきます。

3. バケットの作成

S3 でバケットを作成 ( とりあえず、東京リージョンを指定 ) し、Programmatic Access のページで作られたポリシーを適用します。この辺、いまいち内容がよくわからないので、まじめにやるならきちんと勉強する必要がありそうです。

4. 請求書 CSV の設定

デフォルトでは、請求書の CSV は保存されないので、Billing Preferences で「Programmatic Access」を有効にします。どの請求書を保存するか、って設定も同じところにあります。

これで、先ほど作ったバケットの中に、aws-programmatic-acess-test-object が生成されます。テスト用ですね。しばらく待つ ( 一日数回更新される、とのこと。試してみたら、三時間程度で生成されていました ) と、複数のファイルが生成されます。

5. プログラム作成

あとは、S3 にアクセスするプログラムを作るだけ。SDK をインストールすると、プロジェクトのテンプレートが用意されているので、それでコンソールアプリケーションを作ってみました。アクセスキーとシークレットキーは、プロジェクトを作成するときに指定できます ( app.config に保存されます )。

IAM アカウントは S3 の読み取り権限しか持ってないので、デフォルトで生成されるプログラムはエラーが出まくりますが、あまり気にせずに。↓みたいな感じのプログラムで、さくっとバケット内のコンテンツが取得できました。


  public static voidg GetS3Contents()
  {
    IAmazonS3 s3Client;
    ListObjectsRequest lreq;
    ListObjectsResponse lres;
    GetObjectRequest oreq;
    GetObjectResponse ores;
    StreamReader sr;

    s3Client = AWSClientFactory.CreateAmazonS3Client();
    lreq = new ListObjectsRequest();
    lreq.BucketName = "< bucket name >";
    lres = s3Client.ListObjects(lreq);

    Console.WriteLine("*** {0} ***", lreq.BucketName);
    foreach (var item in lres.S3Objects)
    {
      Console.WriteLine("{0} : {1}", item.Key, item.Size);

      Console.WriteLine("-----");
      oreq = new GetObjectRequest();
      oreq.BucketName = lreq.BucketName;
      oreq.Key = item.Key;
      ores = s3Client.GetObject(oreq);
      sr = new StreamReader(ores.ResponseStream);
      Console.WriteLine(sr.ReadToEnd());
      Console.WriteLine("-----");
      sr.Close();
    }
  }

あとは、CSV の内容を表示するような感じの Web アプリケーションを作れば OK、ってところでしょうか。認証とかも考えると面倒ですが、最初の一歩としてはこんな感じで。

Go to TopGo to Top


Amazon マネジメントコンソール for iOS

2014-02-04 22:12:33

あいかわらず、モバイル版の AWS コンソールはダメな感じですが、代わりになりそうなアプリがありました。AWS マネジメントコンソール for Android and iOS ってやつです。Android は使ってないので、iOS だけですが、とりあえず、さくっと確認する用途には使えそうな感じ。

もう少しきちっとしたのが必要になったら、Programmatic Billing Access を利用して、簡単なアプリを作ってみるのもいいかもしれません。EC2 の練習をかねて、ちょっと作ってみようかな...。

Go to TopGo to Top


サーバー移行後の費用 - 暫定版

2014-02-02 22:19:48

1 月 17 日にサーバーを移行して、約二週間ほど経つことになります。Amazon 関連は基本的に従量制なので、とりあえず、どのくらいの費用がかかるのか? ってところですが、結局、かかった費用は 0.56 ドルとのこと。

このうち、DNS 関連が 0.51 ドルで、残りが S3 の費用ということになります。メールで使ってる Outlook.com は無料と。S3 分の内訳を見ると、0.03 ドルくらいが設定ミス ( RRS を使ってたり、違うリージョンで作ってたり ) に原因がありそうで、実際のところかかる費用は 0.03 ドルくらいな感じです ( 無料枠分を含む )。

無料枠が使えなくなったとしても、1 ドルいくかどうか、って感じでしょうか。これまでは、サーバーの費用に月々約 1,000 円くらいかかっていたので、かなりのコスト削減になりそうです。


そういえば、いつの頃からか Billing & Cost Management のページのモバイル版が使えなくなっていて、PC 版でしか表示されなくなってます。iPhone だと見づらいなぁ...。


Go to TopGo to Top