使用KMS将Gitlab备份到S3

时间:2018-08-03 11:51:23

标签: amazon-s3 gitlab aws-kms

我正在尝试将KMS加密添加到S3中的Gitlab备份中。我知道可以为此使用S3托管密钥,但是可以选择使用KMS吗?

gitlab_rails['backup_upload_connection'] = {
'provider' => 'AWS',
'region' => 'eu-west-1',
'aws_access_key_id' => 'AKIAKIAKI',
'aws_secret_access_key' => 'secret123'
# If using an IAM Profile, don't configure aws_access_key_id & 
aws_secret_access_key
# 'use_iam_profile' => true
}
gitlab_rails['backup_upload_remote_directory'] = 'my.s3.bucket'

如果我添加gitlab_rails['backup_encryption'] = 'AES256',它将使用S3托管密钥。我一直未能在官方文档中找到有关此信息。

如果不可能的话,有其他解决方案,但是如果可以在这里处理,将会很方便。

2 个答案:

答案 0 :(得分:1)

CAVEAT::已通过Omnibus GitLab 12.3和Amazon Linux 2进行了验证。否则,未经修改可能无法正常工作。

从GitLab 12.3开始,不支持AWS KMS进行备份上传。

对于AWS KMS,您需要使用以下脚本(以root或sudo身份运行)运行while后上传备份:

gitlab-backup create

如果您愿意,也可以直接使用KMS密钥ID。

确保您的实例IAM角色具有:

  • s3:PutObject 到存储备份的存储桶路径
  • kms:GenerateDataKey 到用于加密备份的KMS密钥的ARN
  • 如果要像我一样使用KMS密钥别名,请
  • kms:ListAliases 到KMS密钥的ARN(不是别名!)(KMS密钥别名与IAM交互异常,因此YMMV)

如果希望实例能够从S3运行自动还原,请包括以下内容:  -从存储备份的存储桶路径中 s3:GetObject  - kms:解密到用于加密备份的KMS密钥的ARN

替代:SSE-C

如果要改用SSE-C,则可以。

下面是从运行在EC2上的GitLab将SSE-C备份到S3的示例:

aws s3 cp $(find /var/opt/gitlab/backups -type f -name '*_gitlab_backup.tar' |
            sort -r | head -n1) "s3://{YOUR_BACKUP_BUCKET_NAME}/" \
  --sse aws:kms --sse-kms-key-id 'alias/your-cmk-alias'

答案 1 :(得分:0)

ssekms_key_id可用于在上传对象时指定KMS密钥。 官方document在这里,可能会帮助您解决任何其他要求。