Secret Manager に保存されているシークレットにアクセスしようとして作成した Google Cloud Function をテストしているときに、次のエラーが発生します。Error: 7 PERMISSION_DENIED: Permission 'secretmanager.versions.access' denied for resource '<resource-name>' (or it may not exist).
私のコード:
const {SecretManagerServiceClient} = require('@google-cloud/secret-manager');
const secretClient = new SecretManagerServiceClient();
...
const [version] = await secretClient.accessSecretVersion({
name: secretName
});
const secret = version.payload.data.toString();
ドキュメントの手順に従い、サービスへの呼び出しでシークレットの完全な名前を指定し (したがって、 GCP Secret Manager でシークレットにアクセスできないprojects/<project-id>/secrets/<secret-name>/versions/latest
という問題はここでは適用されません)、そのサービス アカウントを指定します。クラウド機能を「シークレット マネージャー シークレット アクセサー」ロールで実行します (これにより、「Firebase アプリが Google シークレット マネージャーに接続していないのはなぜですか?」の根本的な問題を除外する必要があります)。
この問題は、curl を使用してローカルで関数をトリガーしようとするときと、UI でテストするとき (GCF > 関数の詳細 > テスト) の両方で発生しました。
ここに欠けているものはありますか?