カテゴリー: tech

  • aws cli コマンドを実行するとamazon/aws-cli コンテナが起動するようにする

    .zshrc に alias を登録するだけ

    alias aws='docker run --rm -i -v ~/.aws:/root/.aws -v $(pwd):/aws --env AWS_PAGER="" amazon/aws-cli'
    

    当然 docker などがインストールされている必要がある。

  • S3 バケットに対して特定IP からのみ接続を許可する

    バケットに接続できる IP を絞りたいことがある。バケットポリシーを記載することで制御可能なので方法を紹介。

    ブロックパブリックアクセス (バケット設定)

    ブロックパブリックアクセスはすべてオフにする

    バケットポリシー

    バケットポリシーの設定は以下の通り

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Deny",
                "Principal": "*",
                "Action": "s3:*",
                "Resource": [
                    "arn:aws:s3:::tsukada-hoge-js",
                    "arn:aws:s3:::tsukada-hoge-js/*"
                ],
                "Condition": {
                    "NotIpAddress": {
                        "aws:SourceIp": [
                            "1.1.1.111/32",
                            "2.2.2.222/32"
                        ]
                    }
                }
            }
        ]
    }

    ポイントとして、

    Resource にバケット自体を宣言するのとは別にバケット配下を /* でワイルドカードで指定する必要があるという点だ。

  • EBS でパフォーマンスをあげるには

    ストライピングする

    EBS はストライピングすることができ、最大で 60,000 MB/s を出すことができる。

    ただし、パフォーマンスはボリュームサイズによって比例するとのこと。

    注意点

    SSD のボリュームに対してバースト機能は存在しない

    参考情報

    https://aws.amazon.com/jp/ebs/faqs/

  • EFS のバーストスループットについてまとめる

    EFS のファイルシステムは

    • バーストスループット
    • プロビジョニングされたスループット

    の 2 つある。それぞれの特徴をまとめる。

    バーストスループット

    EFS のスループットは、ストレージクラスのファイルシステムのサイズが大きくなるにつれて上昇する。

    100G使っているファイルシステムの場合、

    バーストスループットでは 1日あたり 72分間のみ 300M/s の読み込みをできる。

    (通常モードは 15M/s)

    プロビジョニングされたスループット

    保存されたデータ量とは別に、

    ファイルシステムのスループット (MiB/秒) を簡単にプロビジョンされる。

    1日1回動くバッチ処理などのような、瞬間的に使うような使われ方をする場合は、バーストスループットを選ぶとメリットを享受できそうだ。

    参考情報

    https://docs.aws.amazon.com/ja_jp/efs/latest/ug/performance.html

    https://docs.aws.amazon.com/ja_jp/efs/latest/ug/storage-classes.html

  • S3 のバケットを誤って公開した場合の検知方法

    S3 のバケットを誤って公開してしまった時、どのように検知するかをまとめた。

    案は2つ

    1. Lambda を呼び出して、 S3 バケットを保護する CloudWatch Events ルールを設定
    2. S3 のオブジェクトレベルのログを有効にして、 CloudTrail でパブリック読み取りアクセス許可を持つ PutObject API が検出されたとき、 SNS に通知するような CloudWatch イベントを作る。

    この2つの方法は取ることができるが、単純に案1 の s3 から Lambda をトリガーしてチェックを行うのは実装は簡単そう。

    しかし、やろうと思えば案2 の仕組みをつくることもできる。

  • AWS CLI で CloudWatch logs を見る

    CloudWatch logs を確認したいが、AWS コンソール に入らずとも CLI で確認することができる。

    $ aws --profile stg logs get-log-events --log-group-name /ecs/hogehoge --log-stream-name ecs/stream --output text
    
    EVENTS  1628662114657   COPY FROM S3.   1628662110415
    EVENTS  1628662114657   logs ......       1628662111623
    EVENTS  1628662404609   running...................................................................................................................................................................................................................................................................................................      1628662401927
    EVENTS  1628662404609   処理時間:289.469252秒  1628662401927
    

    1行目は EVENTS

    2行目は タイムスタンプ

    3行目にログが記載されている。

    https://docs.aws.amazon.com/cli/latest/reference/logs/get-log-events.html

  • s3 からファイルコピーする際の download: を表示させない

    大量のファイルをコピーしようとすると、標準出力が s3 からdownload しているという標準出力で埋め尽くされる

    % aws s3 cp s3://sumito-hoge/11.change.csv hogehoge
    download: s3://sumito-hoge/11.change.csv to ./hogehoge

    これを表示させないためには --quiet オプションを使う

    % aws s3 cp s3://sumito-hoge/11.change.csv hogehoge --quiet
    
    
    ファイルはきちんとコピーされている
    
    ls -l hogehoge*                                                                                                                        
    -rw-r--r--  1 sumito.tsukada  wheel  5774  8 11 12:40 hogehoge
    

  • 多数のクライアントから EFS を利用する際 性能劣化を回避する

    EFS は

    • 汎用 I/O パフォーマンスモード
    • 最大 I/O パフォーマンスモード

    という2種類のモードがある。

    それぞれ整理する。

    汎用 I/O パフォーマンスモード(General Purpose performance mode)

    EFS のデフォルト値

    レイテンシーが低く、ワークロードがレイテンシーの影響を受けやすい場合に適している。

    Webサーバ含め、一般的なファイルシステムなどレイテンシーに敏感なユースケースに最適。

    最大 I/O パフォーマンスモード(Max I/O performance mode)

    ファイルシステムオペレーションの制限はない。

    多数のクライアントから EFS を利用する際 性能劣化を回避する際はこちらを選ぶ。

    ただし、ファイルのメタデータを操作する際のレイテンシーが若干高くなるというトレードオフがある。

    ユースケースとして、高度に並列化されたアプリケーションやワークロードには、このモードが有効になる。

    参考情報

    https://docs.aws.amazon.com/efs/latest/ug/performance.html

  • S3 で自分の暗号化キーを使ってサーバーサイドエンクリプトをする

    Tips

    自分のキーを持ち込みたい場合、

    SSE-C を使うことで独自の暗号化キーを使うことが可能。

    参考情報

    https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/ServerSideEncryptionCustomerKeys.html

  • DDoS 攻撃への対処

    さまざまな対処法がある。

    Amazon Route 53 による制御

    • シャッフルシャーディング
    • anycast ルーティング

    DDoS 攻撃を受けていても連携してエンドユーザーがアプリケーションにアクセスできるようにする2つの機能がある。 

    AWS Shield AdvancedとAWS WAF

    • DDoS攻撃の緩和
    • レイヤー7での保護

    AWS WAF

    カスタマイズ可能なウェブセキュリティルールを定義することで、ウェブアプリケーションに対するどのトラフィックを許可またはブロックするかを制御できる。

    SQL インジェクションまたはクロスサイトスクリプティングに加え、カスタマイズされたルールを使うことができる

    AWS Shield Advanced

    CloudWatch でのリアルタイムの通知によって、DDoS 攻撃に対する完全な可視性が可能になる。

    AWS Shield Standard

    レイヤー3/レイヤー4攻撃を軽減できるが、詳細なリアルタイム通知や可視化機能が提供していない。