Google CloudJavaプロジェクトからDoubleClickBidManagerパートナー固有のプライベートバケットにアクセスしようとしたときのステータスコード403

ザニー

みなさん、こんにちは。現在の状況は次のとおりです。現在、GoogleCloudプロジェクトがあります。Google Cloudプロジェクトにログインするアカウントは、DoubleClickの入札マネージャーアカウントにもログインできます。私の目的は、DoubleClick Bid Manager APIを使用して、DBMによって保存されている特定のバケットを取得し、それらを別のGoogleCloudプロジェクトに保存することです。

これまでのところ、パブリックバケット(gdbm-public)にアクセスし、データをプルしてダウンロードできますが、同じ方法でパートナー固有のバケットにアクセスしようとすると、つまり(gdbm-201032-201843)ステータスコード403が表示されます。

ここのドキュメントを読んだところ、DBM自体のDBMパートナー情報にGoogleグループを追加する必要があることがわかりました。しかし、グーグルグループを追加して変更を保存しようとすると、変更を保存できないというエラーが表示されます。

これは私が認証する場所です:

return new GoogleCredential.Builder().setTransport(HTTP_TRANSPORT)
            .setJsonFactory(JSON_FACTORY)
            .setServiceAccountId("<service_account_i_cant_show_here>")
            .setServiceAccountScopes(Collections.singleton(StorageScopes.DEVSTORAGE_READ_ONLY))
            .setServiceAccountPrivateKeyFromP12File(new File("secret-privatekey.p12"))
            .build();

次に、次のようにバケットにアクセスしようとします。

    String bucketName = "gdbm-201032-201843";
    GoogleCredential credentials = getCredentials();
    Storage storage = new Storage(HTTP_TRANSPORT, JSON_FACTORY, credentials);

    Storage.Objects.List listObjects = storage.objects().list(bucketName);
    Objects objects;
    do {
        objects = listObjects.execute();
        for (StorageObject object : objects.getItems()) {
            System.out.println(object);
        }
        listObjects.setPageToken(objects.getNextPageToken());
    } while (null != objects.getNextPageToken());

より具体的にlistObjects.execute()は、403がスローされる場所です。

私が編集しようとしている領域は、パートナー自体のLog Read GoogleGroupLogManagement GoogleGroupです

どんな助けでも大歓迎です、ありがとう!

ザニー

私には解決策があると思いますここにあるような別の認証手段を使用しましリンクされたクラスを使用して、Google Cloud Projectのクライアントクレデンシャルと、Google CloudProjectとDBMの両方にログインしたユーザーを入力しました。

また、スコープを「https://www.googleapis.com/auth/cloud-platform」に変更しましたが、これが結果に影響を与えたかどうかは100%わかりません。

コード例:

// Scopes for the OAuth token
private static final Set<String> SCOPES =
        ImmutableSet.of("https://www.googleapis.com/auth/cloud-platform");

public static Credential getUserCredential() throws Exception {
    GoogleClientSecrets clientSecrets = GoogleClientSecrets.load(
            JSON_FACTORY,
            new InputStreamReader(SecurityUtilities.class.
                    getResourceAsStream("/client_secret.json")));
    dataStoreFactory = new FileDataStoreFactory(DATA_STORE_DIR);

// set up authorization code flow.
    GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder(
            HTTP_TRANSPORT, JSON_FACTORY, clientSecrets, SCOPES)
            .setDataStoreFactory(dataStoreFactory)
            .build();
    // authorize and get credentials.
    return new AuthorizationCodeInstalledApp(flow, new LocalServerReceiver())
            .authorize("<Personal user account>");

そのため、サービスアカウントを使用する代わりに、個人アカウントを使用しました。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