Как изменить уровень доступа BLOB-объекта c в Azure с помощью setAccessPolicy - PullRequest
0 голосов
/ 21 апреля 2020

Как изменить политику доступа к BLOB-объектам?

В настоящее время я могу создать несколько тестовых объектов с помощью быстрого запуска azure . Это прекрасно работает, но в моем случае BLOB-объектов имеют уровень доступа publi c по умолчанию. Я хочу установить уровень доступа publi c от Private (без анонимного доступа) к Blob (анонимный доступ для чтения только для BLOB-объектов).

Я сделал попытку и ошибку и обнаружил, что setAccessPolicy может мне помочь. Я хочу реализовать это, но я не полностью понимаю .setPermissions("permissionString"). Нужно ли мне изменить это на что-то вроде «анонимный доступ на чтение только для BLOB-объектов» или я что-то упустил?

Мой код попытки и ошибки:

public static void main( String[] args ) throws IOException
    {
        BlobServiceClient blobServiceClient = new BlobServiceClientBuilder().connectionString(connectionString).buildClient();
        String containerName = "testblobs"+ UUID.randomUUID();

        BlobSignedIdentifier identifier = new BlobSignedIdentifier()
                .setId("name")
                .setAccessPolicy(new BlobAccessPolicy()
                .setStartsOn(OffsetDateTime.now())
                        .setExpiresOn(OffsetDateTime.now().plusDays(1))
                .setPermissions("permissionString")); //what should I put here?

        BlobContainerClient containerClient = blobServiceClient.createBlobContainer(containerName);

        try {
            containerClient.setAccessPolicy(PublicAccessType.CONTAINER, Collections.singletonList(identifier));
            System.out.println("Set Access Policy to 'Public read access for blobs only'.");
        } catch (UnsupportedOperationException err) {
            System.out.printf("Set Access Policy failed because: %s\n", err);
        }

        String localPath = "pathtofile";
        String fileName = "myfile.bpmn";
        File localFile = new File(localPath+fileName);

        BlobClient blobClient = containerClient.getBlobClient(fileName);

        System.out.println("\nUploading to Blob storage as blob:\n\t" + blobClient.getBlobUrl());

        blobClient.uploadFromFile(localPath + fileName);

        System.out.println("\nListing da blobs...");

        for (BlobItem blobItem : containerClient.listBlobs()) {
            System.out.println();
            System.out.println("\t" + blobItem.getName());
        }
    }

Когда я запускаю этот фрагмент В коде будет выброшено следующее исключение, и я думаю, что из-за .setPermissions("permissionString") установлен неправильно.

Трассировка стека исключений:

