S3デフォルト暗号化

表題について。

■ 環境

  • AWS S3
  • awscli 1.11.190
  • Mac OSX El Capitan

■ デフォルト暗号化

S3上でデフォルト暗号化がされるようにバケットの設定をすることができる。2017/11頃からであったと記憶している。ManagementConsoleから下記で変更することが可能である。

バケット > プロパティ > デフォルト暗号化

とりあえず”AES-256“を選択した。

`aws`コマンドでオブジェクトをput/getしても特に何もしなくても問題無い。

このManagementConsoleで”デフォルト暗号化”を設定するが、awscliでできるのか?を見てみた。

■ s3

$ aws s3 mb help

マニュアルを見ても、特にオプションと思わしきものはない。”region“を指定することができるくらいのようである。

■ s3api

$ aws s3api create-bucket help

上記では”–create-bucket-configuration“オプションがあるので指定できるのかと思ったのだが、”LocationConstraint“しか指定できないように読める…。その他は権限周りのオプションのようだ。

デフォルト暗号化の設定は後からでも変更できるな、と思い他のサブコマンドも確認してみる。

get-bucket-encryption

$ aws s3api get-bucket-encryption --bucket withsin
{
    "ServerSideEncryptionConfiguration": {
        "Rules": [
            {
                "ApplyServerSideEncryptionByDefault": {
                    "SSEAlgorithm": "AES256"
                }
            }
        ]
    }
}
$

暗号化しているか?は”get-bucket-encryption“サブコマンドで取得できる。ちなみにデフォルト暗号化をしていないバケットに対して同様のコマンドを実行すると下記のようになるようだ。

$ aws s3api get-bucket-encryption --bucket withsin2

An error occurred (ServerSideEncryptionConfigurationNotFoundError) when calling the GetBucketEncryption operation: The server side encryption configuration was not found
$

put-bucket-encryption

$ aws s3api put-bucket-encryption help

どうやらこのサブコマンドで設定することが可能なようである。試してみよう。

$ aws s3api put-bucket-encryption --bucket withsin2 --server-side-encryption-configuration '{
  "Rules": [
    {
      "ApplyServerSideEncryptionByDefault": {
        "SSEAlgorithm": "AES256"
      }
    }
  ]
}'
$
$ aws s3api get-bucket-encryption --bucket withsin2
{
    "ServerSideEncryptionConfiguration": {
        "Rules": [
            {
                "ApplyServerSideEncryptionByDefault": {
                    "SSEAlgorithm": "AES256"
                }
            }
        ]
    }
}
$

上記のように設定ができたようである。

以上。

aws s3 ls bucket

知らなかったので表題をメモ。

■ 環境

  • awscli 1.11.113
  • Mac OSX El Capitan

■ aws s3 ls

いつもは下記のようにやっていた。

$ aws s3 ls s3://withsin/
                           PRE project1/
                           PRE project2/
$

何の気なしに下記のようにやっても同じ結果が得られた。

$ aws s3 ls withsin
                           PRE project1/
                           PRE project2/
$

s3://“のスキームはなくても良いらしい。知らなかった。

以上。

S3の特定のパス配下のファイル総容量

表題の通り。awscliで、S3のあるパス配下にあるすべてのファイルの総容量を知りたい。

■ 環境

  • awk
  • awscli 1.11.47

■ s3

下記コマンドで取得することができる。

$ aws s3 ls s3://[bucket]/[path] --recursive | awk 'BEGIN {sum=0} {sum+=$3} END {print sum}'

肝となるところは”–recursive“で配下全てのファイルについて`ls`で詳細を取得しているところであろうか。`ls`の表記の中からファイル容量が3つ目の項目に表示されているので、この3つ目の項目を`awk`で総和計算している。

試しに自身のとある環境で行ってみたところ、下記のような結果を得られた。

$ aws s3 ls s3://[bucket]/[path] --recursive | awk 'BEGIN {sum=0} {sum+=$3} END {print sum}'
373689
$

表示はByteなので、`awk`の最後で`/1024`としていけば”KByte“や”MByte“で取得することも可能である。

以上。

S3の使用容量

表題の件を調べたい。

■ 環境

  • awscli 1.10.19

■ 目的

S3バケットの全使用容量を調べたい。`s3`コマンドで取得できそうである。

aws s3 ls --recursive --summarize --human-readable s3://withsin/

上記は自身の所有する”withsin“バケットの全容量を計算している。

`–recursive`で再起的に実行する。これで指定したバケット配下全てのファイルが対象となる。`–summarize`で`ls`に対して最後に合計を表示する。`–human-readable`で容量を理解しやすいようにしている。スクリプト中で行う場合には、単位が人間寄りになっているので外した方が良いだろう。これで実行すると下記のようになる。

$ aws s3 ls --recursive --summarize --human-readable s3://withsin/
  :
2014-04-14 16:15:14    0 Bytes XXXX/
2015-09-25 14:37:17  731.2 KiB XXXX/YYYYYY.tar.gz

Total Objects: 546
   Total Size: 358.9 MiB
$

以上。

■ 関連

S3バケットのリージョンを取得

awscliで表題を取得する。

■ 環境

  • awscli 1.10.19

■ get-bucket-location

S3バケットのリージョンを`s3api`コマンドで取得するには`get-bucket-location`サブコマンドを使用する。

$ aws s3api get-bucket-location --bucket withsin
{
    "LocationConstraint": "ap-northeast-1"
}
$

ManagementConsoleからも確認してみる。

s3-bucket-location

確かに”Tokyo“となっているので一致する。

以上。

■ 関連