Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 使用Terraform的S3跨区域复制_Amazon Web Services_Amazon S3_Encryption_Terraform_Replication - Fatal编程技术网

Amazon web services 使用Terraform的S3跨区域复制

Amazon web services 使用Terraform的S3跨区域复制,amazon-web-services,amazon-s3,encryption,terraform,replication,Amazon Web Services,Amazon S3,Encryption,Terraform,Replication,我使用Terraform设置S3存储桶(不同的区域)并在它们之间设置复制 在我添加KMS之前,它一直工作正常 我创建了两个KMS密钥,一个用于源,一个用于目标 现在,在应用复制配置时,有一个选项可以为目标存储桶传递目标密钥,但我不确定如何在源位置应用密钥 任何帮助都将不胜感激 提供程序“aws”{ 别名=“东” region=“us-east-1” } 资源“aws\U s3\U存储桶”“目标存储桶”{ bucket=”“目的地bucket” provider=“aws.east” acl=“

我使用Terraform设置S3存储桶(不同的区域)并在它们之间设置复制

在我添加KMS之前,它一直工作正常

我创建了两个KMS密钥,一个用于源,一个用于目标

现在,在应用复制配置时,有一个选项可以为目标存储桶传递目标密钥,但我不确定如何在源位置应用密钥

任何帮助都将不胜感激

提供程序“aws”{
别名=“东”
region=“us-east-1”
}
资源“aws\U s3\U存储桶”“目标存储桶”{
bucket=”“目的地bucket”
provider=“aws.east”
acl=“私有”
region=“us-east-1”
版本控制{
启用=真
}
服务器端加密配置{
统治{
默认情况下应用服务器端加密{
kms_主密钥_id=“${var.kms_cmk_dest_arn}”
sse_算法=“aws:kms”
}
}
}
}
资源“aws\U s3\U存储桶”“源存储桶”{
bucket=“源bucket”
acl=“私有”
版本控制{
启用=真
}
服务器端加密配置{
统治{
默认情况下应用服务器端加密{
kms_master_key_id=“${var.kms_cmk_arn}”
sse_算法=“aws:kms”
}
}
}
复制配置{
role=“${aws\u iam\u role.replication.arn}”
规则{
status=“已启用”
目的地{
bucket=“${aws\u s3\u bucket.source bucket.arn}”
存储\u class=“标准”
replica_kms_key_id=“${var.kms_cmk_dest_arn}”
}
来源\选择\标准{
sse_kms_加密_对象{
启用=真
}
}
}
}
}
资源“aws\u iam\u角色”“复制”{
name=“cdd iam角色复制”
权限\u boundary=“arn:aws:iam::${var.account\u id}:policy/ServiceRoleBoundary”

假设_role_policy=如果您使用客户管理的密钥(CMK)进行S3加密,您需要额外的配置。 AWS S3文档提到CMK所有者必须授予源bucket所有者使用CMK的权限

另外,这是一篇总结S3跨区域复制配置的好文章:


如果我理解正确,您在同一个帐户的两个不同区域拥有两个S3存储桶

我过去这样做的一种方法是首先对两个区域规划/应用KMS键

然后在一个单独的计划/应用中,我使用了Terraform的数据源:

data "aws_kms_key" "source_credentials_encryption_key" {
  key_id = "alias/source-encryption-key"
}
    
data "aws_kms_key" "destination_credentials_encryption_key" {
  provider = aws.usEast
  key_id   = "alias/destination-encryption-key"
}
并将数据源用于复制配置,如下所示:

replication_configuration {
  role = aws_iam_role.replication_role.arn
  
  rules {
    status = "Enabled"
    
    destination {
      bucket = aws_s3_bucket.source_bucket.arn
      storage_class = "STANDARD"
      replicate_kms_key_id = data.aws_kms_key.destination_bucket_encryption_key.arn
    }
    
    source_selection_criteria {
      sse_kms_encrypted_objects {
        enabled = true
      }
    }
  }
}

您能否编辑您的问题以将您的Terraform代码作为共享,并显示您从该设置中获得的任何错误,或者清楚地解释为什么它不执行您希望它执行的操作,请?@ydaetskcoR实际上我正在更新该问题。在代码中,不确定在源存储桶的何处提供kms_密钥id。这不是一个完整的示例。您有机会d编辑你的问题,提供一些最低限度的完整信息,人们可以使用这些信息更好地理解你的问题?Hi@ydaetskcoR更新完整的示例Hi the petrolhead,是的,我看到了这两篇文章。因为我在同一个帐户中有两个存储桶,我使用同一个用户创建这些资源S3和CMK,我不认为它与所有者有关。我想我已经看到了在源代码处我的帐户中有多个CMK,这对于terraform在它们之间进行选择变得非常混乱。因为我们在复制配置中没有提到它。