[go: up one dir, main page]

この記事は情報セキュリティ エンジニア、Stephen Röttger、Artur Janc による Google Online Security Blog の記事 "A Spectre proof-of-concept for a Spectre-proof web" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。

3 年前、Spectre によってウェブのセキュリティ境界についての考え方が変わりました。ウェブブラウザはアプリケーション間のデータ漏洩を防げるという保証が最新プロセッサの欠陥によって損なわれたことは、すぐに明らかになりました。その結果、ウェブブラウザ ベンダーが協力し合い、継続的にプラットフォームの堅牢化に取り組んでいます。しかし、この種の攻撃は依然として懸念され続けており、ウェブ デベロッパーがアプリケーション レベルの対策を導入することも求められています。

この投稿では、ウェブユーザーに対する Spectre の悪用に関して、Google セキュリティ チームが行った調査の結果を共有します。また、JavaScript で書かれた高速で柔軟な概念実証(PoC)も提示し、ブラウザのメモリから情報が漏洩することを示します。この概念実証やそのバリアントは、さまざまなオペレーティング システム、プロセッサ アーキテクチャ、ハードウェア世代で動作することを確認しています。

この発見をセキュリティ コミュニティと共有する目的は、ウェブ アプリケーションの所有者に、Spectre による脆弱性がユーザーのデータのセキュリティに与える可能性がある影響について深く理解してもらうためです。さらに、Google 全体の経験に基づき、ウェブ制作者が利用できる対策やウェブ アプリケーションで実現できるベスト プラクティスについても説明します。

簡単な背景

Spectre の脆弱性は、2018 年 1 月に一般に公表されました。プロセッサ(CPU)の設計上の脆弱性の一種を攻撃者が利用して、CPU が後続の命令を投機的に実行する際に、プログラムで意図された制御フローを変えることができます。たとえば、CPU が長さチェックに合格すると推測しても、実際には境界外のメモリにアクセスすることになります。CPU の状態は推測ミスが明らかになるとロールバックされますが、この動作による副作用は管理できるため、攻撃者にデータが漏洩する可能性があります。

2019 年、Chrome の JavaScript エンジンである V8 の担当チームは、ブログ投稿ホワイトペーパーを公開し、ソフトウェア レベルではこのような攻撃に確実に対策することはできないという結論を出しました。この問題に対する確実なソリューションとしては、ウェブブラウザなどのアプリケーションに、プロセスベースの分離のような低レベル プリミティブに合わせたセキュリティ境界が必要になります。

これと並行して、ブラウザのベンダーや標準化団体は、この種の攻撃からウェブユーザーを守るためのセキュリティ メカニズムを開発しました。これには、一部のブラウザ構成で実現できるデフォルトの保護を提供するためのアーキテクチャの変更(Site Isolation(サイト分離)out-of-process iframes = OOPIF(プロセス外 iframe)Cross-Origin Read Blocking = CORB(クロスオリジン読み取りブロック)など)と、ウェブ デベロッパーがアプリケーションに広く適用できるオプトイン セキュリティ機能(Cross-Origin Resource PolicyCross-Origin Opener PolicyCross-Origin Embedder Policy など)の両方が含まれています。

これらのメカニズムは非常に重要ですが、これで Spectre の悪用を防ぐことはできません。むしろ、攻撃者が読み取ることができるメモリに機密データが含まれないようにするための措置です。そのため、この対策の確実性を評価するには、セキュリティ エンジニアがアプリケーションに対する投機的実行攻撃の実際の影響について理解する際に役立つ、セキュリティ ツールを開発することが重要になります。

ウェブブラウザを利用した Spectre のデモ

今日は、実際に Spectre が JavaScript エンジンを侵害することを確認できる概念実証(PoC)コードを共有します。攻撃のデモには Google Chrome を使いますが、これは Chrome に固有の問題ではなく、他のモダンブラウザも同様にこの脆弱性の影響を受けるものと考えられます。攻撃のインタラクティブなデモを開発し、https://leaky.page/ で公開しました。コードと詳しい説明は、こちらの Github をご覧ください。




Intel Skylake CPU で Chrome 88 を実行している場合、デモのウェブサイトでは 1 kB/ 秒のスピードでデータが漏洩する可能性があります。なお、このコードはわずかに変更するだけで他のバージョンの CPU やブラウザにも適用できると考えられます。ただし、Google のテストでは、大きな変更を加えなくても、この攻撃を Apple M1 ARM CPU などの他のいくつかのプロセッサで成功させることができました。

実験にあたり、異なる特性を持つ他の PoC も作成しました。いくつかの例を示します。
  • performance.now() を 5 マイクロ秒の精度のタイマーとして使うことで、安定性と引き替えに 8 kB/ 秒でデータを漏洩する PoC
  • 1 ミリ秒またはそれより粗い精度のタイマーを使うことで、60 B/ 秒でデータを漏洩する PoC

現在の PoC を公開することにしたのは、セットアップ時間が無視できる程度であり、SharedArrayBuffer のような高精度なタイマーがなくても動作するからです。

PoC の主な構成要素は、以下のとおりです。
  1. Spectre ガジェット : 攻撃者が制御する一時的実行を呼び出すコード
  2. サイドチャネル : 一時的実行の副作用を管理する方法

1. ガジェット公開した PoC では、単純なバリアント 1 のガジェットを実装しました。コンパイラが挿入した長さチェックが成功することを予測する分岐予測のトレーニング後に、JavaScript 配列の境界外への投機的なアクセスが発生します。このガジェットではソフトウェア レベルの対策を取れますが、Chrome の V8 チームは、他のガジェットではそうはいかないと結論づけています。「一部の Spectre のバリアント、とりわけバリアント 4 に対しては、ソフトウェアで効果的に対策するのは不可能であるとわかりました」と述べています。

セキュリティ コミュニティの皆さんには、さらに調査をし、他の Spectre ガジェットを利用したコードを作成することをお勧めします。

2. サイドチャネル
投機的実行によって秘密データが漏洩する場合、キャッシュ サイドチャネルが使われるのが一般的です。メモリ内の特定の場所がキャッシュに存在するかどうかを管理すると、投機的実行によるメモリへのアクセスがあったかどうかを推測できます。JavaScript で難しいのは、キャッシュ アクセスとメモリ アクセスを判別できるほどの高精度タイマーを見つけることです。モダンブラウザは、タイミング攻撃を防ぐため、クロスオリジン分離が行われていない状況で performance.now() API のタイマーの精度を粗くし、SharedArrayBuffer を利用できないようにしています。

