Authentication failure when trying to copy a blob from one container to another

I am trying to copy a blob from one container to another and am creating a BlobServiceClient using a connection string as described here. However I am running into the following error.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
<code>Error performing copyoperation from 'blbcon-common-customer-documents'. Exception: Server failed to authenticate the request. Please refer to the information in the www-authenticate header.
[2024-07-18T16:29:37.783Z] RequestId:bbb336a3-701e-0107-7b2f-d9ff2a000000
[2024-07-18T16:29:37.783Z] Time:2024-07-18T16:29:37.7805609Z
[2024-07-18T16:29:37.783Z] ErrorCode:CannotVerifyCopySource
[2024-07-18T16:29:37.783Z] copysourcestatuscode:401
[2024-07-18T16:29:37.783Z] copysourceerrorcode:NoAuthenticationInformation
[2024-07-18T16:29:37.783Z] copysourceerrormessage:Server failed to authenticate the request. Please refer to the information in the www-authenticate header
</code>
<code>Error performing copyoperation from 'blbcon-common-customer-documents'. Exception: Server failed to authenticate the request. Please refer to the information in the www-authenticate header. [2024-07-18T16:29:37.783Z] RequestId:bbb336a3-701e-0107-7b2f-d9ff2a000000 [2024-07-18T16:29:37.783Z] Time:2024-07-18T16:29:37.7805609Z [2024-07-18T16:29:37.783Z] ErrorCode:CannotVerifyCopySource [2024-07-18T16:29:37.783Z] copysourcestatuscode:401 [2024-07-18T16:29:37.783Z] copysourceerrorcode:NoAuthenticationInformation [2024-07-18T16:29:37.783Z] copysourceerrormessage:Server failed to authenticate the request. Please refer to the information in the www-authenticate header </code>
Error performing copyoperation from 'blbcon-common-customer-documents'. Exception: Server failed to authenticate the request. Please refer to the information in the www-authenticate header.

[2024-07-18T16:29:37.783Z] RequestId:bbb336a3-701e-0107-7b2f-d9ff2a000000

[2024-07-18T16:29:37.783Z] Time:2024-07-18T16:29:37.7805609Z

[2024-07-18T16:29:37.783Z] ErrorCode:CannotVerifyCopySource

[2024-07-18T16:29:37.783Z] copysourcestatuscode:401

[2024-07-18T16:29:37.783Z] copysourceerrorcode:NoAuthenticationInformation

[2024-07-18T16:29:37.783Z] copysourceerrormessage:Server failed to authenticate the request. Please refer to the information in the www-authenticate header

I tried using a SAS Token and with the SAS Token the code works perfectly but I want to deploy the function without a SAS Token. Why is the connection string not enough to authenticate? I am using the start_copy_from_url function as described here. The operation works when the url is created using this code:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
<code>sas_token = os.getenv("VSN_SAS_Token")
vsn_blob_url = f"{vsn_blob_client.url}?{sas_token}"
</code>
<code>sas_token = os.getenv("VSN_SAS_Token") vsn_blob_url = f"{vsn_blob_client.url}?{sas_token}" </code>
sas_token = os.getenv("VSN_SAS_Token")
vsn_blob_url = f"{vsn_blob_client.url}?{sas_token}"

However, it does not work when just doing the following where the blob_client is generated with a correct connection string.

vsn_blob_url = vsn_blob_client.url

How can I perform the copy operation using the connection string?

1

When container has private access level then it can only be accessed using SAS key or SAS URL. It is by default private and access level is disabled.

To use start_copy_from_url access level should be changed to either blob or container.

To change access level:

  • Go to Configuration of storage and enable allow blob anonymous access
  • Change container’s access level

To copy from one container to another, upload_from_url method can be used.

Below code worked for me.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
<code>import azure.functions as func
import logging
from azure.storage.blob import BlobServiceClient
app = func.FunctionApp()
@app.route(route="http_trigger", auth_level=func.AuthLevel.ANONYMOUS)
def http_trigger(req: func.HttpRequest) -> func.HttpResponse:
logging.info('Python HTTP trigger function processed a request.')
connectionString= "DefaultEndpointsProtocol=https;AccountName=vivekrg8272;AccountKey=xxxxxxxxxxxxxxxxxxxxxx;EndpointSuffix=core.windows.net"
serviceClient=BlobServiceClient.from_connection_string(connectionString)
source_blobClient=serviceClient.get_blob_client(container="container1",blob="oldfile.txt")
destination_blobClient=serviceClient.get_blob_client(container="container2", blob="oldfile.txt")
destination_blobClient.upload_blob_from_url(source_url=source_blobClient.url,overwrite=True)
return func.HttpResponse("copied successfully")
</code>
<code>import azure.functions as func import logging from azure.storage.blob import BlobServiceClient app = func.FunctionApp() @app.route(route="http_trigger", auth_level=func.AuthLevel.ANONYMOUS) def http_trigger(req: func.HttpRequest) -> func.HttpResponse: logging.info('Python HTTP trigger function processed a request.') connectionString= "DefaultEndpointsProtocol=https;AccountName=vivekrg8272;AccountKey=xxxxxxxxxxxxxxxxxxxxxx;EndpointSuffix=core.windows.net" serviceClient=BlobServiceClient.from_connection_string(connectionString) source_blobClient=serviceClient.get_blob_client(container="container1",blob="oldfile.txt") destination_blobClient=serviceClient.get_blob_client(container="container2", blob="oldfile.txt") destination_blobClient.upload_blob_from_url(source_url=source_blobClient.url,overwrite=True) return func.HttpResponse("copied successfully") </code>
import azure.functions as func
import logging
from azure.storage.blob import BlobServiceClient

