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

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

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

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⽇間有効です。