V8 チームは、2018 年時点ですでに、タイマーの精度を粗くすることは Spectre の対策としては不十分であると報告しています。攻撃者はタイミングの差を自由に増幅できるからです。ただし、そこで述べられている増幅テクニックは、秘密データを複数回読み取る方法に基づいているので、情報の漏洩が確率的なものである場合は、攻撃の効率を低下することができます。

今回の PoC では、新たなテクニックを使ってこの制限を回避しました。最近の CPU でよく使われる Tree-PLRU キャッシュ エビクション戦略の動作を悪用すれば、秘密データを 1 回読み取ることで、キャッシュのタイミングを大きく増幅することができます。これにより、低精度タイマーでも、効率よくデータを漏洩することができました。このテクニックの詳細については、https://leaky.page/plru.html のデモをご覧ください。

この PoC は、大きく改変しない限り、悪用目的で再利用できるとは考えられません。しかし、Spectre のリスクを示す上では、説得力のあるデモとなります。特に、このリスクを考慮してセキュリティ評価をする必要があるウェブ アプリケーション デベロッパーにとっての明らかなシグナルとなり、サイトを保護する積極的なアクションにつながることを期待しています。

ウェブにおける Spectre 対策の導入投機的実行による脆弱性は本質的に低レベルで発生するため、適切なパッチにはユーザーのデバイスのファームウェアやハードウェアの変更が必要になる場合があり、包括的な修正は難しくなります。オペレーティング システムやウェブブラウザのデベロッパーは、可能な限り重要な組み込みの保護機能を実装しています(Google Chrome の out-of-process iframes(プロセス外 iframe) や Cross-Origin Read Blocking(クロスオリジン読み込みブロック)による Site Isolation(サイト分離)、Firefox の Project Fission など)。しかし、既存の API 設計では、データが意図せずに攻撃者のプロセスに流れ込む可能性が残ります。

ウェブ デベロッパーは、この点を考慮してサイトをさらに確実に分離することを検討する必要があります。そのためには、新しいセキュリティ メカニズムを使い、攻撃者によるクロスオリジン リソースへのアクセスを積極的に防ぎます。このような保護は、Spectre スタイルのハードウェア攻撃や一般的なウェブレベルのクロスサイト漏洩の対策となりますが、デベロッパーはそういった脆弱性によるアプリケーションへの脅威を評価し、その対策のデプロイ方法を理解する必要があります。Chrome のウェブ プラットフォーム セキュリティ チームは、この評価に役立ててもらうため、デベロッパー向けの具体的なアドバイスを含む Spectre 後のウェブ開発サイドチャネル攻撃への対策を公開しました。このガイドに従って以下の保護をすることを強くお勧めします。
  • Cross-Origin Resource Policy(CORP)と Fetch メタデータ リクエスト ヘッダーを使うと、イメージやスクリプトなどのリソースを埋め込むことができるサイトを制御して、攻撃者が制御するブラウザのレンダリング プロセスにデータが渡るのを防げます。詳しくは、resourcepolicy.fyi と web.dev/fetch-metadata をご覧ください。
  • Cross-Origin Opener Policy(COOP)を使うと、アプリケーション ウィンドウで他のウェブサイトからの予期しないインタラクションの受け取りを拒否できます。これにより、ブラウザはプロセス内でウィンドウを分離できるようになります。これは重要なプロセスレベルの保護を追加することになり、完全なサイト分離を有効化できないブラウザで特に重要になります。詳しくは、web.dev/coop-coep をご覧ください。
  • Cross-Origin Embedder Policy(COEP)を使うと、アプリケーションがリクエストした認証済みリソースの読み込みを明示的にオプトインできます。 現在、Chrome や Firefox の機密性が高いアプリケーションでプロセスレベルの分離を保証するには、COEP と COOP の両方を有効化する必要があります。詳しくは、web.dev/coop-coep をご覧ください。
アプリケーションでは、これらの分離メカニズムに加えて、X-Frame-Options ヘッダーや X-Content-Type-Options ヘッダーなどの標準の保護も有効化し、SameSite Cookie を使うようにしてください。多くの Google 製アプリケーションでは、このようなメカニズムをすでに導入しているか、現在導入の過程にあります。このようなメカニズムは、デフォルトのブラウザ保護が十分でない場合に、投機的実行のバグに対する保護となります。

覚えておくべき重要な点は、この記事で説明したすべてのメカニズムは重要で強力なセキュリティ プリミティブですが、Spectre に対する完全な保護を保証するものではないことです。また、アプリケーションに固有の動作を考慮したデプロイ方法の検討も必要です。セキュリティ関連のエンジニアや研究者の皆さんには、この Spectre の概念実証の利用と貢献をお願いいたします。サイトのセキュリティ状況の確認や改善に役立てていただきたいと考えています。

ヒント : ウェブサイトを Spectre から守るために役立てていただけるよう、Google セキュリティ チームは Spectroscope を作成しました。これは Chrome 拡張機能のプロトタイプで、アプリケーションをスキャンして、さらなる防御が必要になる可能性があるリソースを見つけます。ウェブ分離機能の導入と合わせてご検討ください。

Reviewed by Eiji Kitamura - Developer Relations Team

この記事は(Chrome ウェブ プラットフォーム セキュリティ チームを代表して)Mike West による Chromium Blog の記事 "Mitigating Side-Channel Attacks" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。

ウェブ プラットフォームは、セキュリティの土台となる境界線としてオリジンに依存しています。また、ブラウザは、あるオリジンから別のオリジンへの明示的なデータの漏洩をうまく防いでいます。しかし、Spectre のような攻撃から、明示的でないデータ漏洩への対策が必要になることがわかります。このような攻撃では、サイドチャネルが悪用され、攻撃者のコードを実行するプロセスに入ったあらゆるデータが攻撃者に読み取られることが実証されています。現在、こういった攻撃の実現性はかなり高く、ユーザーにとってのリスクは現実のものとなっています。

