Google scp コマンドでサービス アカウントを使用すると権限が拒否される

Google scp コマンドでサービス アカウントを使用すると権限が拒否される

CircleCI を使用してコードを Compute Engine インスタンスにデプロイしたいと考えています。サービス アカウント ユーザーを作成し、以下の gcloud scp コマンドを使用します。

gcloud --quiet compute scp --recurse dev/test/ [DEST_INSTANCE]:/var/www/dev/dev/test --zone=northamerica-northeast1-a --project [PROJECT_NAME]

var サブフォルダーにファイルをアップロードしようとすると、以下のエラーが発生してデプロイメントが失敗します。

scp: /var/www/dev/dev/test: Permission denied
ERROR: (gcloud.compute.scp) [/usr/bin/scp] exited with return code [1].
Exited with code 1

今、サービス アカウントにアクセス権を付与したいのですが、 を使用するときにアクセス権を付与するユーザーのリストにサービス アカウントが表示されませんcat /etc/passwd。サービス アカウントに権限を付与するにはどうすればよいですか? このアカウントに割り当てたロールは次のとおりです。 ここに画像の説明を入力してください

答え1

ユーザー名には GCE VM への書き込み権限がないようです/var/www/dev/dev/test

問題を解決するには次の 2 つの回避策のいずれかを選択できます。

  1. 権限の変更:

    • ユーザー名に/var/www/dev/dev/test直接書き込みアクセス権を付与します。例:

      sudo chown -R $USER /var/www/dev/dev/test

    • ファイルをコピーするgcloud compute scp直接 へ/var/www/dev/dev/test

  2. ファイルを 2 つの手順でコピーします。

    • 使用gcloud compute scpユーザーが書き込み可能なファイル/ディレクトリを転送します (例:/tmpまたは/home/$USER)。

    • VMインスタンスにSSHで接続するにはgcloud compute sshまたはコンソール経由で、sudo適切な権限を取得するために一時的な場所からファイルをコピーします。

注記この質問は GCE VM に関するものなので、 として VM インスタンスに直接 SSH 接続することもroot、 としてファイルを直接コピーすることもできません。これは、 が認証に を使用するというroot同じ理由によるものです。gcloud compute scpscpssh

さらに、ドキュメントもご覧くださいインスタンスへのファイルの転送セクションgcloud コマンドライン ツールを使用してファイルを転送する

答え2

使用中のサービス アカウントを確認してください。GCE のデフォルトであり、GCP によって作成されたサービス アカウントが 1 つあります。もう 1 つは、ユーザーが作成したものです。

自分で作成したものを使用している場合、JSON キー ファイルを使用してサービス アカウントのログインを承認しましたか?

答え3

次のコマンドを使用して、スクリーンショットでロールを付与した正しいサービス アカウントをアクティブ化します。

gcloud auth activate-service-account $account --key-file=the_key_file.json

関連情報