More Related Content
Similar to Boto3からの解放。python3の標準ライブラリのみでawsサービスを取り扱うには
Similar to Boto3からの解放。python3の標準ライブラリのみでawsサービスを取り扱うには (20)
Boto3からの解放。python3の標準ライブラリのみでawsサービスを取り扱うには
- 2. Who am I ?
小板橋 由誉 / Yoshitaka Koitabashi
KDDI株式会社 アジャイル開発部 ソフトウェア技術2G
所属チーム
AR/VRなどxR向けの
コンテンツ管理システム(CMS)の開発
好きなAWSサービス
AWS App Runner
- 5. Boto3というのは、AWS SDK for Pythonの別称であり、
Pythonを介してAWSを操作するためのライブラリ
Boto3を入れるのは、簡単でpipでインストールできる
Boto3の由来ちょっと気になって調べてみたら、アマゾン川に生息する
アマゾンカワイルカにちなんでつけたよう
https://github.com/boto/boto3/issues/1023
ドキュメント:
(https://boto3.amazonaws.com/v1/documentation/api/latest/guide/quickstart
.html#installation)
Boto3 is 何?
- 12. まず、AWSへのAPIリクエストを行う場合
(AWS SDKや、AWS CLIなどのAWSツールを使わない場合)、
リクエストの署名するためのコードを含める必要があります。
基本的には、この署名を気にすることはありません。
AWS SDK、AWS CLIなどのAWSツールは、
ツール設定時に指定するアクセスキーを使用して
APIリクエストに自動で署名します
S3に対するGet処理
- 15. リクエストのIDの確認
署名により、有効なアクセスキーを持っている人がリクエストを送信したことを
確認できる
送信中のデータの保護
送信中のリクエストの改ざんを防ぐために、リクエストの要素からハッシュ値を
計算し、得られたハッシュ値をリクエストの一部として含めます。
AWSがリクエストを受け取ると、同じ情報を使用してハッシュを計算し、
リクエストに含まれているハッシュ値と比較します。
ハッシュ値が一致しない場合、AWSはリクエストを拒否します。
=> Canonical Request
この時、HTTP Authorization ヘッダーを使用します。
潜在的なリプレイ攻撃の防止
リクエストに含まれるタイムスタンプの5分以内にAWSに到達する必要がある。
その条件を満たさない場合、AWSはリクエストを拒否します。
セキュリティ確保項目
- 20. Canonical Requestでは、次のStepで署名の検証が行われる。
①: 署名するための文字列を決める。
②: 署名キーを使用して、署名する文字列のHMAC-SHA256ハッシュを
計算する。
③: s3は認証されたリクエストを受信すると、署名を計算しリクエストで
指定した署名と比較する。
そのため、s3と同じ方法で署名を計算する必要がある
=> ここで、署名のために合意された形式でリクエストを送信するプロセスは、
正規化と呼ばれます。
言語化すると
- 23. HTTPMethod : GET/PUT/HEAD/DELETE等のHTTPメソッドの1つです。
CanonicalURI : URIのURIエンコードバージョンです。
ドメイン名に続く「/」で始まり、文字列末尾まで、
または疑問符文字( '?')までのすべてを指定します。
CanonicalQueryString : URIエンコーディングされたクエリパラメータを指定します。
CanonicalHeaders : リクエストヘッダーとその値のリストです。
個々のヘッダー名と値のペアは、改行文字( " n")で区切られます。
ヘッダー名は小文字にする必要があります。
また、CanonicalHeadersは下記のものを必ず含めなければなりません。
HTTPホストヘッダー
Content-Typeヘッダーがリクエストに存在する場合は、追加
リクエストに含める予定のx-amz-*ヘッダーも追加。たとえば、一時的なセキュリティ
クレデンシャルを使用している場合は、リクエストにx-amz-security-tokenを含める
必要があります。
Canonical Requestの詳細(説明割愛)
- 24. SignedHeaders : アルファベット順にソートされたセミコロンで
区切られた小文字のリクエストヘッダー名のリストです。 リスト内のリクエス
トヘッダーは、CanonicalHeaders文字列に含めたものと同じヘッダーです。
HashedPayload : リクエストペイロードのSHA256ハッシュの16進値です。
ちなみに、GETリクエストを使用してオブジェクトを取得する場合、空の文字列ハッ
シュを計算します。
Canonical Requestの詳細(説明割愛)
- 25. CanonicalHeadersだけ説明
CanonicalHeaders : リクエストヘッダーとその値のリスト
• また、CanonicalHeadersは下記のものを必ず含めなければなりません。
• HTTPホストヘッダー
• Content-Typeヘッダーがリクエストに存在する場合は、
追加リクエストに含める予定のx-amz-*ヘッダーも追加。
たとえば、一時的なセキュリティクレデンシャルを使用している場合
は、リクエストにx-amz-security-tokenを含める必要がある。
↑Cognitoの認証tokenとかが該当
CanonicalHeadersのサンプル
- 26. ②: 署名する文字列を作成
• AWS4-HMAC-SHA256: ハッシュアルゴリズムHMAC-SHA256を
使用していることを示します。
• timeStamp : ISO8601形式の現在のUTC時刻を入れます。
• Scope : 結果の署名を特定の日付、AWSリージョン、およびサービス名を
連結したものを入れます。
結果の署名は、特定の地域および特定のサービスでのみ機能し、
署名は指定された日付から7日間有効です。