
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 つの回避策のいずれかを選択できます。
権限の変更:
ユーザー名に
/var/www/dev/dev/test
直接書き込みアクセス権を付与します。例:sudo chown -R $USER /var/www/dev/dev/test
ファイルをコピーする
gcloud compute scp
直接 へ/var/www/dev/dev/test
。
ファイルを 2 つの手順でコピーします。
使用
gcloud compute scp
ユーザーが書き込み可能なファイル/ディレクトリを転送します (例:/tmp
または/home/$USER
)。VMインスタンスにSSHで接続するには
gcloud compute ssh
またはコンソール経由で、sudo
適切な権限を取得するために一時的な場所からファイルをコピーします。
注記この質問は GCE VM に関するものなので、 として VM インスタンスに直接 SSH 接続することもroot
、 としてファイルを直接コピーすることもできません。これは、 が認証に を使用するというroot
同じ理由によるものです。gcloud compute scp
scp
ssh
さらに、ドキュメントもご覧くださいインスタンスへのファイルの転送セクションgcloud コマンドライン ツールを使用してファイルを転送する。
答え2
使用中のサービス アカウントを確認してください。GCE のデフォルトであり、GCP によって作成されたサービス アカウントが 1 つあります。もう 1 つは、ユーザーが作成したものです。
自分で作成したものを使用している場合、JSON キー ファイルを使用してサービス アカウントのログインを承認しましたか?
答え3
次のコマンドを使用して、スクリーンショットでロールを付与した正しいサービス アカウントをアクティブ化します。
gcloud auth activate-service-account $account --key-file=the_key_file.json