簡體   English   中英

AWS 角色與 duckdb HTTPFS 調用中的 iam 憑證

[英]AWS role vs iam credential in duckdb HTTPFS call

我很困惑,我不知道這個是怎么回事。

我正在使用 DuckDB 查詢 s3 存儲桶中的鑲木地板文件。

import pandas as pd
import duckdb

query = """
    INSTALL httpfs;
    LOAD httpfs;
    SET s3_region='us-west-2';
    SET s3_access_key_id='key';
    SET s3_secret_access_key='secret';
    SELECT 
        FROM read_parquet('s3://bucket/folder/file.parquet') 

cursor = duckdb.connect()

cursor.execute(query).df()

我有一個具有管理員訪問權限的 IAM 用戶。 我能夠使用編程訪問密鑰查詢此鑲木地板文件。 我還有一個我想在應用程序中使用的角色,我還授予管理員訪問權限只是為了測試目的。

當我擔任角色並創建臨時憑證並將其輸入到上面的代碼中時

export $(printf "AWS_ACCESS_KEY_ID=%s AWS_SECRET_ACCESS_KEY=%s AWS_SESSION_TOKEN=%s" \
$(aws sts assume-role \
--role-arn arn:aws:iam::<account-id>:role/<role-name> \
--role-session-name test-session \
--query "Credentials.[AccessKeyId,SecretAccessKey,SessionToken]" \
--output text))

我得到錯誤

duckdb.Error:無效錯誤:無法連接到 URL“s3://bucket/folder/file.parquet”:403(禁止訪問)

但是,當我使用我的 IAM 用戶時,我可以訪問這個 s3 對象並查詢數據。 關於角色和 IAM 用戶之間的區別,我是否遺漏了什么?

如果有幫助,我想做的是為 lambda 函數創建一個角色,然后在上面的代碼中使用os.getenviron()訪問環境變量AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY 我相信如果我可以通過寫入臨時憑證來讓角色工作,那么當我在 lambda 函數中使用os.getenv()時它應該可以工作。

在通過SET s3_session_token='sessiontoken'; s3_session_token ,我遇到了一個非常相似的問題; 有效。

代碼將更改為

import pandas as pd
import duckdb

query = """
    INSTALL httpfs;
    LOAD httpfs;
    SET s3_region='us-west-2';
    SET s3_access_key_id='key';
    SET s3_secret_access_key='secret';
    SET s3_session_token='session-token';
    SELECT 
        FROM read_parquet('s3://bucket/folder/file.parquet') 

cursor = duckdb.connect()

cursor.execute(query).df()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM