みなさん、こんにちは。現在の状況は次のとおりです。現在、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 GoogleGroupとLogManagement 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]
コメントを追加