機密データが意図せずに攻撃者のプロセスに入り込まないようにしなくてはなりません。ブラウザは、この責任の大部分を背負っています。Chromium の Site Isolation(サイト分離)は、アクセスしたサイトを OS レベルで専用のプロセスに隔離します。Cross-Origin Read Blocking = CORB(クロスオリジン読み込みブロック)は、そのままでは保護されないクロスオリジンリソースの一部が攻撃者に読み込まれることを防ぎます。攻撃者の帯域幅を大幅に増やす API(SharedArrayBuffer など)は、クロスオリジン分離コンテキストにロックされます。しかし、この最後のメカニズムは、ブラウザが単独では行えない作業を指しています。

ウェブ デベロッパーはアプリケーションを熟知しており、各ページやリソースの漏洩によるリスクを情報に基づいて判断できます。ユーザーのデータが漏洩することを防ぐため、ウェブ デベロッパーはホストしているリソースを評価し、適切にリソースを分離するようブラウザに指示するという対策をとる必要があります。概念レベルでは、この対策は次の要素で構成されます。

  1. 受信したヘッダーを調べ、一方で Origin ヘッダー、もう一方で Sec-Fetch- で始まる各ヘッダーに注目し、リクエストに応答するべきかどうかを判断します
  2. 攻撃者がリソースをサブリソースとして読み込む機能を制限します。これをするには、Cross-Origin Resource Policy として same-origin を設定します(必要な場合のみ、same-site または cross-origin にします)。
  3. 攻撃者がリソースをドキュメントとしてフレームに含めることができるかを制限します。これをするには、X-Frame-Options: SAMEORIGIN を使ってフレーム化保護にオプトインするか、さらに細かい制御が可能な CSP の frame-ancestors ディレクティブを使います。たとえば、frame-ancestors 'self' https://trusted.embedder とします。
  4. 攻撃者がアプリケーションのウィンドウを参照する機能を制限します。これをするには、Cross-Origin Opener Policy を設定します。制限が強い same-origin 値をデフォルトとし、必要な場合のみ same-origin-allow-popups または unsafe-none にするのが最適です。
  5. MIME-type confusion 攻撃を防ぎCross-Origin Read Blocking(クロスオリジン読み込みブロック)などの消極的防御の確実性を高めます。これをするには、正しい Content-Type ヘッダーを設定し、X-Content-Type-Options: nosniff となっていることをグローバルで確認します。

以上のさまざまな防御策を合わせれば、サイト分離が利用できるかどうかにかかわらず、すべてのブラウザでユーザーのデータに対してある程度の保護をプロセスレベルで提供できます。

これらの防御策の適用に関する詳しい情報は、Spectre 後のウェブ開発をご覧ください。以上で説明したセキュリティ プリミティブがどのようにサイト上のリソースに適用されるかについて、詳しく説明する実例も含まれています。

ここで示したのは、明示的でないデータ漏洩からオリジンを守るために、すぐにでも実施できる有用な手順です。今後は、ウェブの各種デフォルトを安全なものに移行し、デベロッパーが何もしなくてもこういった攻撃からユーザーを守れるようにしたいと考えています。


Reviewed by Eiji Kitamura - Developer Relations Team



はじめてみよう Google Cloud ハンズオン セミナー 機械学習編 をオンラインにて開催いたします。

機械学習の実運用基盤の構築では「MLOps」と呼ばれる機械学習に固有のさまざまな課題が生じます。このハンズオンでは、AI Platform Pipelines の使い方を解説し、AI Platform における MLOps 環境の構築方法を紹介します。

このハンズオンでは Google Cloud のカスタマー エンジニアの解説を聞きながらハンズオンを進めるだけでなく、不明点をチャットツールを通じて質問することができます。

Google Cloud プロダクトに興味のある方、知識を増やしたい方はぜひご参加ください。

参加登録受付中:http://goo.gle/gcblog_homlops



————————————————————開催概要
名 称 はじめてみよう Google Cloud ハンズオン セミナー 機械学習編
日 程 2021 年 4 月 9 日(金)
対 象 Google Cloud Platform を利用したことがあり、機械学習や、
                その環境の構築に興味のあるエンジニア
参加費 無料(事前登録制)
登 録 http://goo.gle/gcblog_homlops

————————————————————




Google Cloud は、ビジネス課題を解決できる最新のヒントをご提供する、デジタル カンファレンス Google Cloud Day: Digital を 2 週にわたって開催します。

本カンファレンスは、全ての業界で活躍する開発者、ビジネスの意思決定者やリーダーなど幅広い立場の方々を対象にしており、Google Cloud の最新のソリューションやサービスの情報をお届けします。

1 週目となる 5 月 25 〜 27 日は、基調講演やブレイクアウト セッションに集中して、様々なビジネスヒントを知ることができます。2 週目となる 6 月 1 〜 3 日には、前週に学んだことを活かして、実践的なハンズオンに取り組みましょう。このインプットとアウトプットを通して、より深く Google Cloud を体験できる、またとない機会です。

多岐にわたるソリューションを様々なコンテンツを通してご体験いただき、 皆様のビジネスをより良くしていくための、実践的ヒントが見つかる場となれば幸いです。

登録はこちらからお申し込みください。



開催概要

日程:

2021 年 5 月 25 日 (火) - 27 日 (木):基調講演、ブレイクアウトセッション

2021 年 6 月 01 日 (火) - 03 日 (木):ハンズオンセッション


対象:開発者、ビジネスの意思決定者やリーダー


ハッシュタグ:#GoogleCloudDay


————————————————————
お問い合わせ先:Google Cloud Day: Digital 事務局
google-cloudday-tokyo-office@google.com
————————————————————




この記事は David Wihl による Google Ads Developer Blog の記事 "Changes to phrase match and broad match modifier" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。

 2021 年 2 月 4 日に、フレーズ一致と絞り込み部分一致の変更予定についてお知らせしました。キーワード ポートフォリオを簡素化し、広告主が関連性の高いユーザー検索に到達できるように、絞り込み部分一致(BMM)の動作にフレーズ一致を組み込み、BMM のサポートを段階的に廃止します。この変更は徐々にロールアウトされ、キーワードのマッチタイプのバックエンド処理が変更されます(AdWords APIGoogle Ads APIGoogle 広告スクリプト)。これによってキーワードがシンプルになり、関連顧客層に到達しやすくなります。

