尝试使用AWS CLI执行AWS s3 ls时访问被拒绝

时间:2019-04-10 18:46:04

标签: amazon-web-services amazon-s3

我启动了一个ec2实例,并为该实例创建了具有完整S3访问策略的角色。我在上面安装了awscli并配置了用户的访问密钥。我的用户也具有管理员访问权限和完整的S3访问策略。我可以在aws控制台中看到存储分区,但是当我尝试在实例上运行aws s3 ls时,它返回了An error occurred (AccessDenied) when calling the ListBuckets operation: Access Denied

我还需要做些什么才能为角色或用户正确添加权限,以便能够在S3和实例之间列出和同步对象?

5 个答案:

答案 0 :(得分:1)

不仅从CLI还会发生此问题,例如在执行S3 API时也会发生。

此错误的原因可能是由于对存储桶的访问权限配置错误。

例如,在下面的设置中,您具有对存储桶的内部对象执行操作的完整权限,但未在存储桶本身上指定任何操作

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:*"
            ],
            "Resource": [
                "arn:aws:s3:::<name-of-bucket>/*"
            ]
        }
    ]
}

这将导致提到的

调用ListBuckets时

...(AccessDenied)...

错误。

为了解决此问题,您应该允许应用程序访问存储桶(第一个语句项)并编辑存储桶中的所有对象(第二个语句项):

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::<name-of-bucket>"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:PutObject"
            ],
            "Resource": [
                "arn:aws:s3:::<name-of-bucket>/*"
            ]
        }
    ]
}

有一些较短的配置可以解决该问题,但是上面指定的配置也试图保留细粒度的安全权限。

答案 1 :(得分:0)

何时使用 IAM用户 IAM角色似乎有些混乱。

使用 Amazon EC2实例时,授予权限的最佳方法是:

  • 创建 IAM角色,并附加策略以授予所需的权限
  • 将IAM角色与 Amazon EC2实例相关联。可以在启动时或之后(操作/实例设置/附加IAM角色)完成此操作。
  • 任何在EC2实例(包括AWS CLI)上运行的应用程序现在都将自动接收凭据。 请勿运行 aws configure

如果您想授予您自己的(非EC2)计算机的权限,则:

  • 创建一个 IAM用户(或使用您现有的用户)并附加策略以授予所需的权限
  • 在计算机上,运行aws configure,然后输入与IAM用户关联的访问密钥和秘密密钥。这会将凭据存储在~/.aws/credentials中。
  • 此计算机上运行的所有应用程序都将使用本地credentials文件中的凭据

答案 2 :(得分:0)

结果是我忘记了必须做mfa才能获得访问令牌才能在S3中运行。谢谢大家的回应。

答案 3 :(得分:0)

我也遇到了这个问题。

我跑了aws sts get-caller-identity,发现Arn与我的期望不符。事实证明,如果您在bash_profilebashrc中设置了AWS配置,则awscli将默认使用这些配置。

我将bash_profilebashrc中的环境变量更改为正确的键,一切开始正常工作。

答案 4 :(得分:0)

创建具有权限的IAM用户。

<?php
$status11=disabled;
if(htmlentities($result->aba11)==null){
    $status11=enabled;
}
?>
<td><input type="datetime-local"  name="aba11" id="aba11" value="<?php echo htmlentities($result->aba11);?>" class="form-control" <?php echo $status11?> ></td> 
<?php
$status12=disabled;
if(htmlentities($result->aba11)!=null and htmlentities($result->aba12)== null ){
    $status12=enabled;
}
?>
<td><input type="datetime-local" name="aba12" onkeydown="upperCaseF(this)" value="<?php echo htmlentities($result->aba12);?>" class="form-control" <?php echo $status12?>></td>
<td><input type="text" name="aba13" onkeydown="upperCaseF(this)" value="<?php echo htmlentities($result->aba13);?>" class="form-control"></td>
</tr>

<tr>
<th class= "col-md-1.5" align="centre">0.0.1M NaOH</th>
<th class= "col-md-2" align="centre">60 Degree C</th>

<td><input type="datetime-local"  name="aba21"onkeydown="upperCaseF(this)" value="<?php echo htmlentities($result->aba21);?>" class="form-control" ></td> 
<td><input type="datetime-local" name="aba22" onkeydown="upperCaseF(this)" value="<?php echo htmlentities($result->aba22);?>" class="form-control" ></td>
<td><input type="text" name="aba23" onkeydown="upperCaseF(this)" value="<?php echo htmlentities($result->aba23);?>" class="form-control" ></td>
</tr>

<tr>
<th class= "col-md-1.5" align="centre">0.5M HCL</th>
<th class= "col-md-2" align="centre">60 Degree C</th>

<td><input type="datetime-local"  name="aba31" onkeydown="upperCaseF(this)" value="<?php echo htmlentities($result->aba31);?>" class="form-control" ></td> 
<td><input type="datetime-local" name="aba32" onkeydown="upperCaseF(this)" value="<?php echo htmlentities($result->aba32);?>" class="form-control" ></td>
<td><input type="text" name="aba33" onkeydown="upperCaseF(this)" value="<?php echo htmlentities($result->aba33);?>" class="form-control"></td>
</tr>

<tr>
<th class= "col-md-1.5" align="centre">Freeze Drying</th>
<th class= "col-md-2" align="centre"> </th>
<td><input type="datetime-local"  name="aba41" onkeydown="upperCaseF(this)" value="<?php echo htmlentities($result->aba41);?>" class="form-control" ></td> 
<td><input type="datetime-local" name="aba42" onkeydown="upperCaseF(this)" value="<?php echo htmlentities($result->aba42);?>" class="form-control" ></td>
<td><input type="text" name="aba43" onkeydown="upperCaseF(this)" value="<?php echo htmlentities($result->aba43);?>" class="form-control"></td>
</tr>
</table>

保存访问密钥ID和秘密访问密钥。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "s3:*",
            "Resource": "arn:aws:s3:::bucketName/*"
        }
    ]
}