app = func.FunctionApp()


@app.route(route="http_trigger", auth_level=func.AuthLevel.ANONYMOUS)
def http_trigger(req: func.HttpRequest) -> func.HttpResponse:
    logging.info('Python HTTP trigger function processed a request.')

    connectionString= "DefaultEndpointsProtocol=https;AccountName=vivekrg8272;AccountKey=xxxxxxxxxxxxxxxxxxxxxx;EndpointSuffix=core.windows.net"
    
    serviceClient=BlobServiceClient.from_connection_string(connectionString)
    
    source_blobClient=serviceClient.get_blob_client(container="container1",blob="oldfile.txt")
    destination_blobClient=serviceClient.get_blob_client(container="container2", blob="oldfile.txt")

    destination_blobClient.upload_blob_from_url(source_url=source_blobClient.url,overwrite=True)

    return func.HttpResponse("copied successfully")    

OUTPUT:

Trang chủ Giới thiệu Sinh nhật bé trai Sinh nhật bé gái Tổ chức sự kiện Biểu diễn giải trí Dịch vụ khác Trang trí tiệc cưới Tổ chức khai trương Tư vấn dịch vụ Thư viện ảnh Tin tức - sự kiện Liên hệ Chú hề sinh nhật Trang trí YEAR END PARTY công ty Trang trí tất niên cuối năm Trang trí tất niên xu hướng mới nhất Trang trí sinh nhật bé trai Hải Đăng Trang trí sinh nhật bé Khánh Vân Trang trí sinh nhật Bích Ngân Trang trí sinh nhật bé Thanh Trang Thuê ông già Noel phát quà Biểu diễn xiếc khỉ Xiếc quay đĩa Dịch vụ tổ chức sự kiện 5 sao Thông tin về chúng tôi Dịch vụ sinh nhật bé trai Dịch vụ sinh nhật bé gái Sự kiện trọn gói Các tiết mục giải trí Dịch vụ bổ trợ Tiệc cưới sang trọng Dịch vụ khai trương Tư vấn tổ chức sự kiện Hình ảnh sự kiện Cập nhật tin tức Liên hệ ngay Thuê chú hề chuyên nghiệp Tiệc tất niên cho công ty Trang trí tiệc cuối năm Tiệc tất niên độc đáo Sinh nhật bé Hải Đăng Sinh nhật đáng yêu bé Khánh Vân Sinh nhật sang trọng Bích Ngân Tiệc sinh nhật bé Thanh Trang Dịch vụ ông già Noel Xiếc thú vui nhộn Biểu diễn xiếc quay đĩa Dịch vụ tổ chức tiệc uy tín Khám phá dịch vụ của chúng tôi Tiệc sinh nhật cho bé trai Trang trí tiệc cho bé gái Gói sự kiện chuyên nghiệp Chương trình giải trí hấp dẫn Dịch vụ hỗ trợ sự kiện Trang trí tiệc cưới đẹp Khởi đầu thành công với khai trương Chuyên gia tư vấn sự kiện Xem ảnh các sự kiện đẹp Tin mới về sự kiện Kết nối với đội ngũ chuyên gia Chú hề vui nhộn cho tiệc sinh nhật Ý tưởng tiệc cuối năm Tất niên độc đáo Trang trí tiệc hiện đại Tổ chức sinh nhật cho Hải Đăng Sinh nhật độc quyền Khánh Vân Phong cách tiệc Bích Ngân Trang trí tiệc bé Thanh Trang Thuê dịch vụ ông già Noel chuyên nghiệp Xem xiếc khỉ đặc sắc Xiếc quay đĩa thú vị
Trang chủ Giới thiệu Sinh nhật bé trai Sinh nhật bé gái Tổ chức sự kiện Biểu diễn giải trí Dịch vụ khác Trang trí tiệc cưới Tổ chức khai trương Tư vấn dịch vụ Thư viện ảnh Tin tức - sự kiện Liên hệ Chú hề sinh nhật Trang trí YEAR END PARTY công ty Trang trí tất niên cuối năm Trang trí tất niên xu hướng mới nhất Trang trí sinh nhật bé trai Hải Đăng Trang trí sinh nhật bé Khánh Vân Trang trí sinh nhật Bích Ngân Trang trí sinh nhật bé Thanh Trang Thuê ông già Noel phát quà Biểu diễn xiếc khỉ Xiếc quay đĩa
Thiết kế website Thiết kế website Thiết kế website Cách kháng tài khoản quảng cáo Mua bán Fanpage Facebook Dịch vụ SEO Tổ chức sinh nhật