授予S3对EC2实例的访问权限(最简单的情况)



我尝试了以下AWS文档中最简单的案例。我创建了角色,分配给实例并重新启动实例。为了以交互方式测试访问,我登录到Windows实例并运行aws s3api list-objects --bucket testbucket。我得到错误An error occurred (AccessDenied) when calling the ListObjects operation: Access Denied
下一个测试是创建.aws/credentials文件并添加配置文件以承担该角色。我修改了角色(分配给实例(,并添加了由帐户中的任何用户承担角色的权限。当我运行相同的命令aws s3api list-objects --bucket testbucket --profile assume_role时,bucket中的对象会被列出
这是我的测试角色信任关系

{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": [
"ec2.amazonaws.com",
"ssm.amazonaws.com"
]
},
"Action": "sts:AssumeRole"
},
{
"Sid": "UserCanAssumeRole",
"Effect": "Allow",
"Principal": {
"AWS": "111111111111"
},
"Action": "sts:AssumeRole"
}
]
}

角色只有一个权限"AmazonS3FullAccess">
当我在AWS控制台中切换角色时,我可以看到S3 bucket的内容(在AWS控制台上不允许其他操作(
我的假设是EC2实例不承担角色
如何确定问题所在?

Windows代理出现问题
我检查了代理环境变量。没有设置。当我检查"控制面板"时->我在网上看到的"代理"文本框中显示了代理的值,但复选框";使用代理";未检查。旁边是文本";您的某些设置由组织管理"Skip代理已列出169.254.169.254
我在调试模式下运行命令,发现CLI连接到代理。无法访问169.254.169.254,并且未设置凭据。当我显式设置环境变量set NO_PROXY=169.254.169.254时,一切都开始工作了
我不明白为什么AWS CLI使用Windows系统中的代理。最糟糕的是,它使用代理,但不检查绕过代理。经验教训在调试模式下运行命令并验证输出

最新更新