使用 KMS 备份 Gitlab 到 S3

Use KMS for backing up Gitlab to S3

我正在尝试将 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 管理的密钥。我一直无法在官方文档中找到有关此的任何信息。

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

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

注意事项: 使用 Omnibus GitLab 12.3 和 Amazon Linux 进行验证 Linux 2。如果不进行修改,它可能无法工作。

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

对于 AWS KMS,您需要在 运行ning gitlab-backup create 之后使用如下脚本(运行 作为 root 或使用 sudo)上传备份:

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'

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

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

  • s3:PutObject 到存储备份的存储桶路径
  • kms:GenerateDataKey 到您用于加密备份的 KMS 密钥的 ARN
  • kms:ListAliases 到 KMS 密钥的 ARN(不是它的别名!)如果你想像我一样使用 KMS 密钥别名(KMS 密钥别名与IAM,所以 YMMV)

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

备选方案:SSE-C

如果您想改用 SSE-C,也可以。

这是一个在 EC2 上从 GitLab 运行ning 将 SSE-C 备份到 S3 的示例:

gitlab_rails['backup_upload_connection'] = {
  'provider' => 'AWS',
  'region' => 'ca-central-1',
  'use_iam_profile' => true
}
gitlab_rails['backup_upload_encryption'] = 'AES256'
gitlab_rails['backup_upload_encryption_key'] = '{YOUR_SSE_C_KEY_BASE64_ENCODED}'
gitlab_rails['backup_upload_remote_directory'] = '{YOUR_BACKUP_BUCKET_NAME}'