我可以成功地執行這個命令,所以我很確定s3:ListBucket的角色被提供了:
aws s3 ls s3://bucket_name/folder1/folder2/
2021-09-01 21:09:36 51432 filename_2021-09-01.csv.gz
2021-09-02 21:09:32 684445 filename_2021-09-02.csv.gz
2021-09-03 21:09:34 654864 filename_2021-09-03.csv.gz
2021-09-04 21:09:31 875684 filename_2021-09-04.csv.gz
這樣做也很好:
aws s3 cp s3://bucket_name/folder1/folder2/filename_2021-09-01.csv.gz
我確信boto3中的信條是正確的,因為這可以正常作業:
我確信boto3中的信條是正確的,因為這可以正常作業:
s3 = boto3.client('s3', region_name='us-east-1', aws_access_key_id=KEY_ID, aws_secret_access_key=ACCESS_KEY)
s3.download_file(Filename=filename,Bucket=bucket_name,Key=bucket_dir filename)
但是我不能讓這個串列在boto3中作業而不出現訪問問題:
我不知道該怎么做。
def keys(bucket_name, prefix='/', delimiter='/')。)
prefix = prefix[1:] if prefix.startedwith(delimiter) else prefix
bucket = boto3.resource('s3', region_name='us-east-1', aws_access_key_id=KEY_ID, aws_secret_access_key=ACCESS_KEY).bucket(bucket_name
return (_.key for _ in bucket.objects.filter(Prefix=prefix))
print(list(keys(bucket_name) ))
我得到的錯誤如下:
botocore.exceptions.ClientError: 在呼叫ListObjects操作時發生了一個錯誤(AccessDenied)。訪問被拒絕
我猜測我的代碼是正確的,但我嘗試了幾種方法仍然訪問被拒絕
uj5u.com熱心網友回復:
從AWS高級支持網頁,
確認你在復制物件的Amazon S3桶上有s3:ListBucket的權限。您必須擁有此權限才能執行 ListObjectsV2 操作。
注意:s3:ListBucket 是允許用戶列出桶中物件的權限的名稱。ListObjectsV2是列出桶中物件的API呼叫的名稱。
如果您的 IAM 用戶或角色屬于另一個 AWS 帳戶,那么請檢查您的 IAM 和桶策略是否允許 s3:ListBucket 操作。您必須在您的 IAM 策略和 bucket 策略中擁有 s3:ListBucket 的權限。
如果您的用戶或角色屬于水桶所有者的帳戶,那么您不需要IAM和水桶策略都允許s3:ListBucket。你只需要其中一個政策來允許這個動作。
重要的是:如果 IAM 策略或 bucket 策略已經允許 s3:ListBucket 操作,那么請檢查其他策略中是否有明確拒絕該操作的宣告。明確的拒絕宣告會覆寫允許宣告。
下面是一個準許訪問s3:ListBucket的IAM策略的例子:
{
"Version": "2012-10-17",
"宣告": [{
"Sid": "Stmt1546506260896",
"Action": "s3:ListBucket"。
"效果": "允許"。
"資源": "arn:aws:s3::AWSDOC-EXAMPLE-BUCKET"。
}]
}
uj5u.com熱心網友回復:
事實證明,我不能只使用客戶端。我必須建立一個獨特的會話
session = boto3.Session(region_name = 'us-region', aws_access_key_id=ACCESS_KEY, aws_secret_access_key=SECRET_KEY)
s3 = session.client('s3', aws_access_key_id=ACCESS_KEY, aws_secret_access_key=SECRET_KEY)
prefix = 'folder1/fold3er2/' # 不能有一個領先的/。
s3_result = s3.list_objects_v2(Bucket=bucket_name, Prefix=prefix, Delimiter = "/"/span>)
列印出物件:
file_list = [] 。
for key in s3_result['Contents'] 。
file_list.append(key['Key'])
print(file_list)
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/319202.html
標籤:
