S3(Simple Storage Service)


s3 inventory: 定期的にs3 object一覧を作成

記事:


サーバーレスでyumリポジトリ構築


s3 objectにメタデータ(cache-control, content-type 他を付ける)


大量のオブジェクトの削除

s3 bucketにobjectが100GBくらいあると消すのも時間がかかる。


S3 Storage Lens: S3の利用状況の分析


s3オブジェクトの変更・削除を禁止


S3オブジェクトの所有権を強制する


正規ユーザーID/正規ID:


s3-tree: tree形式で表示


S3 Event Notification: S3にアップロードされたらLambdaを起動する等


アクセスログ


セキュリティ


インターネットへ公開


Public Accessの検出/禁止


マルチバイトのオブジェクト名

S3のオブジェクト名にマルチバイト文字を使うのは止めた方が良い。
macOSでアップロードすると、Windows/Linuxでは別のファイル名として扱われる。

Unicode正規化方法:


バージョニング: 履歴管理


オンプレミス環境からのS3アクセス


料金削減


S3 Access Points: bucketに対して、アクセスポイント名でアクセスする

https://[access_point_name]-[accountID].s3-accesspoint.[region].amazonaws.com

コスト削減

S3自体のコストはEC2と較べたら安いが、容量が貯まるとバカにできないくらいの金額になる。


削除保護


バケット間レプリケーション


マルチパートアップロード

特定IAM userのみに許可


Bucket Policy


MalformedPolicy: Invalid principal in policy


リダイレクト


S3 Batch Operations: 多数のオブジェクトを対象にバッチジョブの実行

  1. S3 inventoryで対象のobjectを絞ったmanifest, csvファイルを作る。prefixは指定できるが一つまでなので、複数のprefixがある場合は複数回実行。
  2. S3 batch operation用のIAM roleを作り、src, dest, report用s3 bucketへのアクセスを許可する
  3. S3 batch operationでs3 inventoryで作成したmanifest, csvファイルを指定して実孝
  4. report用bucketに結果が残る

サーバレスでブラウザからs3へのファイルアップロード


Presigned URL: 有効期限付URLの発行


2020-09-30日以降、パス形式での S3 APIリクエスト廃止


S3 Select/Glacier Select: SQLでバケット上のCSV/JSON/Apache Parquet形式を集計


署名アルゴリズムv2の廃止と、v4への移行


ストレージクラスとライフサイクル

ログを保存するS3 bucketはそのままだと、保存容量が増え続けて、月額費用も上がり続けるためライフサイクルを設定したほうが良い。


S3+CloudFrontの静的サイトにアクセス制限を付ける

OIDC 準拠 IdP認証: ALBのユーザ認証 + Lambdaを使って、外部でユーザ認証を行う

CloudFrontで制限:

IP制限:

Basic認証:

cognitoでユーザ管理自体を行う:


web hosting: 静的サイト

S3単体でweb hostingできるが、https非対応等の制限がある。
CloudFrontやWAFと組みあわせで出来る事が広がる。

  1. Route53で名前解決
  2. CloudFront
    • WAFでIP制限
      • Allow: 許可IPリスト
      • Deny: all
    • ACMにSSL証明書をインポート
      • SSL: *.example.com
    • Aliasを設定
      • my-s3-bucket.example.com
  3. S3で静的ファイル配信
    • s3://my-s3-bucket/
    • ACLはPrivateで、web hostingは使用しない。

S3対応クライアント


Windowsでエクスプローラから参照


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


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


s3cmdで"WARNING: Redirected to..."


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


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

  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"」

別アカウントに許可する

  1. user1でAWS Manegement Consoleにログイン
  2. S3 > com.example.user1 > properties
  3. Permissions Tab > Edit bucket policy
    {
      "Id": "Policy0000000000000",
      "Statement": [
        {
          "Sid": "Stmt1000000000000",
          "Effect": "Allow",
          "Principal": {
            "AWS": [
              "arn:aws:iam::123456789012:user/iam-user-name"
            ]
          },
          "Action": [
            "s3:GetObject",
            "s3:ListBucket"
          ],
          "Resource": [
            "arn:aws:s3:::com.com.example.user1",
            "arn:aws:s3:::com.com.example.user1/*"
          ]
        }
      ]
    }
  4. Save
  1. Add more permissions に「user2@example.com」を入力
  2. Grantee: user2@example.com / List,Upload/Delete 等にチェック
  3. Save

s3://bucket/iam-user/ 以下だけを許可する


特定バケットのみ許可


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2022-05-17 (火) 17:42:15