Vam*_*rth 8 amazon-s3 terraform
我们目前使用 S3 作为后端来保存 tf 状态文件。执行时terraform plan
我们收到以下错误:
Error: Forbidden: Forbidden
status code: 403, request id: 18CB0EA827E6FE0F, host id: 8p0TMjzvooEBPNakoRsO3RtbARk01KY1KK3z93Lwyvh1Nx6sw4PpRyfoqNKyG2ryMNAHsdCJ39E=
Run Code Online (Sandbox Code Playgroud)
我们已启用调试模式,下面是我们注意到的错误消息。
2020-05-31T20:02:20.842+0400 [DEBUG] plugin.terraform-provider-aws_v2.64.0_x4: Accept-Encoding: gzip
2020-05-31T20:02:20.842+0400 [DEBUG] plugin.terraform-provider-aws_v2.64.0_x4:
2020-05-31T20:02:20.842+0400 [DEBUG] plugin.terraform-provider-aws_v2.64.0_x4:
2020-05-31T20:02:20.842+0400 [DEBUG] plugin.terraform-provider-aws_v2.64.0_x4: -----------------------------------------------------
2020/05/31 20:02:20 [ERROR] <root>: eval: *terraform.EvalRefresh, err: Forbidden: Forbidden
status code: 403, request id: 2AB56118732D7165, host id: 5sM6IwjkufaDg1bt5Swh5vcQD2hd3fSf9UqAtlL4hVzVaGPRQgvs1V8S3e/h3ta0gkRcGI7GvBM=
2020/05/31 20:02:20 [ERROR] <root>: eval: *terraform.EvalSequence, err: Forbidden: Forbidden
status code: 403, request id: 2AB56118732D7165, host id: 5sM6IwjkufaDg1bt5Swh5vcQD2hd3fSf9UqAtlL4hVzVaGPRQgvs1V8S3e/h3ta0gkRcGI7GvBM=
2020/05/31 20:02:20 [TRACE] [walkRefresh] Exiting eval tree: aws_s3_bucket_object.xxxxxx
2020/05/31 20:02:20 [TRACE] vertex "aws_s3_bucket_object.xxxxxx": visit complete
2020/05/31 20:02:20 [TRACE] vertex "aws_s3_bucket_object.xxxxxx: dynamic subgraph encountered errors
2020/05/31 20:02:20 [TRACE] vertex "aws_s3_bucket_object.xxxxxx": visit complete
Run Code Online (Sandbox Code Playgroud)
我们尝试将代码和 tfstate 文件恢复到工作版本并尝试过。另外,还删除了本地的 tfstate 文件。还是同样的错误。
s3存储桶策略如下:
{
"Sid": "DelegateS3Access",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::xxxxxx:role/Administrator"
},
"Action": [
"s3:ListBucket",
"s3:GetObject",
"s3:GetObjectTagging"
],
"Resource": [
"arn:aws:s3:::xxxxxx/*",
"arn:aws:s3:::xxxxxx"
]
}
Run Code Online (Sandbox Code Playgroud)
terraform 承担了相同的角色来执行,但仍然失败。我也清空了存储桶策略并尝试过,但没有看到任何成功。我知道这与存储桶策略本身有关,但不确定如何修复它。
非常感谢任何解决此问题的指示。
在运行 Terraform 之前,需要检查的一件事是您是谁(从 AWS API 的角度来看):
aws sts get-caller-identity
Run Code Online (Sandbox Code Playgroud)
如果输出如下所示,则您将被验证为 IAM 用户,该用户将无权访问该存储桶,因为它授予 IAM 角色而不是 IAM 用户的访问权限:
{
"UserId": "AIDASAMPLEUSERID",
"Account": "123456789012",
"Arn": "arn:aws:iam::123456789012:user/DevAdmin"
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,您需要配置 AWS CLI 以采用arn:aws:iam::xxxxxx:role/Administrator。
[profile administrator]
role_arn = arn:aws:iam::xxxxxx:role/Administrator
source_profile = user1
Run Code Online (Sandbox Code Playgroud)
在这里阅读有关该过程的更多信息:
https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-role.html
如果 get-caller-identity 返回类似以下内容,则您正在承担 IAM 角色,并且问题可能与存储桶策略中的操作有关:
{
"UserId": "AIDASAMPLEUSERID",
"Account": "123456789012",
"Arn": "arn:aws:iam::123456789012:assumed-role/Administrator/role-session-name"
}
Run Code Online (Sandbox Code Playgroud)
根据后端类型:S3文档,还需要s3:PutObject:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:ListBucket",
"Resource": "arn:aws:s3:::mybucket"
},
{
"Effect": "Allow",
"Action": ["s3:GetObject", "s3:PutObject"],
"Resource": "arn:aws:s3:::mybucket/path/to/my/key"
}
]
}
Run Code Online (Sandbox Code Playgroud)
虽然我不明白为什么计划需要 PutObject,但可以想象这就是导致此 Forbidden 错误的原因。
如果您已启用,您还可以在 CloudTrail 中查找被拒绝的 S3 操作。
归档时间: |
|
查看次数: |
25830 次 |
最近记录: |