桶复制使用规则将一个MinIO部署上桶的内容同步到远程MinIO部署上的桶。
可以通过以下任一方式进行复制:
Active-Passive 符合条件的对象从源存储桶复制到远程存储桶。 远程存储桶上的任何更改不会回复制到源存储桶。
Active-Active 在符合条件的对象上进行的更改会双向复制到另一个存储桶。
Multi-Site Active-Active 在任何启用了存储桶复制的存储桶上对符合条件的对象进行的更改都会复制到其他所有存储桶。
在设置任何这些复制配置之前,请确保您满足以下先决条件。
设置桶复制所需的权限
对于配置和启用复制规则,源部署和目标部署需要特定的权限。
以下策略提供了在部署上配置和启用复制的权限。
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"admin:SetBucketTarget",
"admin:GetBucketTarget"
],
"Effect": "Allow",
"Sid": "EnableRemoteBucketConfiguration"
},
{
"Effect": "Allow",
"Action": [
"s3:GetReplicationConfiguration",
"s3:ListBucket",
"s3:ListBucketMultipartUploads",
"s3:GetBucketLocation",
"s3:GetBucketVersioning",
"s3:GetObjectRetention",
"s3:GetObjectLegalHold",
"s3:PutReplicationConfiguration"
],
"Resource": [
"arn:aws:s3:::*"
],
"Sid": "EnableReplicationRuleConfiguration"
}
]
}
EnableRemoteBucketConfiguration
语句授予创建支持复制的远程目标的权限。EnableReplicationRuleConfiguration
语句授予在存储桶上创建复制规则的权限。arn:aws:s3:::*
资源将复制权限应用于源部署中的 任何 存储桶。 根据需要,您可以将用户策略限制为特定的存储桶。
下面的代码创建一个由 MinIO管理的用户,并赋予所需的策略。请用您正在配置复制的MinIO部署的 别名替换 TARGET
:
wget -O - https://minio.org.cn/docs/minio/linux/examples/ReplicationAdminPolicy.json | \
mc admin policy create TARGET ReplicationAdminPolicy /dev/stdin
mc admin user add TARGET ReplicationAdmin LongRandomSecretKey
mc admin policy attach TARGET ReplicationAdminPolicy --user=ReplicationAdmin
配置了 Active Directory/LDAP 或 OpenID Connect 用户管理的MinIO部署应该为存储桶复制创建专用的 访问密钥,而不是使用受身份提供者管理的服务账号。
下面的策略授予权限,用于启用将复制的数据 同步 到MinIO部署中。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:GetReplicationConfiguration",
"s3:ListBucket",
"s3:ListBucketMultipartUploads",
"s3:GetBucketLocation",
"s3:GetBucketVersioning",
"s3:GetBucketObjectLockConfiguration",
"s3:GetEncryptionConfiguration"
],
"Resource": [
"arn:aws:s3:::*"
],
"Sid": "EnableReplicationOnBucket"
},
{
"Effect": "Allow",
"Action": [
"s3:GetReplicationConfiguration",
"s3:ReplicateTags",
"s3:AbortMultipartUpload",
"s3:GetObject",
"s3:GetObjectVersion",
"s3:GetObjectVersionTagging",
"s3:PutObject",
"s3:PutObjectRetention",
"s3:PutBucketObjectLockConfiguration",
"s3:PutObjectLegalHold",
"s3:DeleteObject",
"s3:ReplicateObject",
"s3:ReplicateDelete"
],
"Resource": [
"arn:aws:s3:::*"
],
"Sid": "EnableReplicatingDataIntoBucket"
}
]
}
语句授予远程目标权限,以检索存储桶级配置,以支持MinIO部署中 所有 存储桶的复制操作。 要将策略限制为特定存储桶,请将这些存储桶指定为
资源
数组中的一个元素,类似于arn:aws:s3:::bucketName
。EnableReplicatingDataIntoBucket
语句授予远程目标权限,将数据同步到MinIO部署中的 任何 存储桶。 要将策略限制为特定存储桶,请将这些存储桶指定为资源
数组中的一个元素,类似于arn:aws:s3:::bucketName/*
。
下面的代码创建一个 MinIO-managed user,并附带必要的策略。
请使用MinIO部署的 别名 替换 TARGET
,以配置复制:
wget -O - https://minio.org.cn/docs/minio/linux/examples/ReplicationRemoteUserPolicy.json | \
mc admin policy create TARGET ReplicationRemoteUserPolicy /dev/stdin
mc admin user add TARGET ReplicationRemoteUser LongRandomSecretKey
mc admin policy attach TARGET ReplicationRemoteUserPolicy --user=ReplicationRemoteUser
为了进行存储桶复制,配置了 Active Directory/LDAP 或 OpenID Connect 用户管理的MinIO部署应该创建一个专门的 access keys。
请参考和阅读 mc admin user
,mc admin user svcacct
和 mc admin policy
,以获取有关将用户、访问密钥和策略添加到MinIO部署的更完整文档。
匹配存储桶复制的对象加密设置
MinIO支持复制使用 SSE-KMS 和 SSE-S3 加密的对象:
对于使用 SSE-KMS 加密的对象,MinIO 要求 目标存储桶支持使用用于加密源存储桶上的对象的 相同密钥名称 对对象进行 SSE-KMS 加密。
对于使用 SSE-S3 加密的对象,MinIO 要求 目标存储桶也支持对象的 SSE-S3 加密,无论密钥名称如何。
作为复制过程的一部分,MinIO会在源存储桶上对对象进行 解密,并通过网络传输未加密的对象。 然后,目标 MinIO 实例会使用目标加密设置重新对对象进行加密。 因此,MinIO 强烈建议 在源部署和目标部署上 启用 TLS,以确保对象在传输过程中的安全性。
MinIO 不支持 复制客户端加密的对象(SSE-C)。
存储桶复制需要 MinIO 部署
MinIO 服务器端复制仅在 MinIO 部署之间起作用。 源部署和目标部署都 必须 运行匹配版本的 MinIO 服务器。
要在任意 S3 兼容服务之间配置复制,请使用 mc mirror
。
复制需要版本控制
MinIO 依赖于 版本控制 提供的不可变性保护来支持复制和重新同步。
使用 mc version info
命令来验证源桶和远程桶的版本状态。
必要时使用 mc version enable
命令启用版本控制。
如果您在源存储桶中排除了某个前缀或文件夹的版本控制,那么 MinIO 就无法复制该文件夹或前缀下的对象。
将对象锁定状态与存储桶复制相匹配
MinIO 支持复制 WORM 锁定 下的对象。 为了使 MinIO 复制锁定对象,两个复制桶都 必须 启用对象锁。 对于主-主配置,MinIO 建议在两个桶上使用 相同的 保留规则,以确保站点之间的行为一致。
根据 S3 的行为,必须在桶创建期间启用对象锁定。 随后可以随时配置对象保留规则。 在开始此过程 之前,请先在不健康的目标存储桶上配置必要的规则。