web-dev-qa-db-ja.com

HTTP Google Cloud Functionsでの認証

https://cloud.google.com/solutions/authentication-in-http-cloud-functions

このドキュメントでは、Google Cloud Storageバケットを設定することを提案しています。次に、サービスアカウントの権限「storage.buckets.get」をバケットに設定します。

次に、この権限を使用して、http Google Cloud Functionsへのアクセスを認証します。

HTTPクラウド機能の認証について話しますが、Google Cloud Storageから許可を借りています。これはハッキングの解決策だと私には思えます。

Google Cloud Consoleを介して各クラウド機能で権限を設定することができれば、それは素晴らしいことです。

上記のドキュメントでGoogleが提案した認証ソリューションを使用していますか?または、より良いアプローチがありますか?

「 "storage.buckets.get"をセットアップするには、サービスアカウントに "ストレージオブジェクトビューアー"権限を付与するということですか?

enter image description here

9
searain

あなたがここに持ってきた link で提案された解決策は確かに方法の1つです。実際、他のGoogle Cloud Platform製品(ストレージバケットだけでなく)を使用して、選択したアカウントのアクセス許可を確認できます。

有効な代替手段は次のとおりです。

  1. 許可されたユーザーのメールがリストされるクラウド機能を準備します。
  2. Cloud Functionは、リクエストを行ったアカウントに対して生成されたトークンを含む着信HTTPリクエストの'Authorization'ヘッダーを取得します。
  3. この関数は、前述のヘッダーを使用して tokeninfoエンドポイント を呼び出し、アカウントの電子メールを(JSON応答本文から)取得します。メールを返すURLは次のようになります。
url = "https://www.googleapis.com/oauth2/v1/tokeninfo?fields=email&access_token
    =" + token_from_the_request_header;
  1. 返されたメールが許可されたメールのリストにあることを確認します。
  2. ...はいの場合、関数のロジックを実行します。
3
arudzinska

Cloud Functionsを使用するには、モジュールをバケットに入れる必要があります。アカウントに「storage.buckets.get」権限をバケットに付与すると、HTTPクラウド機能をトリガーするための許可がサービスアカウントに付与されます。同様に、別のサービスアカウントから「storage.buckets.get」権限を削除して承認を取り消します。

'storage.buckets.get'許可 を設定するには、標準のロールで「Storage Admin」を選択するか、レガシーのロールから「storage.legacyBucketReader」/「storage.legacyBucketWriter」を選択する必要があります- カスタムロールを定義する 'storage.buckets.get'権限。

3
Katayoon