AWSのIAM/CloudWatch/S3


IAM

  • rootアカウントbillingのみに使用。

AWS Organizations & Consolidated(統合された) Billing

  • Organization Unit = Accountの集合
    • マスターアカウントから作っていくことができる
    • Billingが統合される
  • Orgamization Unitには(単体のAccountと同様に)SCP(ServiceControlPolicies)で有効/無効を切り替えられる。

CloudWatchとSNSでbilling alarmを通知するシステム

CloudWatch

  • 6時間ごとの累計(各瞬間ででの6時間累計かも?)の請求額が$10を超過したらSNSのトピック(BillingAlarmと命名した)に通知を送る。
    • 細かい設定の定義はこちらを参考にする

SNS(Simple Notification Service)

  • どのemailに通知を送るかはこちらで設定することになる。

S3

  • Object(in a Bucket)
    • key(ファイル名)
    • value(データ、0~5TB)
    • version
    • metadata
    • SubResource
      • access control list
      • torrent?? ## Data Consistency Model
  • ReadAfterWrite consistency(新しいオブジェクトをPUTで新規作成する時にその場で即座に確認)

    • Eventual consistency(既存のオブジェクトをPUTやDELETEで更新する時にはちょっと時間かかる)
    • つまり他のアクセス者がolder versionを取得することがありうる。
  • PUTに成功したらHTTP Status=200を得る

  • DELETEのためにMFAを設定できる

Storage Class Tier(オブジェクトごとに設定可能)


※ IA = Infrequently Access
※ Glacier = 氷河、すなわちアーカイブされたデータ(Deepは取得により時間がかかる(12時間)がより安くなる)
※ Intelligent-Tiering = 機械学習で最適のTierを選択してくれる
※ OneZone以外は3つ以上のAZに保存される。OneZoneは1つのAZの中で冗長性を保つ。

Charge

  • Storage
  • Requests & DataRetrieval
    • インターネット上のクライアントからのリクエストに応じて課金(バケットからのin/outによる料金のことではない)
    • DELETE リクエストおよび CANCEL リクエストは無料です。
  • StorageManagePricing
  • DataTransferPricing

    • Transfer(AWSのサービスにデータをin/outすること)時に発生する
    • すなわち、(1)S3バケット間のデータ転送、(2)S3とEC2などのデータのやりとり、(3)ユーザーからのアップロード、いずれでも発生。
    • S3の関してはinは無料である。outにのみ課金される。
  • TransferAccelaration

    • 上記のDataTransferをより高速で行う。以下の時に使うべし。
    • 中央のバケットに対して世界中のお客様からアップロードが行われる場合。(アップロード時にEdgeLocationにファイルがアップロードされ、そこから最短距離でS3に転送されるので速い)
    • 大陸間で定期的にギガバイトからテラバイト単位のデータを送信する場合
  • Same/Cross-RegionReplicationPricing

    • 非同期で複製される
    • Sameの方は比較的新しく追加された機能

AccessControlListとAccessPolicyでデータアクセスを制限

  • オブジェクト、バケツのそれぞれでpublicかを設定できる(はず)

Encryption

  • クライアントサイドで頑張る
  • 通信観でHTTPS
    • SSL/TLS
  • サーバーサイドで頑張る(SSE=ServerSideEncryption)
    • SS3-S3(S3 ManagedKeys)
    • SSE-KMS(AWS KeyManagedServiceのManagedKey)
    • SSE-C(AWSにCustomerProvidedKeyを持ち込む)

Versioning

  • 一度オンにしたらオフにできない。Suspendedにしかならない。
  • publicのファイルと同名のファイルをアップロードして新バージョンを作ってもpublicにはならない
  • 容量が雪だるましきに増えるので注意する。
    • Versioningオフにするとか
    • LifecyclePolicy設定するとか
  • Versioningがオンの時にファイル名からファイルを削除したら、Deleted markerという新しいバージョンが増えるだけ。全てのversionを一つずつ消す必要がある。
  • MFA DELETEと提携することで、セキュリティ強化できる?

Lifecycle Management

  • 指定した時間が経ったら(1)オブジェクトのtier(StorageClass)を変化させたり、(2)オブジェクトをexpireさせたりできる
  • LifeCycleのRuleを作成する
    • Storage class transition
    • Configure expiration

S3-Cross-Account Access

アカウントをまたいでS3のリソースにアクセスするには以下の方法がある。(最初の2つはProgramatic Access Only)

  1. Bucket Policy & IAM(to entire bucket)の組み合わせ
  2. Bucket ACLs(オブジェクトごとに設定) & IAM(to individual object)の組み合わせ
  3. (Cross-accountで)対象のS3オブジェクトにアクセスできるIAM Roleを他のアカウントに与える(他のアカウントをリソースとして見る)

3のやり方

  1. 振り分け元のアカウントで、S3_Cross_Account_Accessと言うロールを作る。
    • このロールのPolicyはAmazonS3FullAccessとする。
    • このロールのTrustedEntityはAccountにし、S3アクセスを振り当てたいアカウントのIDを入力する。
  2. サインアウトして、振り分け先のアカウントのユーザーでログイン。
    • ルートユーザーでログインしても、どうやら切り替えできないようだ...?
    • このアカウントでIAMでRoleの一覧を見てもS3_Cross_Account_Accessというロールは含まれていないようだ...?
    • また、このロールを明示的にどれかしらのUserやGroupに与えるという操作は不要のようだ...?
  3. そのUserで、コンソールのヘッダーからSwitchRoleを選択する。以下の画面で、アカウント=振り当て元のアカウントIDロール=S3_Cross_Account_Accessを入力する。
    • 1の画像のGive this link to users who can switch roles in the consoleのアカウントでもOKなはず...(だがうまくいかなかった)

(c.f) AWS Organizations を実際に初めてみる第一歩ではフルアクセスのRoleを与えている。

Cross-Region Replication

  • 複製元のバケットのVersioningをオンにする必要がある。
  • 複製時にすでに複製元のバケットの中に入っているオブジェクトは複製されない。
  • その後複製元のバケットにPUTされたオブジェクトはレプリカバケットに複製される。
  • 複製元でDELETE markerがつけられても他のバケットに反映されない(AWSが意図的にそうした)

S3 Transfer Acceleration

ファイルをアップロードしたらエッジロケーションのCloudFrontから最短距離のルートが選択され、指定のS3バケットに転送される。
- Amazon S3 Transfer Acceleration
Speed Comparison
でAccelerationを使った時と使わなかった時の速度比較が表示される。