Upgrade to Pro — share decks privately, control downloads, hide ads and more …

boto3からの解放。 python3の標準ライブラリのみでAWSサービスを取り扱うには

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.

boto3からの解放。 python3の標準ライブラリのみでAWSサービスを取り扱うには

Avatar for yoshitaka KOITABASHI

yoshitaka KOITABASHI

February 17, 2023
Tweet

More Decks by yoshitaka KOITABASHI

Other Decks in Technology

Transcript

  1. Who am I ? ⼩板橋 由誉 / Yoshitaka Koitabashi u

    KDDI株式会社 アジャイル開発部 ソフトウェア技術2G 所属チーム u AR/VRなどxR向けの コンテンツ管理システム(CMS)の開発 好きなAWSサービス u AWS App Runner
  2. n Boto3というのは、AWS SDK for Pythonの別称であり、 Pythonを介してAWSを操作するためのライブラリ n Boto3を⼊れるのは、簡単でpipでインストールできる n Boto3の由来ちょっと気になって調べてみたら、アマゾン川に⽣息する

    アマゾンカワイルカにちなんでつけたよう https://github.com/boto/boto3/issues/1023 n ドキュメント: (https://boto3.amazonaws.com/v1/documentation/api/latest/guide/quickstart .html#installation) Boto3 is 何︖
  3. n リクエストのIDの確認 l 署名により、有効なアクセスキーを持っている⼈がリクエストを送信したことを 確認できる n 送信中のデータの保護 l 送信中のリクエストの改ざんを防ぐために、リクエストの要素からハッシュ値を 計算し、得られたハッシュ値をリクエストの⼀部として含めます。

    l AWSがリクエストを受け取ると、同じ情報を使⽤してハッシュを計算し、 リクエストに含まれているハッシュ値と⽐較します。 ハッシュ値が⼀致しない場合、AWSはリクエストを拒否します。 => Canonical Request この時、HTTP Authorization ヘッダーを使⽤します。 n 潜在的なリプレイ攻撃の防⽌ l リクエストに含まれるタイムスタンプの5分以内にAWSに到達する必要がある。 その条件を満たさない場合、AWSはリクエストを拒否します。 セキュリティ確保項⽬
  4. n Canonical Requestでは、次のStepで署名の検証が⾏われる。 l ①: 署名するための⽂字列を決める。 l ②: 署名キーを使⽤して、署名する⽂字列のHMAC-SHA256ハッシュを 計算する。

    l ③: s3は認証されたリクエストを受信すると、署名を計算しリクエストで 指定した署名と⽐較する。 u そのため、s3と同じ⽅法で署名を計算する必要がある => ここで、署名のために合意された形式でリクエストを送信するプロセスは、 正規化と呼ばれます。 ⾔語化すると
  5. n HTTPMethod : GET/PUT/HEAD/DELETE等のHTTPメソッドの1つです。 n CanonicalURI : URIのURIエンコードバージョンです。 ドメイン名に続く「/」で始まり、⽂字列末尾まで、 または疑問符⽂字(

    '︖')までのすべてを指定します。 n CanonicalQueryString : URIエンコーディングされたクエリパラメータを指定します。 n CanonicalHeaders : リクエストヘッダーとその値のリストです。 個々のヘッダー名と値のペアは、改⾏⽂字( "¥ n")で区切られます。 ヘッダー名は⼩⽂字にする必要があります。 また、CanonicalHeadersは下記のものを必ず含めなければなりません。 l HTTPホストヘッダー l Content-Typeヘッダーがリクエストに存在する場合は、追加 l リクエストに含める予定のx-amz-*ヘッダーも追加。たとえば、⼀時的なセキュリティ クレデンシャルを使⽤している場合は、リクエストにx-amz-security-tokenを含める 必要があります。 Canonical Requestの詳細(説明割愛)
  6. n SignedHeaders : アルファベット順にソートされたセミコロンで 区切られた⼩⽂字のリクエストヘッダー名のリストです。 リスト内のリクエス トヘッダーは、CanonicalHeaders⽂字列に含めたものと同じヘッダーです。 n HashedPayload :

    リクエストペイロードのSHA256ハッシュの16進値です。 l ちなみに、GETリクエストを使⽤してオブジェクトを取得する場合、空の⽂字列ハッ シュを計算します。 Canonical Requestの詳細(説明割愛)
  7. CanonicalHeadersだけ説明 CanonicalHeaders : リクエストヘッダーとその値のリスト • また、CanonicalHeadersは下記のものを必ず含めなければなりませ ん。 • HTTPホストヘッダー •

    Content-Typeヘッダーがリクエストに存在する場合は、 追加リクエストに含める予定のx-amz-*ヘッダーも追加。 たとえば、⼀時的なセキュリティクレデンシャルを使⽤している場合 は、リクエストにx-amz-security-tokenを含める必要がある。 ↑Cognitoの認証tokenとかが該当 CanonicalHeadersのサンプル
  8. ②: 署名する⽂字列を作成 • AWS4-HMAC-SHA256: ハッシュアルゴリズムHMAC-SHA256を 使⽤していることを⽰します。 • timeStamp : ISO8601形式の現在のUTC時刻を⼊れます。

    • Scope : 結果の署名を特定の⽇付、AWSリージョン、およびサービス名を 連結したものを⼊れます。 結果の署名は、特定の地域および特定のサービスでのみ機能し、 署名は指定された⽇付から7⽇間有効です。