[英]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_ID
和AWS_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.