Pythonでスプレッドシート操作-②認証情報の登録

スポンサーリンク

Pythonでスプレッドシートを操作するための準備

Pythonでスプレッドシートを操作する場合、Google Cloud Platform(GCP)のAPIを有効化し、認証を通り抜ける必要があります。

前回はGoogle Cloud Platform(GCP)のAPIを有効化するステップについて手順をご紹介しました。
今回は認証情報の取得についての記事を書きます。

Googleの認証を通す2通りの方法のご紹介

Googleの認証を通す2通りの方法の特徴と違いについて

私が調べた限り、特定の人しかアクセスできない環境のスプレッドシートにアクセスするための認証を通す方法は以下の2通りあります。

それぞれ特長を記載します。(専門知識はないので誤っていたらすみません。)

①OAuth2.0クライアントIDの取得

認証を直接通すためのクライアントIDとクライアントシークレットという文字列を作成・取得し、この2つの要素を持って認証を通す方法になります。
クライアントIDとクライアントシークレットだけ取得すればよいので後で紹介するサービスアカウントよりも手軽に使用可能です。

ただしセキュリティ的におすすめではないのか、2022年秋以降に作成したアプリケーションを公開する場合は使用できないようです。
(テスト環境で数人が使うだけなら問題なさそうです。)

また、初回のアクセス時に手動で認証画面を操作する必要があります。

②サービスアカウントでの認証

プログラムに権限を割り当てるためのアカウントを作成し、そのアカウントで認証を通す方法です。

だれか別の人とスプレッドシートを共有するときと同じ操作で、対象のファイルごとに権限を付与することができ、また認証用のファイルを使用することからセキュリティとして強固なようです。

最初の設定が若干面倒くさいこと、GoogleWorkSpaceアカウントなどでは管理者の設定次第で共有できない運用になっていたりするところがネックです。

スポンサーリンク

①OAuth2.0クライアントIDの取得の手順

まず「認証情報を作成」をクリックして、「OAuthクライアントID」を選択します。

vba167_1-1_GCP認証フロー

vba167_1-2_GCP認証フロー

表示された画面で、アプリケーションの種類を選択します。
今回はPythonでPCを用いてのアクセスに使用するため「デスクトップアプリ」を選択します。

vba167_1-3_GCP認証フロー

vba167_1-4_GCP認証フロー

次の画面で名前を変更できますが、特にこだわりがなければそのままでもよい気がします。
作成ボタンをクリックします。

vba167_1-5_GCP認証フロー

OAuthクライアントを作成しましたという画面が表示され、クライアントIDとクライアントシークレットが表示されているので、右端のアイコンをクリックして文字列をコピーしてメモ帳などに控えておきます。

vba167_1-6GCP認証フロー

元の画面に戻るとOAuth2.0クライアントIDに作成したアプリケーションの名前が表示されます。
以上でOAuthクライアントIDの作成が完了です。

vba167_1-7GCP認証フロー

②サービスアカウントの登録手順

サービスアカウントの登録は3ステップ

サービスアカウントの登録は以下の3ステップで実施します。
OAuthクライアントIDの登録と比べて少し手順が多いですが、慣れると5分もかからずに設定可能です。

01.サービスアカウントの追加

まずは認証情報を作成からサービスアカウントを選択します。

vba167_2-1GCP認証フロー

vba167_2-2GCP認証フロー

サービスアカウントの詳細の中にサービスアカウント名・サービスアカウントID・サービスアカウントの説明を入力する欄が表示されます。

必須入力はサービスアカウントIDだけですので、サービスアカウントIDを入力します。

サービスアカウントのプロジェクトへのアクセスとか、ユーザーからのサービスアカウントへのアクセスとかはとりあえず使わないので省略して完了をクリックします。

vba167_2-3GCP認証フロー

元の画面に戻り、作成したサービスアカウントが表示されるようになります。

vba167_2-4GCP認証フロー

02.鍵の追加

続いてこのサービスアカウントで使用する鍵(公開鍵・秘密鍵?)のペアを作成します。

私もよく理解していませんが、Google側とこちらで突合可能なものを作成するみたいです。
リンクになっているサービスアカウントの名前の部分をクリックします。

vba167_2-4GCP認証フロー

サービスアカウントの詳細画面にて、上の方に記載されているキーをクリックします。

vba167_2-5GCP認証フロー

表示される画面で「鍵を追加」をクリックし、「新しい鍵を作成」をクリックします。

vba167_2-6GCP認証フロー

vba167_2-7GCP認証フロー

鍵のタイプを聞かれるのでJSONを選択し、作成をクリックします。

vba167_2-8GCP認証フロー

以下の表示が出て秘密鍵がダウンロードされますのでPythonからアクセスしやすい場所に保存します。
(ファイル名は変更しない方が良さそうです。私が未熟なだけかもしれませんが、鍵が使えなくなりました。)

vba167_2-9GCP認証フロー

03.対象ファイルの共有設定

上記のサービスアカウントと秘密鍵のファイルを使用して認証を通すのですが、スプレッドシートを操作するにはスプレッドシート自体のサービスアカウントへの共有設定も必要です。

手順は以下の通りです。
対象のスプレッドシートを右クリックして共有を選択します。

vba167_3-1共有設定

ユーザーやグループを追加の欄にサービスアカウントのe-mailを入力します。
ダウンロードしたjsonファイルの中に記載されているものをコピペで大丈夫です。

vba167_3-2共有設定

権限を「編集者」にして「共有」ボタンをクリックします。

vba167_3-3共有設定

再度ファイルを右クリックして共有を選択し、サービスアカウントが登録されていればOKです。

vba167_3-4共有設定

Google側の認証設定はここまで

以上で認証情報のGoogle側での設定は完了です。
次はこの設定を使用して認証を通すPythonのコードをご紹介します。
Pythonのサンプルコードの紹介ページ

コメント