Memo/AmazonWebServices/S3

http://dexlab.net/pukiwiki/index.php?Memo/AmazonWebServices/S3
 

S3(Simple Storage Service)

  • Element Descriptions Version, Statement, Sid, Effect, Principal, Action, NotAction?, Resource, NotResource?, Condition, This section describ

S3対応ツール

  • WinSCP:Download オープンソース。GUI。v5.13以降でS3に対応。言語ファイル追加で日本語UI対応
    • 接続時にバケット名の指定ができないため、"s3:ListAllMyBuckets?"権限が必要。

linuxファイルシステムとしてマウント


S3でyumリポジトリ構築

  • 必要な要素
    • [S3 WebHosting?] rpmファイルを公開
    • createrepoコマンドでrpm metaデータ生成。EC2で行う?
    • [オプション] basic認証等も付けられる

s3cmdで"ERROR: S3 error: The provided security credentials are not valid."

  • Cloudian使用時に発生する S3互換のストレージサービス
    1. s3cmd ls s3://bucekt-name
    2. ERROR: S3 error: The provided security credentials are not valid.
  • 解決
    1. echo "signature_v2 = True" >> ~/.s3cfg

s3cmdで"WARNING: Redirected to..."

  • エラー
    1. s3cmd ls s3://com.example.www/
    2. WARNING: Redirected to: com.example.www.s3-us-west-2.amazonaws.com
  • 修正
    1. vim ~/.s3cfg
    2. ----
    3. bucket_location = us-west-2
    4. host_base = s3-us-west-2.amazonaws.com
    5. host_bucket = %(bucket)s.s3-us-west-2.amazonaws.com
    6. simpledb_host = sdb.us-west-2.amazonaws.com
    7. ----

S3のSSL証明書エラーの回避

  • S3のSSL証明書は'*.s3.amazonaws.com'のため、バケット名に「.」が含まれると証明書エラーになる
    1. cURL error: SSL: certificate subject name '*.s3.amazonaws.com' does not match target host name 'com.example.www.s3.amazonaws.com'
  • 回避方法
    • S3バケット名に"."を使わない。バケットの制約と制限 - Amazon Simple Storage Service
    • SSLを使わず、httpで通信すれば解消する
      1. $s3->use_ssl = false; // SSLを使わない
    • メソッドによっては、cURLのオプションでSSL証明書のチェックをしない
      1. $ret = $s3->list_buckets ( array(
      2.     "curlopts" => array(CURLOPT_SSL_VERIFYPEER => false),
      3. ) );

バケット毎にオブジェクトの有効期限(自動削除)

  • バケット毎に100個までルールを追加できる
  • prefix: 削除対象のバケット名を除いたフルパスの前方一致を指定。ワイルドカードや正規表現は指定できない。指定しなければ全オブジェクトが対象
    • 同じパスを含むprefixは指定できない。例:「logs/」「logs/2013」
  • 一定期間をすぎたオブジェクトをGlacierに移動もできる
  • 例:com.example.wwwバケットの「group01/logs」以下を対象に、作成日から7日経過したオブジェクトを消したい
    \---com.example.www
        \---group01
            \---logs
                \---2013
                    \---01
                        +---01
                        |   +---server01
                        |   |       message.log
                        |   |       
                        |   \---server02
                        |           message.log
                        |           
                        \---02
                            +---server01
                            |       message.log
                            |       
                            \---server02
                                    message.log
  1. 対象バケットを選択して右クリック > Properties > Lifecycle
  2. Add rule
    • Enabled: チェック
    • Name: delete logs(適当)
    • Prefix: group01/logs/
    • Time Period Format: Days from the creation date (オブジェクトの生成日) または Effective from date(任意の日)
    • Expiration: 7 days (7日すぎたら削除)
  3. Save
  4. 確認
    • Manegement Console: message.log の Propertiesに「Expiry Date: Thu Dec 06 09:00:00 GMT+900 2012」
    • ObjectをGET/HEADしたときのHTTP Headers に「x-amz-expiration: expiry-date="Thu, 06 Dec 2012 00:00:00 GMT", rule-id="delete logs"」

別アカウントに許可する

  • 以前はS3FoxでEdit ACL > Share > With UserID でAWSアカウントID(数字の羅列)を入力すれば良かったがエラー「Undefined」になる(2012-11-14現在)
    ただし、一度ManegementConsole?で設定すればRead/Write個別に設定できる
  • AWSアカウント user1@example.com の com.example.user1 バケットを AWSアカウント user2@example.com(AWSアカウント番号:123456789012) と共有する例
  1. user1でAWS Manegement Consoleにログイン
  2. S3 > com.example.user1 > properties
  3. Permissions Tab > Edit bucket policy
    1. {
    2.   "Id": "Policy0000000000000",
    3.   "Statement": [
    4.     {
    5.       "Sid": "Stmt1000000000000",
    6.       "Effect": "Allow",
    7.       "Principal": {
    8.         "AWS": [
    9.           "arn:aws:iam::123456789012:user/iam-user-name"
    10.         ]
    11.       },
    12.       "Action": [
    13.         "s3:GetObject",
    14.         "s3:ListBucket"
    15.       ],
    16.       "Resource": [
    17.         "arn:aws:s3:::com.com.example.user1",
    18.         "arn:aws:s3:::com.com.example.user1/*"
    19.       ]
    20.     }
    21.   ]
    22. }
  4. Save
  • 以下ではListBucket?は成功するが、GetObject?が成功せず
  1. Add more permissions に「user2@example.com」を入力
  2. Grantee: user2@example.com / List,Upload/Delete 等にチェック
  3. Save

特定バケットのみ許可

  • さらに "hoge/*" 以下だけ許可。以下の書き方では"hoge"にはマッチしない。StringLike?は"s3:ListBucket?"他特定メソッドにだけ使える
    1. {
    2.   "Statement": [
    3.     {
    4.       "Sid": "Stmt0000000000001",
    5.       "Action": [
    6.         "s3:ListBucket"
    7.       ],
    8.       "Effect": "Allow",
    9.       "Resource": [
    10.         "arn:aws:s3:::com.example.test",
    11.         "arn:aws:s3:::com.example.test/*"
    12.       ],
    13.       "Condition": {
    14.         "StringLike": {
    15.           "s3:prefix": [ "hoge/*"]
    16.         }
    17.       }
    18.     },
    19.     {
    20.       "Sid": "Stmt0000000000002",
    21.       "Action": [
    22.         "s3:GetObject"
    23.       ],
    24.       "Effect": "Allow",
    25.       "Resource": [
    26.         "arn:aws:s3:::com.example.test/hoge/*"
    27.       ]
    28.     },
    29.   ]
    30. }

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2018-08-17 (金) 14:26:05 (4d)