アップデート後のフレーズ一致は、両方のマッチタイプの優れた部分、すなわちフレーズ一致の制御と絞り込み部分一致の到達範囲の広さを組み合わせたものになります。フレーズと BMM のキーワードはどちらも動作し続け、2021 年 2 月 18 日より、最初の言語群(英語、ドイツ語、スペイン語、フランス語、イタリア語、オランダ語、ポルトガル語、ロシア語)のキーワードでフレーズまたは BMM 表記を使った場合に、アップデート後のフレーズ一致動作が適用されるようになります。第 2 四半期には他のすべての Google 広告の言語で同じ処理が始まり、2021 年 7 月には完了する見込みです。

2021 年 7 月にアップデート後のフレーズ一致動作がすべての言語に適用されると、広告主は新しい BMM キーワードを作成できなくなります(ただし、古い BMM キーワードは動作し続けます)。

除外キーワードのマッチタイプは、フレーズ一致と BMM の変更による影響を受けません。


この変更によって、AdWords API、Google Ads API、Google 広告スクリプトにはどのような影響を受けますか? 2021 年 7 月以降は、新しい BMM キーワード(matchType が BROAD とトークンが + で始まるキーワード テキスト)を作成できなくなります。このマイルストーンが近づきましたら、改めてお知らせする予定です。


広告主はどのような影響を想定すべきですか? 影響は、それぞれの広告主のフレーズや BMM の利用状況、クエリのカバレッジの包括性の程度によって異なります。
  • 主にフレーズ一致を使っている広告主は、クリックやコンバージョンが徐々に増えることが想定されます。
    • これらのキーワードについてのクエリが追加され、それに対するマッチングが有効になるためです。たとえば、フレーズ キーワードが「ザンビアの観光」である場合、それまでは BMM のみで有効だった「ザンビアの観光スポット」が一致するようになります。
  • 主に BMM を使っている広告主は、クリックやコンバージョンがわずかに減ることが想定されます。
    • 減少の大半は、BMM でキーワードの一部にのみ部分一致が適用される場合です。例 : テニス + シューズ
    • また、キーワードの意味にとって語順が重要になる場合は、語順も考慮されるようになります。そのため、これまで BMM に一致していたものが除外される場合もあります。

対応が必要な事項は何ですか?

広告主のトラフィックが変動する可能性があります。これまで、あるマッチタイプでキーワードに一致していたユーザークエリが、フレーズまたは古い BMM のキーワードに一致する可能性があります。そのため、さまざまなキーワードでボリュームが変動します。広告主にとっては、アカウントを管理し、追加のボリュームに対応する必要がある場合は予算を調整することが重要になります。その他のベスト プラクティスは、お知らせに記載されています。

ご質問やさらにサポートが必要なことがありましたら、フォーラムからご連絡ください。


この記事は Adam Ohren による Google Ads Developer Blog の記事 "Sunsetting Portofolio Enhanced CPC Bid Strategies" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。

 2021 年 3 月 22 日より、ポートフォリオ(共有)拡張クリック単価(ECPC)入札戦略の提供を終了します。AdWords API と Google Ads API のすべてのバージョンで、以下の動作がブロックされます。
  • 新しいポートフォリオ ECPC 戦略の作成
  • ポートフォリオ ECPC 戦略のキャンペーンへのアタッチ
なお、標準(ポートフォリオでない)ECPC 戦略は影響を受けません。

影響を受けるポートフォリオ拡張クリック単価戦略
Google Ads API Bidding_strategy.type = BiddingStrategyType.ENHANCED_CPC
AdWords API SharedBiddingStrategy.type = MANUAL_CPC,

SharedBiddingStrategy.biddingScheme.enhancedCpcEnabled = TRUE


変更点の説明
新しいポートフォリオ ECPC 戦略の作成、ポートフォリオ ECPC 戦略のキャンペーンへのアタッチに関するすべての操作で、次のいずれかのエラーが発生します。

作成時のエラー アタッチ時のエラー
Google Ads API BIDDING_STRATEGY_NOT_SUPPORTED CANNOT_ATTACH_BIDDING_STRATEGY_TO_CAMPAIGN
AdWords API BIDDING_STRATEGY_NOT_SUPPORTED CANNOT_ATTACH_BIDDING_STRATEGY_TO_CAMPAIGN


移行の説明
標準 ECPC を優先するため、将来的にポートフォリオ ECPC 戦略は完全に削除する予定です。この変更に備えて、あらかじめすべてのポートフォリオ ECPC 戦略を標準 ECPC 戦略に移行しておくことができます。以下の手順をご覧ください。

残されたポートフォリオ ECPC キャンペーンと戦略は、後ほどすべて自動的に移行されます。移行の前には、このブログで最新情報を投稿します。

Google Ads API を使って自分で移行する場合
CampaignService.MutateCampaigns() を使い、manual_cpc.enhanced_cpc_enabled フィールドを true に設定してキャンペーンを更新します。リクエストには、忘れずに update_mask を設定してマッチングをしてください。
operations: [
  {
    update: {
      resource_mame: customers/CUSTOMER_ID/campaigns/CAMPAIGN_ID,
      manual_cpc: {
        enhanced_cpc_enabled: true
      }
    },
    update_mask: manual_cpc.enhanced_cpc_enabled
  }
]
AdWords API を使って自分で移行する場合
CampaignService.mutate() を使い、biddingStrategyTypeMANUAL_CPCbiddingScheme.enhancedCpc フィールドを true に設定してキャンペーンを更新します。
<operations>
  <operator>SET</operator>
  <operand>
    <id>CAMPAIGN_ID</id>
    <biddingStrategyConfiguration>
      <biddingStrategyType>MANUAL_CPC</biddingStrategyType>
      <biddingScheme>
        <enhancedCpcEnabled>true</enhancedCpcEnabled>
      </biddingScheme>
    </biddingStrategyConfiguration>
  </operand>
</operations>
ご質問やさらにサポートが必要なことがありましたら、フォーラムまたは googleadsapi-support@google.com にご連絡ください。

Reviewed by Thanet Knack Praneenararat - Ads Developer Relations Team

この記事は Android チーム、ソフトウェア エンジニア、Arvind Kumar Sugumar による Google Online Security Blog の記事 "New Password Checkup Feature Coming to Android" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。

デジタル サービスが生活に身近になるにつれて、オンライン情報の安全を保つことの重要性も今までになく増しています。通常、パスワードはハッカーに対する防衛の第一線ですが、パスワードの漏洩につながりかねない情報流出の多さを考えれば、ユーザーは認証情報の保護に注意しなければならないことは明らかです。

