Documentation added in aaf034b on Nov 17th 2016 says the S3 bucket can be specified with `s3.bucket`, but commit c8bcc4c (#285) on Dec 18th 2016 used `s3bucket`. Instead of fixing the code (#552) to match the documentation this commit changes just the documentation so that existing configurations are not broken. Also, the `s3` object is passed as is to `AWS.S3()`, which does not know the option `bucket` (but silently ignores it in my test). http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#constructor-property Following the old documentation leads to this exception: 2017-09-23T09:42:38.079Z - error: MissingRequiredParameter: Missing required key 'Bucket' in params at ParamValidator.fail (/srv/hackmd/hackmd/node_modules/aws-sdk/lib/param_validator.js:50:37) at ParamValidator.validateStructure (/srv/hackmd/hackmd/node_modules/aws-sdk/lib/param_validator.js:61:14) at ParamValidator.validateMember (/srv/hackmd/hackmd/node_modules/aws-sdk/lib/param_validator.js:88:21) at ParamValidator.validate (/srv/hackmd/hackmd/node_modules/aws-sdk/lib/param_validator.js:34:10) at Request.VALIDATE_PARAMETERS (/srv/hackmd/hackmd/node_modules/aws-sdk/lib/event_listeners.js:125:42) at Request.callListeners (/srv/hackmd/hackmd/node_modules/aws-sdk/lib/sequential_executor.js:105:20) at callNextListener (/srv/hackmd/hackmd/node_modules/aws-sdk/lib/sequential_executor.js:95:12) at /srv/hackmd/hackmd/node_modules/aws-sdk/lib/event_listeners.js:85:9 at finish (/srv/hackmd/hackmd/node_modules/aws-sdk/lib/config.js:315:7) at /srv/hackmd/hackmd/node_modules/aws-sdk/lib/config.js:333:9 at Credentials.get (/srv/hackmd/hackmd/node_modules/aws-sdk/lib/credentials.js:126:7) at getAsyncCredentials (/srv/hackmd/hackmd/node_modules/aws-sdk/lib/config.js:327:24) at Config.getCredentials (/srv/hackmd/hackmd/node_modules/aws-sdk/lib/config.js:347:9) at Request.VALIDATE_CREDENTIALS (/srv/hackmd/hackmd/node_modules/aws-sdk/lib/event_listeners.js:80:26) at Request.callListeners (/srv/hackmd/hackmd/node_modules/aws-sdk/lib/sequential_executor.js:101:18) at Request.emit (/srv/hackmd/hackmd/node_modules/aws-sdk/lib/sequential_executor.js:77:10)
		
			
				
	
	
		
			82 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			82 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
# Guide - Setup HackMD S3 image upload
 | 
						|
 | 
						|
1. Go to [AWS S3 console](https://console.aws.amazon.com/s3/home) and create a new bucket.
 | 
						|
 | 
						|
    
 | 
						|
 | 
						|
2. Click on bucket, select **Properties**  on the side panel, and find **Permission** section. Click **Edit bucket policy**.
 | 
						|
 | 
						|
    
 | 
						|
 | 
						|
3. Enter the following policy, replace `bucket_name` with your bucket name:
 | 
						|
 | 
						|
    
 | 
						|
 | 
						|
    ```json
 | 
						|
    {
 | 
						|
        "Version": "2012-10-17",
 | 
						|
        "Statement": [
 | 
						|
            {
 | 
						|
                "Effect": "Allow",
 | 
						|
                "Principal": "*",
 | 
						|
                "Action": "s3:GetObject",
 | 
						|
                "Resource": "arn:aws:s3:::bucket_name/uploads/*"
 | 
						|
            }
 | 
						|
        ]
 | 
						|
    }
 | 
						|
    ```
 | 
						|
 | 
						|
4. Go to IAM console and create a new IAM user. Remember your user credentials(`key`/`access token`)
 | 
						|
 | 
						|
5. Enter user page, select **Permission** tab, look at **Inline Policies** section, and click **Create User Policy**
 | 
						|
 | 
						|
    
 | 
						|
 | 
						|
6. Select **Custom Policy**
 | 
						|
 | 
						|
    
 | 
						|
 | 
						|
7. Enter the following policy, replace `bucket_name` with your bucket name:
 | 
						|
 | 
						|
    
 | 
						|
 | 
						|
    ```json
 | 
						|
    {
 | 
						|
        "Version": "2012-10-17",
 | 
						|
        "Statement": [
 | 
						|
            {
 | 
						|
                "Effect": "Allow",
 | 
						|
                "Action": [
 | 
						|
                    "s3:*"
 | 
						|
                ],
 | 
						|
                "Resource": [
 | 
						|
                    "arn:aws:s3:::bucket_name/uploads/*"
 | 
						|
                ]
 | 
						|
            }
 | 
						|
        ]
 | 
						|
    }
 | 
						|
    ```
 | 
						|
 | 
						|
8. Edit `config.json` and set following keys:
 | 
						|
 | 
						|
    ```javascript
 | 
						|
    {
 | 
						|
        "production": {
 | 
						|
            ...
 | 
						|
            "imageUploadType": "s3",
 | 
						|
            "s3": {
 | 
						|
                "accessKeyId": "YOUR_S3_ACCESS_KEY_ID",
 | 
						|
                "secretAccessKey": "YOUR_S3_ACCESS_KEY",
 | 
						|
                "region": "YOUR_S3_REGION" // example: ap-northeast-1
 | 
						|
            },
 | 
						|
            "s3bucket": "YOUR_S3_BUCKET_NAME"
 | 
						|
        }
 | 
						|
    }
 | 
						|
    ```
 | 
						|
 | 
						|
9. In additional to edit `config.json` directly, you could also try [environment variable](https://github.com/hackmdio/hackmd#environment-variables-will-overwrite-other-server-configs).
 | 
						|
 | 
						|
## Related Tools
 | 
						|
 | 
						|
* [AWS Policy Generator](http://awspolicygen.s3.amazonaws.com/policygen.html)
 |