Setting up private Github access with AWS Elastic Beanstalk and Ruby container

前端 未结 5 1836
北恋
北恋 2020-12-13 04:47

Going by a recent tutorial on setting up AWS Elastic Beanstalk for Ruby deployment using Git, I just set up a Elastic Beanstalk environment from my CI server. However, the a

5条回答
  •  我在风中等你
    2020-12-13 05:10

    After a good day of effort, I finally enabled use of my organization's private GitHub repos with Elastic Beanstalk by just using a .config file. I am using Python and pip, but it should also work for other package installers on EB.

    rhetonik's ssh-agent+ssh-add approach did not work for me at all, so I elected to set up an ssh configuration file instead.

    Here is my .ebextensions/3-pip-install-from-github.config file:

    files:
        "/root/.ssh/config":
            owner: root
            group: root
            mode: "000600"
            content: |
                Host github.com
                    User git
                    Hostname github.com
                    IdentityFile /root/.ssh/github
    
    commands:
        01-command:
            command: sudo ssh-keyscan -H github.com >> /root/.ssh/known_hosts
        02-command:
            command: sudo chmod 644 /root/.ssh/known_hosts
        03-command:
            command: sudo aws s3 cp s3://bucket-with-your-github-ssh-key/github /root/.ssh
        04-command:
            command: sudo chmod 600 /root/.ssh/github
    

    Rough instructions:

    • Set up an S3 bucket accessible by your EB instance. Inside of that bucket, store the SSH key allowing access to the GitHub repository you want to access via pip, npm, bundle, etc. Use sudo aws s3 cp to copy that key onto your EB instance on deploy. sudo is necessary because EB scripts use root and not ec2-user.

    • This ebextensions config file also creates 2 files on your EB instance. /root/.ssh/config tells ssh (invoked by pip and git) to use the key you copied from S3. Storing the output of ssh-keyscan -H github.com into /root/.ssh/known_hosts will pre-verify that ssh on your EB instance is actually communicating with GitHub to avoid MITM attacks. This is better than disabling StrictHostKeyChecking in /root/.ssh/config.

    Here is my requirements.txt file for pip:

    Beaker==1.7.0
    Flask==0.10.1
    Jinja2==2.7.3
    MarkupSafe==0.23
    # [...]
    git+ssh://git@github.com/myorganization/myprivaterepo.git@0.0.142
    

    While running eb-deploy, you can tail -f /var/log/eb-activity.log to make sure everything runs smoothly.

提交回复
热议问题