{"action":"closed","number":730,"pull_request":{"url":"https://api.github.com/repos/sequenceiq/cloudbreak/pulls/730","id":37915684,"html_url":"https://github.com/sequenceiq/cloudbreak/pull/730","diff_url":"https://github.com/sequenceiq/cloudbreak/pull/730.diff","patch_url":"https://github.com/sequenceiq/cloudbreak/pull/730.patch","issue_url":"https://api.github.com/repos/sequenceiq/cloudbreak/issues/730","number":730,"state":"closed","locked":false,"title":"TLS security between Cloudbreak and the provisioned cluster's gateway","user":{"login":"martonsereg","id":1568469,"avatar_url":"https://avatars.githubusercontent.com/u/1568469?v=3","gravatar_id":"","url":"https://api.github.com/users/martonsereg","html_url":"https://github.com/martonsereg","followers_url":"https://api.github.com/users/martonsereg/followers","following_url":"https://api.github.com/users/martonsereg/following{/other_user}","gists_url":"https://api.github.com/users/martonsereg/gists{/gist_id}","starred_url":"https://api.github.com/users/martonsereg/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/martonsereg/subscriptions","organizations_url":"https://api.github.com/users/martonsereg/orgs","repos_url":"https://api.github.com/users/martonsereg/repos","events_url":"https://api.github.com/users/martonsereg/events{/privacy}","received_events_url":"https://api.github.com/users/martonsereg/received_events","type":"User","site_admin":false},"body":"@biharitomi @akanto \r\n- TLS security is 2-way: a client side certificate is needed for Cloudbreak and server side certificates are needed for the provisioned clusters\r\n- The client side certificate's location can be set in an environment variable, it will be generated by cbd\r\n- The server side certificates are generated on the gateway nodes and retrieved by Cloudbreak through temporary SSH (will be removed later if the console output can be retrieved from Azure, or when a workaround is implemented)\r\n- The client side certificate is also transferred via temporary SSH to the gateway node\r\n- The SSH fingerprint is validated through calls to the cloud provider\r\n- The temporary SSH key is written in the authorized keys in the user-data script and removed immediately after the TLS setup is done\r\n- Certificate files are stored in the CB_CERT_DIR directory (can be changed through an env variable), and also saved to the database\r\n- No ports are shut in this PR, they are still opened to the world in the security groups\r\n- Updated consul-client to be able to handle TLS\r\n\r\n\r\n","created_at":"2015-06-17T15:46:53Z","updated_at":"2015-06-19T10:49:18Z","closed_at":"2015-06-19T10:49:18Z","merged_at":"2015-06-19T10:49:18Z","merge_commit_sha":"8952e4690f2c00646e02eb1d75e4a7e3f250f058","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/sequenceiq/cloudbreak/pulls/730/commits","review_comments_url":"https://api.github.com/repos/sequenceiq/cloudbreak/pulls/730/comments","review_comment_url":"https://api.github.com/repos/sequenceiq/cloudbreak/pulls/comments{/number}","comments_url":"https://api.github.com/repos/sequenceiq/cloudbreak/issues/730/comments","statuses_url":"https://api.github.com/repos/sequenceiq/cloudbreak/statuses/789b755172797abb6f3ec7ead7a90817cdaf312c","head":{"label":"sequenceiq:tls","ref":"tls","sha":"789b755172797abb6f3ec7ead7a90817cdaf312c","user":{"login":"sequenceiq","id":6003133,"avatar_url":"https://avatars.githubusercontent.com/u/6003133?v=3","gravatar_id":"","url":"https://api.github.com/users/sequenceiq","html_url":"https://github.com/sequenceiq","followers_url":"https://api.github.com/users/sequenceiq/followers","following_url":"https://api.github.com/users/sequenceiq/following{/other_user}","gists_url":"https://api.github.com/users/sequenceiq/gists{/gist_id}","starred_url":"https://api.github.com/users/sequenceiq/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sequenceiq/subscriptions","organizations_url":"https://api.github.com/users/sequenceiq/orgs","repos_url":"https://api.github.com/users/sequenceiq/repos","events_url":"https://api.github.com/users/sequenceiq/events{/privacy}","received_events_url":"https://api.github.com/users/sequenceiq/received_events","type":"Organization","site_admin":false},"repo":{"id":19638422,"name":"cloudbreak","full_name":"sequenceiq/cloudbreak","owner":{"login":"sequenceiq","id":6003133,"avatar_url":"https://avatars.githubusercontent.com/u/6003133?v=3","gravatar_id":"","url":"https://api.github.com/users/sequenceiq","html_url":"https://github.com/sequenceiq","followers_url":"https://api.github.com/users/sequenceiq/followers","following_url":"https://api.github.com/users/sequenceiq/following{/other_user}","gists_url":"https://api.github.com/users/sequenceiq/gists{/gist_id}","starred_url":"https://api.github.com/users/sequenceiq/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sequenceiq/subscriptions","organizations_url":"https://api.github.com/users/sequenceiq/orgs","repos_url":"https://api.github.com/users/sequenceiq/repos","events_url":"https://api.github.com/users/sequenceiq/events{/privacy}","received_events_url":"https://api.github.com/users/sequenceiq/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/sequenceiq/cloudbreak","description":"Cloudbreak is a cloud agnostic Hadoop as a Service API.","fork":false,"url":"https://api.github.com/repos/sequenceiq/cloudbreak","forks_url":"https://api.github.com/repos/sequenceiq/cloudbreak/forks","keys_url":"https://api.github.com/repos/sequenceiq/cloudbreak/keys{/key_id}","collaborators_url":"https://api.github.com/repos/sequenceiq/cloudbreak/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/sequenceiq/cloudbreak/teams","hooks_url":"https://api.github.com/repos/sequenceiq/cloudbreak/hooks","issue_events_url":"https://api.github.com/repos/sequenceiq/cloudbreak/issues/events{/number}","events_url":"https://api.github.com/repos/sequenceiq/cloudbreak/events","assignees_url":"https://api.github.com/repos/sequenceiq/cloudbreak/assignees{/user}","branches_url":"https://api.github.com/repos/sequenceiq/cloudbreak/branches{/branch}","tags_url":"https://api.github.com/repos/sequenceiq/cloudbreak/tags","blobs_url":"https://api.github.com/repos/sequenceiq/cloudbreak/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/sequenceiq/cloudbreak/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/sequenceiq/cloudbreak/git/refs{/sha}","trees_url":"https://api.github.com/repos/sequenceiq/cloudbreak/git/trees{/sha}","statuses_url":"https://api.github.com/repos/sequenceiq/cloudbreak/statuses/{sha}","languages_url":"https://api.github.com/repos/sequenceiq/cloudbreak/languages","stargazers_url":"https://api.github.com/repos/sequenceiq/cloudbreak/stargazers","contributors_url":"https://api.github.com/repos/sequenceiq/cloudbreak/contributors","subscribers_url":"https://api.github.com/repos/sequenceiq/cloudbreak/subscribers","subscription_url":"https://api.github.com/repos/sequenceiq/cloudbreak/subscription","commits_url":"https://api.github.com/repos/sequenceiq/cloudbreak/commits{/sha}","git_commits_url":"https://api.github.com/repos/sequenceiq/cloudbreak/git/commits{/sha}","comments_url":"https://api.github.com/repos/sequenceiq/cloudbreak/comments{/number}","issue_comment_url":"https://api.github.com/repos/sequenceiq/cloudbreak/issues/comments{/number}","contents_url":"https://api.github.com/repos/sequenceiq/cloudbreak/contents/{+path}","compare_url":"https://api.github.com/repos/sequenceiq/cloudbreak/compare/{base}...{head}","merges_url":"https://api.github.com/repos/sequenceiq/cloudbreak/merges","archive_url":"https://api.github.com/repos/sequenceiq/cloudbreak/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/sequenceiq/cloudbreak/downloads","issues_url":"https://api.github.com/repos/sequenceiq/cloudbreak/issues{/number}","pulls_url":"https://api.github.com/repos/sequenceiq/cloudbreak/pulls{/number}","milestones_url":"https://api.github.com/repos/sequenceiq/cloudbreak/milestones{/number}","notifications_url":"https://api.github.com/repos/sequenceiq/cloudbreak/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/sequenceiq/cloudbreak/labels{/name}","releases_url":"https://api.github.com/repos/sequenceiq/cloudbreak/releases{/id}","created_at":"2014-05-10T10:03:07Z","updated_at":"2015-06-16T20:09:22Z","pushed_at":"2015-06-19T10:49:18Z","git_url":"git://github.com/sequenceiq/cloudbreak.git","ssh_url":"git@github.com:sequenceiq/cloudbreak.git","clone_url":"https://github.com/sequenceiq/cloudbreak.git","svn_url":"https://github.com/sequenceiq/cloudbreak","homepage":"https://cloudbreak.sequenceiq.com/","size":20152,"stargazers_count":91,"watchers_count":91,"language":"Java","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":14,"mirror_url":null,"open_issues_count":12,"forks":14,"open_issues":12,"watchers":91,"default_branch":"master"}},"base":{"label":"sequenceiq:master","ref":"master","sha":"b6a94304ce5e02219cc6f84a110cac3c41bdbc14","user":{"login":"sequenceiq","id":6003133,"avatar_url":"https://avatars.githubusercontent.com/u/6003133?v=3","gravatar_id":"","url":"https://api.github.com/users/sequenceiq","html_url":"https://github.com/sequenceiq","followers_url":"https://api.github.com/users/sequenceiq/followers","following_url":"https://api.github.com/users/sequenceiq/following{/other_user}","gists_url":"https://api.github.com/users/sequenceiq/gists{/gist_id}","starred_url":"https://api.github.com/users/sequenceiq/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sequenceiq/subscriptions","organizations_url":"https://api.github.com/users/sequenceiq/orgs","repos_url":"https://api.github.com/users/sequenceiq/repos","events_url":"https://api.github.com/users/sequenceiq/events{/privacy}","received_events_url":"https://api.github.com/users/sequenceiq/received_events","type":"Organization","site_admin":false},"repo":{"id":19638422,"name":"cloudbreak","full_name":"sequenceiq/cloudbreak","owner":{"login":"sequenceiq","id":6003133,"avatar_url":"https://avatars.githubusercontent.com/u/6003133?v=3","gravatar_id":"","url":"https://api.github.com/users/sequenceiq","html_url":"https://github.com/sequenceiq","followers_url":"https://api.github.com/users/sequenceiq/followers","following_url":"https://api.github.com/users/sequenceiq/following{/other_user}","gists_url":"https://api.github.com/users/sequenceiq/gists{/gist_id}","starred_url":"https://api.github.com/users/sequenceiq/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sequenceiq/subscriptions","organizations_url":"https://api.github.com/users/sequenceiq/orgs","repos_url":"https://api.github.com/users/sequenceiq/repos","events_url":"https://api.github.com/users/sequenceiq/events{/privacy}","received_events_url":"https://api.github.com/users/sequenceiq/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/sequenceiq/cloudbreak","description":"Cloudbreak is a cloud agnostic Hadoop as a Service API.","fork":false,"url":"https://api.github.com/repos/sequenceiq/cloudbreak","forks_url":"https://api.github.com/repos/sequenceiq/cloudbreak/forks","keys_url":"https://api.github.com/repos/sequenceiq/cloudbreak/keys{/key_id}","collaborators_url":"https://api.github.com/repos/sequenceiq/cloudbreak/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/sequenceiq/cloudbreak/teams","hooks_url":"https://api.github.com/repos/sequenceiq/cloudbreak/hooks","issue_events_url":"https://api.github.com/repos/sequenceiq/cloudbreak/issues/events{/number}","events_url":"https://api.github.com/repos/sequenceiq/cloudbreak/events","assignees_url":"https://api.github.com/repos/sequenceiq/cloudbreak/assignees{/user}","branches_url":"https://api.github.com/repos/sequenceiq/cloudbreak/branches{/branch}","tags_url":"https://api.github.com/repos/sequenceiq/cloudbreak/tags","blobs_url":"https://api.github.com/repos/sequenceiq/cloudbreak/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/sequenceiq/cloudbreak/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/sequenceiq/cloudbreak/git/refs{/sha}","trees_url":"https://api.github.com/repos/sequenceiq/cloudbreak/git/trees{/sha}","statuses_url":"https://api.github.com/repos/sequenceiq/cloudbreak/statuses/{sha}","languages_url":"https://api.github.com/repos/sequenceiq/cloudbreak/languages","stargazers_url":"https://api.github.com/repos/sequenceiq/cloudbreak/stargazers","contributors_url":"https://api.github.com/repos/sequenceiq/cloudbreak/contributors","subscribers_url":"https://api.github.com/repos/sequenceiq/cloudbreak/subscribers","subscription_url":"https://api.github.com/repos/sequenceiq/cloudbreak/subscription","commits_url":"https://api.github.com/repos/sequenceiq/cloudbreak/commits{/sha}","git_commits_url":"https://api.github.com/repos/sequenceiq/cloudbreak/git/commits{/sha}","comments_url":"https://api.github.com/repos/sequenceiq/cloudbreak/comments{/number}","issue_comment_url":"https://api.github.com/repos/sequenceiq/cloudbreak/issues/comments{/number}","contents_url":"https://api.github.com/repos/sequenceiq/cloudbreak/contents/{+path}","compare_url":"https://api.github.com/repos/sequenceiq/cloudbreak/compare/{base}...{head}","merges_url":"https://api.github.com/repos/sequenceiq/cloudbreak/merges","archive_url":"https://api.github.com/repos/sequenceiq/cloudbreak/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/sequenceiq/cloudbreak/downloads","issues_url":"https://api.github.com/repos/sequenceiq/cloudbreak/issues{/number}","pulls_url":"https://api.github.com/repos/sequenceiq/cloudbreak/pulls{/number}","milestones_url":"https://api.github.com/repos/sequenceiq/cloudbreak/milestones{/number}","notifications_url":"https://api.github.com/repos/sequenceiq/cloudbreak/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/sequenceiq/cloudbreak/labels{/name}","releases_url":"https://api.github.com/repos/sequenceiq/cloudbreak/releases{/id}","created_at":"2014-05-10T10:03:07Z","updated_at":"2015-06-16T20:09:22Z","pushed_at":"2015-06-19T10:49:18Z","git_url":"git://github.com/sequenceiq/cloudbreak.git","ssh_url":"git@github.com:sequenceiq/cloudbreak.git","clone_url":"https://github.com/sequenceiq/cloudbreak.git","svn_url":"https://github.com/sequenceiq/cloudbreak","homepage":"https://cloudbreak.sequenceiq.com/","size":20152,"stargazers_count":91,"watchers_count":91,"language":"Java","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":14,"mirror_url":null,"open_issues_count":12,"forks":14,"open_issues":12,"watchers":91,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/sequenceiq/cloudbreak/pulls/730"},"html":{"href":"https://github.com/sequenceiq/cloudbreak/pull/730"},"issue":{"href":"https://api.github.com/repos/sequenceiq/cloudbreak/issues/730"},"comments":{"href":"https://api.github.com/repos/sequenceiq/cloudbreak/issues/730/comments"},"review_comments":{"href":"https://api.github.com/repos/sequenceiq/cloudbreak/pulls/730/comments"},"review_comment":{"href":"https://api.github.com/repos/sequenceiq/cloudbreak/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/sequenceiq/cloudbreak/pulls/730/commits"},"statuses":{"href":"https://api.github.com/repos/sequenceiq/cloudbreak/statuses/789b755172797abb6f3ec7ead7a90817cdaf312c"}},"merged":true,"mergeable":null,"mergeable_state":"unknown","merged_by":{"login":"akanto","id":2838000,"avatar_url":"https://avatars.githubusercontent.com/u/2838000?v=3","gravatar_id":"","url":"https://api.github.com/users/akanto","html_url":"https://github.com/akanto","followers_url":"https://api.github.com/users/akanto/followers","following_url":"https://api.github.com/users/akanto/following{/other_user}","gists_url":"https://api.github.com/users/akanto/gists{/gist_id}","starred_url":"https://api.github.com/users/akanto/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akanto/subscriptions","organizations_url":"https://api.github.com/users/akanto/orgs","repos_url":"https://api.github.com/users/akanto/repos","events_url":"https://api.github.com/users/akanto/events{/privacy}","received_events_url":"https://api.github.com/users/akanto/received_events","type":"User","site_admin":false},"comments":9,"review_comments":12,"commits":4,"additions":1739,"deletions":464,"changed_files":88}}