これを簡単に行えるようにするため、2019 年に Password Checkup 機能を Chrome に導入し、Chrome に保存しているパスワードが漏洩した場合、通知が届くようになりました。今回、Google 自動入力を通してこの機能を Android アプリにも提供します。アプリで認証情報を自動入力したり保存したりすると、Chrome は侵害されたことがわかっている認証情報のリストと突き合わせて、そのパスワードが侵害されていた場合は、警告を表示します。そのプロンプトから Password Manager ページを開くこともできるので、そこで保存されているパスワードをすべてまとめて見直すこともできます。Android アプリでの Password Checkup は、Android 9 以降で Google 自動入力を使っているユーザーが利用できます。

Android デバイスで Autofill with Google を有効にする方法は次のとおりです

  1. スマートフォンの [ 設定 ] アプリを開く
  2. [ システム ] > [ 言語と入力 ] > [ 詳細設定 ] をタップする
  3. [ 自動入力サービス ] をタップする
  4. [ Google 自動入力サービス ] をタップして設定を有効化する

項目が見つからない場合は、こちらのページをご覧ください。デバイス メーカーから詳しい情報を得る方法が記載されています。

動作の仕組み

Google はユーザーのプライバシーを最優先に考えていますが、パスワードなどの機密データを扱う機能では特にそれを重視しています。Google 自動入力は Android の自動入力フレームワークがベースになっています。このフレームワークは、厳格かつ不変なプライバシーとセキュリティを遵守し、次の 2 つの場合にのみユーザーの認証情報にアクセスすることを保証します。1)ユーザーが Google アカウントに認証情報をすでに保存している場合。2)Android OS がユーザーに新しい認証情報を保存することを提案し、ユーザーがアカウントに認証情報を保存した場合。

ユーザーが認証情報を操作したとき(フォームに認証情報を入力する、または初めて保存するとき)、Chrome で使われているものと同じプライバシー保護 API を使い、Google が追跡している既知の侵害されたパスワードのリストにその認証情報が含まれていないかを確認します。

この実装では、以下の点が保証されています。

  • デバイスの外部に送信されるのは、暗号化された認証情報のハッシュのみ(データベースのパーティション化のため、ハッシュ化したユーザー名の最初の 3.25 バイトは暗号化せずに送信される)。
  • サーバーは、同じプレフィックスを持つ、侵害されたことがわかっている認証情報のリストを暗号化したハッシュとして返す。
  • 認証情報が実際に侵害されたものであるかどうかを判断する処理がユーザーのデバイス上で実行される。
  • サーバー(Google)は、暗号化されていないユーザーのパスワードのハッシュにはアクセスしない。クライアント(ユーザー)は、侵害された可能性がある認証情報の暗号化されていないハッシュのリストにはアクセスしない。

この API の内部処理の詳細については、Chrome チームによるこちらのブログをご覧ください。

その他のセキュリティ機能

Google 自動入力は、Password Checkup の他にも、データの保護に役立つ機能を提供します。

  • パスワード生成 : あまりに多くの認証情報を管理しなければならない場合、ユーザーは同じパスワードを複数のアカウントに流用しがちです。パスワード生成機能を使えば、Chrome が一意で安全なパスワードを生成し、Google アカウントへの保存まで行ってくれます。そのため、パスワードを覚える必要すらなくなります。Android アプリでは、パスワード フィールドを長押ししてポップアップ メニューから [ 自動入力 ] を選ぶことで、パスワード生成をリクエストできます。
  • 生体認証 : 認証情報や支払い情報を自動入力する際に生体認証を要求すると、デバイスの保護をさらに強化できます。生体認証は Google 自動入力設定から有効化できます。

いつものように、プロダクト全般のセキュリティ向上に関する最新情報をお届けする Google Security ブログにご注目ください。


Reviewed by Eiji Kitamura - Developer Relations Team

この記事は  Pierrick Voulet による Google Ads Developer Blog の記事 "The Invoice Service of Google Ads API is out of beta" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。

 Google Ads API の v6 より、すべての API ユーザーで InvoiceService が利用可能になります。これより前の API バージョンでは、引き続き、許可されたアカウントのみを対象にこのサービスをサポートします。

このサービスを利用すると、Google 広告アカウントの月ごとの請求書を取得できます。返される各 Invoice には、データ(調整、管理コスト、税金、アカウント予算など)が含まれており、PDF ファイルとしてダウンロードできます。Google 広告管理者アカウントは、このデータを利用して顧客の請求書を自動処理できます。使ってみたい方は、専用のガイドをご覧ください。

ご質問やさらにサポートが必要なことがありましたら、フォーラムまたは googleadsapi-support@google.com にご連絡ください。

Reviewed by Thanet Knack Praneenararat - Ads Developer Relations Team

この記事はテクニカル プログラム マネージャー、Lutz Vahl による Chromium Blog の記事 "Heads Up: Restriction on SharedArrayBuffers are coming in M91" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。

Chrome 91(2021 年 5 月)より、すべてのプラットフォームで、SharedArrayBufferperformance.measureUserAgentSpecificMemory() などの API にアクセスする際にクロスオリジン分離が必須になります。Android では Chrome 88 からこの制限が適用されていますが、この対応により、デスクトップにも同じ制限が適用されます。

今後もこれらの API を使用する場合は、ページで以下のヘッダーを送信し、確実にページがクロスオリジン分離されるようにしてください。

Cross-Origin-Embedder-Policy: require-corp
Cross-Origin-Opener-Policy: same-origin

なお、これをすると、Cross-Origin-Resource-Policy ヘッダーか CORS ヘッダー(Access-Control-Allow-* など)で明示的にリソースを許可しない限り、そのページでクロスオリジンのコンテンツを読み込めなくなりますので、ご注意ください。

対応手順の詳細やその他の考慮事項については、web.dev のクロスオリジン分離有効化ガイドをご覧ください。


Reviewed by Eiji Kitamura - Developer Relations Team

この記事は Josh Radcliff による Google Ads Developer Blog の記事 "Announcing v6.1 of the Google Ads API" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。

今日は、Google Ads API の v6.1 リリースをお知らせします。v6.1 の一部の機能を使うには、クライアント ライブラリとクライアントのコードをアップグレードする必要があります。更新版のクライアント ライブラリとコードサンプルは、来週公開されます。このバージョンには、互換性のない変更はありません。

