78 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			78 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
# Guide - Setup HedgeDoc S3 image upload to Google Cloud Storage
 | 
						|
 | 
						|
HedgeDoc has no direct/native support for storing images in Google Cloud Storage Buckets. 
 | 
						|
However since Google provides interoperability with S3, the S3 integration can be used. 
 | 
						|
 | 
						|
This guide will help you in getting things setup.
 | 
						|
 | 
						|
## Setup the bucket
 | 
						|
 | 
						|
### Create a bucket in Google Cloud Storage
 | 
						|
 | 
						|
1. Create a new bucket [within the Cloud Storage portal](https://console.cloud.google.com/storage/browser).
 | 
						|
2. Give it a name, select the region and type of storage (e.g. multi dual-region)
 | 
						|
3. In "Choose how to control access to objects" disable "Enforce public access prevention on this bucket"
 | 
						|
 | 
						|
### Open the bucket to the public
 | 
						|
 | 
						|
In order to view the images uploaded to HedgeDoc the storage bucket needs to be set to public.
 | 
						|
 | 
						|
1. Click the bucket you just created in [the Cloud Storage portal](https://console.cloud.google.com/storage/browser).
 | 
						|
2. Go to the Permissions tab
 | 
						|
3. Scroll down to the Permissions section
 | 
						|
4. Click Grant Access
 | 
						|
5. Add `allusers` as principal
 | 
						|
6. Give it role `Storage Object Viewer` to allow it to retrieve the roles
 | 
						|
 | 
						|
### Setup interoperability & create Service Account
 | 
						|
 | 
						|
1. Go to the [interoperability tab](https://console.cloud.google.com/storage/settings;tab=interoperability) in the Google Cloud Console
 | 
						|
2. Scroll down to "Access keys for service accounts" and click on "Create a key for a service account"
 | 
						|
3. Select "Create new account"
 | 
						|
4. Give it a name, e.g. `hedgedoc`
 | 
						|
5. Select the `Storage Object Creator` role and select Add IAM Condition
 | 
						|
6. Give it a name, e.g. `Restrict to bucket`
 | 
						|
7. In Condition Builder:
 | 
						|
    1. Condition type: Name
 | 
						|
    2. Operator: Starts With
 | 
						|
    3. Value: `projects/_/buckets/YOUR_BUCKET_NAME_HERE`
 | 
						|
8. Skip the 3rd step (Grant users access to this service account)
 | 
						|
9. Click done
 | 
						|
10. Copy the Access Key and Secret to a text editor, we'll be using this later
 | 
						|
 | 
						|
### Add permissions
 | 
						|
 | 
						|
1. Go to [Roles](https://console.cloud.google.com/iam-admin/roles) within the IAM & Admin section in Google Cloud Console
 | 
						|
2. Click Create Role
 | 
						|
3. Give it a name (e.g. `Allow to view buckets`) and an id (e.g. `bucket-viewer`)
 | 
						|
4. Click Add Permissions
 | 
						|
5. In the filter (below the dropdown) type `storage.buckets.get`
 | 
						|
6. Check the box in front of the `storage.buckets.get` entry, click Add.
 | 
						|
7. Click Create
 | 
						|
 | 
						|
8. Go to [IAM & Admin](https://console.cloud.google.com/iam-admin/iam) section and go to the IAM page
 | 
						|
9. Find the user we created in the previous step and edit it
 | 
						|
10. Click "Add another role" and select the role we just created
 | 
						|
11. Select the role we just created and select Add IAM Condition
 | 
						|
12. Give it a name, e.g. `Restrict to bucket`
 | 
						|
13. In Condition Builder:
 | 
						|
    1. Condition type: Name
 | 
						|
    2. Operator: Starts With
 | 
						|
    3. Value: `projects/_/buckets/YOUR_BUCKET_NAME_HERE`
 | 
						|
14. Save it.
 | 
						|
 | 
						|
## Configure HedgeDoc
 | 
						|
 | 
						|
Set the following environment variables (or the [corresponding config.json values](/configuration/#amazon-s3)):
 | 
						|
 | 
						|
```env
 | 
						|
CMD_IMAGE_UPLOAD_TYPE="s3"
 | 
						|
CMD_S3_ENDPOINT="https://storage.googleapis.com"
 | 
						|
CMD_S3_ACCESS_KEY_ID="GOOG1EXXXXXXXXXX"
 | 
						|
CMD_S3_SECRET_ACCESS_KEY="XXXXXXXXXX"
 | 
						|
CMD_S3_BUCKET="your-bucket-name"
 | 
						|
```
 | 
						|
 | 
						|
The access key and secret key are the values you received when you enabled the interoperability feature.
 | 
						|
 | 
						|
After restarting HedgeDoc you should now be able to add images to your pages. |