<p>正如您正确指出的,<code>usgs-landsat</code>S3 bucket是请求者付费的,因此您需要正确配置<code>rasterio</code>以处理该问题</p>
<p>如您所见<a href="https://github.com/mapbox/rasterio/blob/3c630f8a30d31ceb61aa52ad3ab96f4fc25f2ecd/rasterio/session.py#L251" rel="nofollow noreferrer">here</a>,<code>rasterio.session.AWSSession</code>有一个<code>requester_pays</code>参数,您可以将其设置为<code>True</code>以便执行此操作</p>
<p>我还可以指出:</p>
<pre class="lang-py prettyprint-override"><code>s3 = boto3.client('s3', aws_access_key_id=AWS_KEY_ID,
aws_secret_access_key=AWS_SECRET)
resources = boto3.resource('s3', aws_access_key_id=AWS_KEY_ID,
aws_secret_access_key=AWS_SECRET)
</code></pre>
<p>在您的代码段中不需要使用<code>s3</code>和<code>resources</code>变量,因为以后不会重用这些变量</p>
<p>事实上,如果您的凭证正确地位于<code>~/.aws/</code>文件夹中——这可以通过运行<a href="https://pypi.org/project/awscli/" rel="nofollow noreferrer">^{<cd10>}</a>python包(请参见<a href="https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html" rel="nofollow noreferrer">documentation</a>)提供的命令行实用程序<code>aws configure</code>来完成——您根本不需要导入<code>boto3</code>,<code>rasterio</code>为您完成</p>
<p>因此,您的代码段可以修改为:</p>
<pre class="lang-py prettyprint-override"><code>import rasterio as rio
from matplotlib.pyplot import imshow
from rasterio.session import AWSSession
aws_session = AWSSession(requester_pays=True)
cog = 's3://usgs-landsat/collection02/level-2/standard/oli-tirs/2020/026/027/LC08_L2SP_026027_20200827_20200906_02_T1/LC08_L2SP_026027_20200827_20200906_02_T1_SR_B2.TIF'
with rio.Env(aws_session):
with rio.open(cog) as src:
profile = src.profile
arr = src.read(1)
imshow(arr)
</code></pre>
<p>在我的机器上运行正常</p>