主な機能は以下のとおりです。 さらに詳しく知りたい方へ
以下のリソースが役立ちます。 ご質問やさらにサポートが必要なことがありましたら、フォーラムからご連絡ください。

Reviewed by Thanet Knack Praneenararat - Ads Developer Relations Team



Firebase を活用しているマッチングアプリ「タップル」の事例が、昨年公開した Android Developers サイトに加え、今日、新たに Firebase の Web サイトに掲載されました。

タップルは 2018 年にリリースした新しい定期購入プラン「プレミアム プラン」とランディング ページを最適化するため、Firebase の複数のソリューションを活用して 7 日間の A/B テストをしました。

Firebase Remote Config を使用することで、アプリの新バージョンをリリースすることなく、定期購入のプロンプトを動的に制御・変更することができ、Firebase A/B Testing では、最もパフォーマンスが良い有料会員サービスの推奨タイミングを把握。また、Firebase Crashlytics を使用してアプリの安定性を管理し、テスト中に何か問題が発生した場合には Remote Config を使用して迅速かつ簡単に機能をロールバックすることができました。

Firebase には、アプリの開発や最適化に役立つさまざまな機能が含まれています。公開済みのアプリでも、タップルのようにサービスを止めずに A/B テストを実施してその結果を評価できます。まだ Firebase をお使いになったことがない方は、ぜひこちらからお試しください。


Posted by Taro Sotome - Japan Apps Business Development and Tamao Imura - Developer Marketing Manager, Platforms and Ecosystems

この記事は Chromium Blog の記事 "Chrome 89 Beta: Advanced Hardware Interactions, Web Sharing on Desktop, and More" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。


特に記載のない限り、下記の変更は Android、Chrome OS、Linux、macOS、Windows 向けの最新の Chrome ベータ版チャンネル リリースに適用されます。ここに記載されている機能の詳細については、リンクまたは ChromeStatus.com の一覧でご確認ください。(2021 年 1 月 28 日に Chrome 89 がベータ版としてリリースされた時点の情報です)


WebHID API

ヒューマン インターフェース デバイス(HID)には、新しすぎる、古すぎる、あまりにも一般的でないなどの理由で、システムのデバイス ドライバからアクセスできないロングテールなものがあります。WebHID API は、デバイス固有のロジックを JavaScript で実装する方法を提供することで、この問題を解決します。

ヒューマン インターフェース デバイスは、人間からの入力を受け取ったり、人間に対して出力を提供したりします。デバイスには、キーボード、ポインティング デバイス(マウス、タッチスクリーンなど)、ゲームパッドなどがあります。

たとえば、ゲームパッドのサポートにおいては、一般的でない HID デバイスにアクセスできないのは特に苦痛です。ゲームパッドの入出力はうまく標準化されておらず、多くの場合、ウェブブラウザに特定のデバイス向けのカスタム ロジックが必要となります。これはサステナブルでなく、古いデバイスや一般的でないデバイスといったロングテールがサポートされないことになります。

WebHID のオリジン トライアルは終了し、PC 向けの Chrome 89 でデフォルトで有効になります。使用方法については、一般的でない HID デバイスに接続するで確認できます。ウェブのヒューマン インターフェース デバイス : いくつかの簡単な例のデモもご覧ください。

Web NFC

NFC とは少量のデータを転送する近距離無線通信のことで、通常は専用の NFC デバイスとリーダー間の通信に使用します。建物に入るためにバッジをスキャンしたことがある方なら、NFC を使っているかもしれません。

Web NFC を利用すると、ウェブアプリから NFC タグの読み書きができます。これにより、博物館で展示情報を提供する、在庫を管理する、カンファレンスのバッジに情報を登録するなど、ウェブでさまざまな新しいユースケースを実現できるようになります。Web NFC は、Android 版の Chrome 89 でデフォルトで有効になります。

Chrome Dev Summit での Web NFC カードのデモ

NFC の読み書きは簡単なオペレーションで行うことができます。ペイロードの構築や解釈にいくつかの命令が必要になりますが、複雑ではありません。うれしいことに、ウェブで NFC デバイスと連携するという記事もありますので、ぜひご覧ください。実際に試してみることができるいくつかのサンプルもあります。次のようなイメージです。

NFC タグに文字列を書き込む :

if ("NDEFReader" in window) {
  const ndef = new NDEFReader();
  await ndef.write("Hello world!");
}

NFC タグのメッセージをスキャンする :

if ("NDEFReader" in window) {
  const ndef = new NDEFReader();
  await ndef.scan();
  ndef. message }) => {
    console.log(`Records read from a NFC tag: ${message.records.length}`);
  };
}

Web Serial API

シリアルポートは、データをバイト単位で送受信できる双方向通信インターフェースです。Web Serial API は、この機能をウェブサイトで実現し、マイクロコントローラや 3D プリンタなどのデバイスを制御できるようにします。

教育、趣味、工業の分野では、すでにウェブページから周辺機器を制御しています。その場合、デバイスの制御にはアダプターやドライバのインストールが必要です。Web Serial API は、ウェブサイトと周辺機器の直接通信を可能にすることで、ユーザー エクスペリエンスを改善します。

Web Serial API のオリジン トライアルが終了し、PC で有効になります。GitHub でデモが公開されています。使用方法については、シリアルポートの読み書きを行うをご覧ください。

PC でのウェブ共有

デベロッパーは、ユーザーがソーシャル ネットワークで簡単にコンテンツを共有できるようにするため、各ソーシャル サービス用の共有ボタンを手動でサイトに組み込んでいます。このため、ユーザーが実際に使っているサービスで共有できないことが多く、ページサイズの肥大化やサードパーティ製コードによるセキュリティ リスクも発生しています。受信側では、共有ターゲットとして登録して他のアプリからの共有を受け取ることができるのは、プラットフォームのアプリのみです。

Android 版の Chrome では、Chrome 61 から 75 の間でこれらの機能の追加を始めました。Chrome 89 では、ウェブ共有が Windows と ChromeOS でも利用できるようになります。ただし、共有ターゲットとしての登録は ChromeOS のみでサポートされます。これらのプラットフォームでは、PC のサイトで navigator.share() を使うと、共有ダイアログ ボックスを開くことができます。また、ウェブアプリ マニフェストのエントリを追加すると、PWA を共有ターゲットにすることができます。

