我不确定我是不是漏了一步。
我有一个s3 bucket,我需要能够从一个AWS SDK PHP脚本访问我写的运行在我的EC2上。我创建了一个IAM角色以允许访问。
IAM Allow_S3_Access_to_EC2
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": "s3:ListBucket",
"Resource": "arn:aws:s3:::myinbox"
},
{
"Sid": "VisualEditor1",
"Effect": "Allow",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::myinbox/*"
},
{
"Sid": "VisualEditor2",
"Effect": "Allow",
"Action": "s3:ListAllMyBuckets",
"Resource": "*"
},
{
"Sid": "VisualEditor3",
"Effect": "Allow",
"Action": "s3:DeleteObject",
"Resource": "arn:aws:s3:::myinbox/*"
}
]
}
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "ec2.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowSESPuts",
"Effect": "Allow",
"Principal": {
"Service": "ses.amazonaws.com"
},
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::myinbox/*",
"Condition": {
"StringEquals": {
"aws:Referer": "************"
}
}
},
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::************:role/Allow_S3_Access_to_EC2"
},
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::myinbox",
"arn:aws:s3:::myinbox/*"
]
}
]
}
我的Bucket策略中没有任何关于我的EC2甚至我附加的IAM角色的内容。我也需要在我的桶策略中添加一些东西吗?这就是我困惑的地方。
我所经历的是,当一个新的对象被创建,我试图从我的AWS SDK PHP访问该对象时,我得到了一个“403”禁止。如果我在S3控制台中公开该对象,我就可以很好地访问它。因此,即使我为EC2设置了访问S3的权限,除非我将该对象公开,否则我无法访问它。
我甚至尝试通过终端对实际服务器上的对象使用wget
,但除非公开该对象,否则我仍然获得403
require '../aws-ses/aws-autoloader.php';
use Aws\S3\S3Client;
use Aws\S3\Exception\S3Exception;
$bucketName = 'myinbox';
try {
// Instantiate the client.
$s3 = new S3Client([
'version' => 'latest',
'region' => 'us-west-2',
'credentials' => array('key'=>'*********************',
'secret'=>'*******************************************')
]);
} catch (Exception $e) {
// We use a die, so if this fails. It stops here. Typically this is a REST call so this would
// return a json object.
die("Error: " . $e->getMessage());
}
// Use the high-level iterators (returns ALL of your objects).
$objects = $s3->getIterator('ListObjects', array('Bucket' => $bucketName));
首先,您是否设置了信任关系,以便EC2服务能够承担该角色?
接下来,不要将IAM角色与EC2实例直接关联;相反,您需要使用实例配置文件。是否设置了与该角色关联的实例配置文件?
本文档是一个良好的开端:https://docs.aws.amazon.com/codedeploy/latest/userguide/gett-start-create-iam-instance-profile.html
从AWS-EC2实例运行的AWS-SDK如何访问AWS-S3桶? 将AWS-EC2策略设置为可以访问S3存储桶而无需访问ID和密钥。 aws-cli工具能够从EC2实例访问S3桶,而不需要任何访问ID和密钥。 如果aws-cli工具能够在没有访问ID和密钥的情况下访问S3,那么AWS-SDK在从EC2实例运行时也必须有办法做到这一点。 如何做到这一点?
我已启动 EC2 - Windows 实例 创建了一个 S3 存储桶,创建了一个角色 S3 完整访问并分配给 EC2 实例。 从EC2实例浏览器中,我能够访问我的角色的元数据:http://169.254.169.254/latest/meta-data/iam/security-credentials/EC2-S3-access 如果我尝试从S3 bucket访问文件:https://s3.ap
我编写了一个非常简单的spring boot应用程序,并将其打包在Docker中。 docker文件的内容是: 我把它推到了docker hub。 我在aws上创建了一个新的EC2实例。然后我连接到它并键入以下命令: 最后一个命令在屏幕上给出了许多消息,表示spring boot应用程序正在运行。 看起来很棒。但是,当我打开浏览器并键入:http://ec2-54-86-87-68.compute
我正在运行一个AWS ECS服务,它正在运行一个具有多个容器的任务。任务在awsvpc网络模式下运行。(EC2,不是Fargate) 集装箱港口映射在ECS任务定义中。 PS:目标(公共IP)可以从远程PC访问。只是不是从港口来的。
我使用terraform创建了一个新的EC2实例来安装vertica,但无法在实例中访问Internet或pinggoogle.com。 我已使用私有子网设置了 ec2 实例,并使用公有子网设置了 nat 网关。 主路由表允许 0.0.0.0/0 作为目标,目标作为 nat 网关。另一个路由表将子网关联作为私有子网 10.103.2.0/24。互联网网关也连接到 VPC。 我的ec2实例安全组允许
我一直试图通过访问rest API[1]来监控实例。对于特定的访问密钥和秘密密钥,我在AWS S3上尝试了相同的凭据例如,它成功执行,但对于Amazon EC2,我得到了以下错误: 亚马逊3和AMzonEC2的SIgnature生成是不同的吗?我使用[2]来生成签名,据我所知,亚马逊s3和亚马逊ec2的签名生成没有重大变化。 这可能是什么原因?我们是否需要为Amazon EC2设置任何特定的权限?