Исключение в потоке "main" com. azure .storage.blob.models.BlobStorageException: Код состояния 400, "InvalidXmlDocumentXML не указан синтаксически действительный. RequestId: 74403433-a01e-0086-17c1-1727cd000000 Время: 2020-04-21T09: 43: 11.5943935Z00 "в java .base / jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0 (собственный метод) в java .base / jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance (NativeConstructorAccessorImpl. java: 62) в java .base / jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance * 1036A * .base / java .lang.reflect.Constructor.newInstance (Constructor. java: 490) в com. azure .core.http.rest.RestProxy.instantiateUnexpectedException (RestProxy. java: 357) в com. azure .core.http.rest.RestProxy.lambda $ sureExpectedStatus $ 3 (RestProxy. java: 398) в реакторе.core.publisher.MonoFlatMap $ FlatMapMain.onNext (MonoFlatMap. java: 118) в реакторе .core.publisher.Oper ators $ MonoSubscriber.complete (Операторы. java: 1705) в реакторе.core.publisher.MonoCacheTime $ CoordinatorSubscriber.signalCached (MonoCacheTime. java: 320) в реакторе.core.publisher.MonoCacheTime $. java: 337) в реакторе.core.publisher.Operators $ ScalarSubscription.request (Операторы. java: 2267) на реакторе.core.publisher.MonoCacheTime $ CoordinatorSubscriber.onSubscribe (MonoCacheTime. java: 276) в реакторе .core.publisher.FluxFlatMap.trySubscribeScalarMap (FluxFlatMap. java: 191) в активном реакторе 1052 *: 48) в реакторе.core.publisher.MonoDefer.subscribe (MonoDefer. java: 52) в реакторе.core.publisher.MonoCacheTime.subscribeOrReturn (MonoCacheTime. java: 132) в реакторе.core.publisher. InternalMonoOperator.subscribe (InternalMonoOperator. java: 48) по адресу processor.core.publisher.MonoFlatMap $ FlatMapMain.onNext (MonoFlatMap. * 105 6 *: 150) в processor.core.publisher.FluxDoFinally $ DoFinallySubscriber.onNext (FluxDoFinally. java: 123) в реакторе.core.publisher.FluxHandle $ HandleSubscriber.onNext (FluxHandle. * Реактор java 112): 112): core.publisher.FluxMap $ MapConditionalSubscriber.onNext (FluxMap. java: 213) в реакторе. onNext (FluxHandleFuseable. java: 178) в реакторе.core.publisher.FluxContextStart $ ContextStartSubscriber.onNext (FluxContextStart. java: 103) в реакторе.core.publisher.Operators $ * MonoSubscriber. 1705) в реакторе.core.publisher. .FluxMap $ MapSubscriber.onComplete (FluxMap. java: 136) по адресу Суммарный реактор.netty.channel.FluxReceive.terminateReceiver (FluxReceive. java: 4 19) на реактор.неты. channel.FluxReceive.drainReceiver (FluxReceive. java: 209) в реакторе.netty.channel.FluxReceive.onInboundComplete (FluxReceive. java: 367) в реакторе.netty.channel.ChannelOperations.onInboundComplete (ChannelOperations. java): 363) в реакторе. .channelRead (ChannelOperationsHandler. java: 90) по адресу io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead (AbstractChannelHandlerContext. java: 377) по адресу io.netty.channel.AbstractChannel *andlerCandxtC) io.netty.channel. (. ByteToMessageDecoder * 1 079 *: 321) 8 * .ByteToMessageDecoder.fireChannelRead в io.netty.handler.code c .ByteToMessageDecoder.channelRead (ByteToMessageDecoder * 1 081 *:. 295) при io.netty.channel.CombinedChannelDuplexHandler.channelRead ( CombinedChannelDuplexHandler. java: 251) по адресу io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead (AbstractChannelHandlerContext. java: 377) по адресу io.netty.channel.AbstractChannelHandlerContext.ado (i). .channel.AbstractChannelHandlerContext.fireChannelRead (AbstractChannelHandlerContext. java: 355) в io.netty.handler.ssl.SslHandler.unwrap (SslHandler. java: 1470) в io.netty.handler.sslj. . java: 1231) на io.netty.handler.ssl.SslHandler.decode (SslHandler. java: 1268) на io.netty.handler.code c .ByteToMessageDecoder.decodeRemovalReentryProtection (ByteToMessageDeder: 498) на io.netty.handler.code c .ByteToMessageDecoder.callDecode (ByteToM essageDecoder. java: 437) по адресу io.netty.handler.code c .ByteToMessageDecoder.channelRead (ByteToMessageDecoder. java: 276) по адресу io.netty.channel.AbstractChannelHandlerContext.invokeChannelHandlerContext.invokeChan . channelRead (DefaultChannelPipeline. java: 1410) по адресу io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead (AbstractChannelHandlerContext. java: 377) по адресу io.netty.channel.AbstractChannelHandlerContext.invoC (iphone) (11). .netty.channel.DefaultChannelPipeline.fireChannelRead (DefaultChannelPipeline. java: 919) на сайте io.netty.channel.nio.AbstractNioByteChannel $ NioByteUnsafe.read (AbstractNioByteChannel. java: 163). tL oop .processSelectedKey (NioEventL oop. java: 714) на io.netty.channel.nio.NioEventL oop .processSelectedKeysOptimized (NioEventL oop. java: 650) на io.netty. channel.nio.NioEventL oop .processSelectedKeys (NioEventL oop. java: 576) на io.netty.channel.nio.NioEventL oop .run (NioEventL oop. java: 493) в io.netty.util.concurrent.SingleThreadEventExecutor $ 4.run (SingleThreadEventExecutor. java: 989) на io.netty.util.internal.ThreadExecutorMap $ 2.run (ThreadExecutorMap. java: 74) на io.netty.util. concurrent.FastThreadLocalRunnable.run (FastThreadLocalRunnable. java: 30) в java .base / java .lang.Thread.run (Thread. java: 834) Подавлено: java .lang.Exception: # блок завершен с ошибкой в ​​реакторе.core.publisher.BlockingSingleSubscriber.blockingGet (BlockingSingleSubscriber. java: 99) в реакторе.core.publisher. Mono.block (Mono. java: 1664) в com. azure .storage.common.implementation.StorageImplUtils.blockWithOptionalTimeout (StorageImplUtils. java: 99) в com. azure .storage.blob.BlobContainerClient. setAccessPolicyWithResponse (BlobContainerClient. java: 416) в com. azure .storage.blob.BlobContainerClient.setAccessPolicy (BlobContainerClient. java: 386) в Main.main (Main. java: 33)

1024 * Любая помощь в объяснении .setPermissions("permissionString") для меня с некоторыми примерами кода, как настроить доступ publi c для больших двоичных объектов, была бы отличной.

1 Ответ

1 голос
/ 21 апреля 2020

Разрешения, применимые к контейнеру BLOB-объектов, определены here.

В зависимости от разрешений, которые вы sh включаете в свою политику доступа, вы можете выбрать одно или несколько из следующих разрешений: Read (r), Add (a), Create (c), Write (w), Delete (d) и List (l).

Обратите внимание, что порядок этих разрешений важен. Они должны следовать в следующем порядке: racwdl.

Также обратите внимание, что указание разрешений в политике общего доступа является необязательным, поэтому вы также можете оставить строку разрешений пустой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...