ウェブ共有についての情報は、Web Share API で OS の共有 UI を組み込むをご覧ください。PWA を共有ターゲットにすることについての詳しい情報は、Web Share Target API で共有データを受け取るをご覧ください。

オリジン トライアル

このバージョンの Chrome には、新しいオリジン トライアルはありません。現在のオリジン トライアルに登録するには、オリジン トライアル ダッシュボードをご覧ください。オリジン トライアル自体の詳細については、ウェブ デベロッパーのためのオリジン トライアル ガイドをご覧ください。

今回のリリースに追加されたその他の機能

AVIF 画像のデコード

Chrome が AVIF コンテンツのデコードをネイティブにサポートします。Android と WebView は既存の AV1 デコーダを利用します(PC 版でのサポートは、Chrome 85 で追加されました)。AVIF は次世代の画像フォーマットで、Alliance for Open Media が標準化しています。AVIF のサポートには、主に 3 つの目的があります。

  • ページ読み込みを高速化して全般的なデータ消費量を削減するため、使用する帯域幅を減らします。AVIF を使うと、JPEG や WebP に比べて画像のファイルサイズを大幅に削減できます。
  • HDR カラーをサポートします。AVIF は、ウェブでの HDR 画像のサポートに向けた一歩です。JPEG の色深度は、実質的に 8 ビットに限られています。輝度、色ビット深度、色域の面でディスプレイの機能が強化されていることから、JPEG では失われる画像データを保存したいと考えるウェブ関係者が増えています。
  • エコシステムの関心に対応します。ウェブにおいて大きな存在感を持つ企業が、ウェブに AVIF 画像を掲載することに興味を示しています。

Cross-Origin Opener Policy Reporting API

新しい Reporting API は、Cross-Origin Opener Policy (COOP) のデプロイに役立ちます。この API は、COOP が強制される際の違反の報告に加え、COOP の報告のみのモードも提供します。COOP の報告のみのモードは COOP を強制しませんが、COOP を強制していれば発生していた潜在的な違反を報告します。デベロッパーは、Chrome DevTools で Reporting API が有効になっているかを確認できます。

ウェブアプリ マニフェストでの display のオーバーライド

ウェブアプリ マニフェストに display_override フィールドが新しく追加されます。これにより、デベロッパーが display フィールドのフォールバック チェーンを明示的に指定できるようになります。次の例では、"minimal-ui""standalone" にフォールバックする指定をしています。

{
  "display": "standalone",
  "display_override": ["minimal-ui"],
}

この API は、高度なユースケースと表示モードを想定したもので、機能は限られています。詳しくは、Chrome Status のエントリをご覧ください。

ReadableStreamDefaultController インターフェースの公開

Chrome は、他の ReadableStream 関連のクラスと同じように、グローバル オブジェクトで ReadableStreamDefaultController インターフェースを公開します。これにより、インスタンスをストリームのコンストラクタの内部で作成しなければならないという、これまでの制限がなくなります。

performance.measureUserAgentSpecificMemory()

この機能により、ウェブページのメモリ使用量を見積もる performance.measureUserAgentSpecificMemory() 関数が追加されます。このメソッドは COOP/COEP の制限を受けるので、これを使うにはウェブサイトがクロスオリジン分離されている必要があります。

潜在的に信頼できる data: URL

現在のウェブ標準に準拠するため、Chrome はすべての data: URL を潜在的に信頼できるものとして扱います
これは、認証や機密性に関して最低限の基準しか満たされていない場合でも、ある機能を有効化するためには、URL が安全かどうかを評価しなければならないことがあるためです。ウェブ標準は、それを実現するために「潜在的に信頼できる URL」の定義を使いますが、最新版の Secure Contexts 仕様では、そこに "data" スキームの URL が含まれています。これまでの Blink は、いくつかの data: URL のみを潜在的に信頼できるものとして扱っていました。

Streams API: バイト ストリーム

ストリーム API では、データ ストリームの作成、構成、使用のためのユビキタスで相互運用可能なプリミティブが提供されます。Chrome は、バイトを表すストリームで拡張バージョンの読み取り可能ストリームをサポートし、バイトを効率的に扱います。具体的には、コピーの回数を最低限にとどめます。


バイト ストリームは、Bring Your Own Buffer(BYOB)のリーダーを取得できます。デフォルトの実装では、ウェブソケットの場合は文字列や配列バッファなどのさまざまな種類の出力を指定できますが、バイト ストリームではバイト出力が保証されます。さらに、BYOB リーダーを扱えることで、安定性のメリットももたらされます。バッファがデタッチされれば、同じバッファに 2 回書き込まれないことが保証され、競合状態を回避できるためです。BYOB リーダーではバッファが再利用されるため、読み取りのたびにガベージ コレクションを行う必要もありません。

SVG 要素での完全な 'filter' プロパティ構文のサポート

Chrome の SVG 要素で 'filter' プロパティの完全な構文が利用できるようになります。これまでは、1 つの url() 参照しかサポートされませんでした。これにより、blur()sepia()grayscale() などのフィルタ関数を SVG 要素と非 SVG 要素の両方に適用できるようになります。また、'filter' のプラットフォーム サポートの均一性が増し、一部の「定型」エフェクトを適用しやすくなります。この機能がないときは、grayscale()blur() といった基本的なフィルタを使う場合でも、SVG の完全な <filter> 要素定義を使う必要がありました。

WebAuthentication API: ResidentKeyRequirement と credProps エクステンション

Chrome で Web Authentication API に関連する 2 つの新機能がサポートされます。AuthenticatorSelectionCriteria.residentKey プロパティは、ウェブ認証のクレデンシャル登録において、クライアント側で検出可能なクレデンシャルを作成するかどうかを指定します。

Web Authentication の credProps エクステンションは、作成したクレデンシャルがクライアント側で検出可能(discoverable)かどうかをリライング パーティに示します。「クライアント側で検出可能なクレデンシャル」とは、WebAuthn API リクエストでリライング パーティがクレデンシャル ID を提供することなくチャレンジを行えるタイプの WebAuthn クレデンシャルです。ブラウザは、指定された認証器(外部セキュリティ キーか組み込みのもの)からのすべての検出可能なクレデンシャル(discoverable credentials)のリストを表示し、ユーザーがログインに使うものを選択できるようにします。

CSS

::target-text 疑似要素

