【发布时间】:2018-10-12 09:59:23
【问题描述】:
正如标题所示,这是我设法找到的一个非常具体的错误。我们有一个帐户来保存所有计费数据,然后将其作为每小时报告存储到 S3 存储桶中。
然而,我们有另一个账户,该账户有一个 EC2 实例,我们想为其授予 GetObject 对我们的计费存储桶的权限。但是我无法这样做,是因为 AWS CloudWatch 在将报告上传到 S3 时没有将 acl 设置为 bucket-owner-full-control 吗?我不知道为什么会这样。
fatal error: An error occurred (403) when calling the HeadObject operation: Forbidden
这是错误,因为我尝试使用我的 EC2 实例的 AWS-CLI 从计费存储桶中复制 hourly-Manifest.json 对象。
权限从 billing-account 设置如下,其中 Principal 是第二个帐户根。
{
"Sid": "ClaudiaReadOnly",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::xxxxxxxxxxxx:root"
},
"Action": [
"s3:Get*",
"s3:List*"
],
"Resource": [
"arn:aws:s3:::billing-bucket",
"arn:aws:s3:::billing-bucket/billing/*"
]
}
第二个账户使用 CloudFormation 模板向 EC2 实例授予权限,同样具有相同的 Get* 和 List* 权限。
如果我们直接从控制台为第二个账户设置单个对象的读取权限,我们可以使用 EC2 实例的 AWS-CLI 复制它。但是对于每个其他对象,我们都会得到相同的 403 错误。
调试此问题非常令人沮丧,我希望 AWS 能提供有关此问题的更好信息...
【问题讨论】:
-
您是否尝试过从其他账户创建跨账户角色到您的计费账户,然后将其附加到您的 EC2 实例。使用类似docs.aws.amazon.com/IAM/latest/UserGuide/…
-
您可能还需要
s3:GetBucketLocation和s3:ListBucket进行跨账户访问。 -
@NickBrown 这就是我明天要尝试的。但是,这意味着如果我在计费帐户中创建配置文件,我将无法再在 CloudFormation 模板中创建配置文件。
-
@SudharsanSivasankaran Get* 和 List* 应该包括这些操作,对吗?我们将存储桶本身和文件路径都指定为资源。
-
您能发布您的保单吗?
标签: amazon-web-services amazon-s3