scroll-to-text フラグメントにデフォルトのユーザー エージェントのハイライトとは違うスタイルを設定できるようにするため、ハイライト疑似要素を追加します。

フロー関連の角丸プロパティ

フロー関連の角丸プロパティで、物理プロパティではなく論理マッピングを使って角を制御できるようになります。これにより、ページの向きや表記の方向によって異なる角丸の半径を設定することも可能になります。また、Chrome が CSS Logical Properties and Values 仕様に準拠することになります。以下の論理プロパティが追加されました。

  • border-start-start-radius
  • border-start-end-radius
  • border-end-start-radius
  • border-end-end-radius

強制カラー プロパティ

forced-colors メディア機能は、ページでユーザーが選択した限定カラーパレットをユーザー エージェントが強制しているかどうかを検出します。

強制カラー調整プロパティ

forced-color-adjust プロパティを使うと、強制カラーモードから特定の要素を除外し、CSS で完全にカラーを制御する状態に戻すことができます。

JavaScript

このバージョンの Chrome には、V8 JavaScript エンジンのバージョン 8.9 が組み込まれます。具体的には、以下の変更点が含まれます。最新の機能リストをすべて確認したい方は、V8 リリースノートをご覧ください。

トップレベルの await

Chrome では、JavaScript モジュールのトップレベルで await キーワードが許可されるようになりました。これにより、モジュールの読み込み処理に非同期呼び出しをシームレスに統合できるようになります。現在のところ、この機能はモジュールを async 関数でラップすることで実現していますが、これにより複雑さを依存モジュール側にとどめつつ、実装の詳細を公開しています。

デベロッパー ノート

EXIF の画像の向き

クロスオリジン画像の向きの判定に常に EXIF 情報が利用されるようになります。つまり、CSS で image-orientation: none を設定しても、安全でないオリジンの画像には反映されなくなります。この仕様変更に関する議論は、CSS ワーキング グループ ドラフトに記載されています。

サポートの終了と機能の削除

このバージョンの Chrome では、以下のサポートの終了および機能の削除が行われます。現在サポートが終了している機能および以前に削除された機能のリストは、ChromeStatus.com をご覧ください。

<link rel=prerender> のプレフィックス付きイベントの削除

<link rel=prerender> から発行されるレガシーなプレフィックス付きイベント(webkitprerenderstartwebkitprerenderstopwebkitprerenderloadwebkitprerenderdomcontentloaded)が Chrome から削除されます

noopener で開いたウィンドウでの sessionStorage の複製停止

ウィンドウを noopener で開いた場合、Chrome はオープン元の sessionStorage を複製しなくなります。代わりに、空の sessionStorage 名前空間が開始されます。これにより、Chrome が HTML 仕様に準拠します。


Reviewed by Eiji Kitamura - Developer Relations Team

この記事は Fan Wang による Google Ads Developer Blog の記事 "New Personalized Advertising Policies Enforcement in Google Ads API and AdWords API" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。

 2021 年 3 月 25 日より、Google Ads APIAdWords API の変更をロールアウトします。この変更により、パーソナライズド広告の最新ポリシーが適用される広告主は、Google Ads UI での変更の承諾が必須になります。対象の広告主は、クリックして変更を承諾するまでの間、API によるキャンペーン作成リクエストが拒否されます。

影響を受ける方
影響を受けるのは、米国とカナダのユーザーに対して住宅、雇用、クレジットに関する製品やサービスを宣伝する広告主です。

変更点
新しいポリシーを承諾せずに API から新しいキャンペーンを作成しようとした場合、次のエラーが発生します。

API のバージョン エラーコード エラー メッセージ
Google Ads API v6.1 CampaignError.HEC_AGREEMENT_REQUIRED Customers with Housing, Employment, or Credit ads must accept updated personalized ads policy to continue creating campaigns
Google Ads API(古いバージョン) CampaignError.UNKNOWN 同上
AdWords API(v201809) CampaignService.OperationAccessDenied 同上


必要な対応
  • 2021 年 3 月 25 日までに、新しいポリシーエラーに対するサポートをアプリケーションに追加してください。
  • こちらのガイドに従い、アカウント管理者が Google Ads UI でポリシーの変更を承諾していることを確認してください。
ご質問やさらにサポートが必要なことがありましたら、Google Ads API と AdWords API フォーラムまたは googleadsapi-support@google.com にご連絡ください。

Reviewed by Thanet Knack Praneenararat - Ads Developer Relations Team

この記事は Anash P. Oommen による Google Ads Developer Blog の記事 "Changes to conversion columns in AdWords API and Scripts" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。
 変更点
AdWords APIGoogle 広告スクリプトのレポートで、コンバージョン列の一部の組み合わせに制限が導入されます。レポートのクエリに対象の列の組み合わせが含まれている場合は、クエリを修正する必要があります。

技術解説
AdWords API レポート リクエストに以下に示す制限対象の列の両方が含まれている場合、2021 年 2 月 15 日の週より、ReportDefinitionError.INVALID_FIELD_NAME_FOR_REPORT エラーを受け取るようになります。同様に、Google 広告スクリプトで AdsApp.report メソッドを呼び出した場合も、列の組み合わせの制限に該当してクエリに失敗します。

制限されるコンバージョン列 :
  • ConversionAdjustment
  • ConversionAdjustmentLagBucket
  • ConversionAttributionEventType
  • ConversionCategoryName
  • ConversionLagBucket
  • ConversionTrackerId
  • ConversionTypeName
指標列 :
  • AllConversionRate
  • ConversionRate
  • CostPerAllConversion
  • CostPerConversion
  • CostPerCurrentModelAttributedConversion
ReportDefinitionService.getReportFields メソッドで、影響を受ける各列の exclusiveFields リストにこれらの制限が反映されます。

必要な対応
AdWords API と Google 広告スクリプトのアプリケーションでレポートのクエリを確認、修正し、禁止される列の組み合わせを使わないようにしてください。

変更の理由
現在、Google Ads UI、Google Ads Editor、Google Ads API では、これらの列の組み合わせは許可されていません。今回の変更により、AdWords API と Google 広告スクリプトの動作がその他の Google Ads プラットフォームの動作と一致します。

ご質問やサポートが必要なことがありましたら、フォーラムからご連絡ください。

Reviewed by Thanet Knack Praneenararat - Ads Developer Relations Team