์๋ ํ์ธ์ Mambo ์ ๋๋ค.
์ค๋์ Elastic Beanstalk ๊ตฌ์ฑ ์ S3 ํ๋ผ์ด๋น ์ ์ฅ์์์ ํ์ผ์ ๋ฐ์์ค๋ ๊ฒ์ ์์๋ณด๊ณ ์ ํฉ๋๋ค. ์ง๋ TLS ์คํ๋ก๋์์ Nginx ์์ ์ฌ์ฉํ SSL ์ธ์ฆ์๋ฅผ Beanstalk ํ๊ฒฝ ๊ตฌ์ฑ ํ์ผ์ ํ์ผ ํค๋ฅผ ์ฌ์ฉํ์ฌ ์์ฑํ์์ต๋๋ค. ํ์ง๋ง, ๋ณด์์ ์ค์์ํ๋ ํ์ฌ๋ผ๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ์์ค ๋ฒ๋ค์ ์ธ์ฆ์์ ๊ฐ์ธํค๋ฅผ ํฌํจ์ํค๋ ๊ฒ์ ํ์ฉํ์ง ์์ ์ ์์ต๋๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์ ํ๋ฆฌ์ผ์ด์ ์์ค ๋ฒ๋ค์ ์ธ์ฆ์๋ฅผ ํฌํจํ์ง ์๊ณ ์ ํ๋ฆฌ์ผ์ด์ ๋ฐฐํฌ ๋จ๊ณ์์ ๊ฐ์ ธ์ฌ ์ ์๋ ๋ฐฉ์์ ๋ง๋ จํด์ผํฉ๋๋ค.
Beanstalk S3 Auth โ
Beanstalk ํ์ฅ ๊ตฌ์ฑ ํ์ผ์์ CloudFormation์ AWS::CloudFormation::Authentication ๋ฆฌ์์ค๋ฅผ ์ฌ์ฉํ์ฌ S3 ๋ฒํท์ ๋ํ ์๊ฒฉ ์ฆ๋ช ์ ์ง์ ํ ์ ์๊ณ ์ธ์ฆ์ ์ํํ์ฌ S3 ์ ์ฅ์์ ๋ฑ๋ก๋์ด์๋ ์ธ์ฆ์๋ฅผ ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค. ํ๋ผ์ด๋น ํค๋ฅผ Amazon S3์ ์์ ํ๊ฒ ์ ์ฅ์์ ์๋ ค์ฃผ๋ ๋๋ก Beanstalk ๊ตฌ์ฑ ์ Fn::GetOptionSetting ํจ์๋ฅผ ํ์ฉํ๋ฉด ๋ฉ๋๋ค.
S3 Bucket Policy โ
๋จผ์ , AWS::CloudFormation::Authentication ๋ฆฌ์์ค๋ก S3 ๋ฒํท์ ๋ํ ์๊ฒฉ ์ฆ๋ช ์ ๊ฐ์ง ์ ์๋๋ก S3 ๋ฒํท์ ๋ณด์ ์ ์ฑ ์ ์ค์ ํด์ผ ํฉ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก Beanstalk์ผ๋ก ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐฐํฌํ๋ ๊ฒฝ์ฐ aws-elasticbeanstalk-ec2-role์ ์ธ์คํด์ค ํ๋กํ์ผ๋ก ๊ฐ์ง๊ฒ ๋ฉ๋๋ค. ์ธ์ฆ์ ํ์ผ์ด ์ ์ฅ๋ S3 ๋ฒํท์ ํผ๋ธ๋ฆญ ์ก์ธ์ค๊ฐ ์ฐจ๋จ๋์ด์์ผ๋ฏ๋ก EC2 ์ธ์คํด์ค๊ฐ ๋ฒํท์ ๋ํ ๊ถํ์ ๊ฐ์ง๋๋ก ์ ์ฑ ์ ์ถ๊ฐํฉ๋๋ค.
Extend Nginx โ
์ด์ ์ด์ ์ ์์ฑํ์๋ SSL ์ธ์ฆ์๋ฅผ ๋ง๋ค์ด๋ด๋ ๊ตฌ์ฑ ํ์ผ์ S3์์ ๋ฐ์์ค๋๋ก ์์ฑํด์ผํฉ๋๋ค. files ํค์ content ํญ๋ชฉ์ ์ ๊ฑฐํ๊ณ ๋ค์์ ํญ๋ชฉ์ ์ถ๊ฐํฉ๋๋ค.
- source : S3 ์ธ์ฆ์ ์ค๋ธ์ ํธ URL
- authentication : ์ธ์ฆ ์์ฑ ์ด๋ฆ
Resources:
AWSEBAutoScalingGroup:
Metadata:
AWS::CloudFormation::Authentication:
S3Auth:
type: S3
buckets:
- mambo-cert
roleName:
Fn::GetOptionSetting:
Namespace: aws:autoscaling:launchconfiguration
OptionName: IamInstanceProfile
DefaultValue: aws-elasticbeanstalk-ec2-role
files:
"/etc/nginx/cert/server.crt":
mode: "000400"
owner: nginx
group: nginx
source: https://mambo-cert.s3.ap-northeast-2.amazonaws.com/server.crt
authentication: S3Auth
"/etc/nginx/cert/server.key":
mode: "000400"
owner: nginx
group: nginx
source: https://mambo-cert.s3.ap-northeast-2.amazonaws.com/server.key
authentication: S3Auth
"/etc/nginx/cert/server.ca-bundle":
mode: "000400"
owner: nginx
group: nginx
source: https://mambo-cert.s3.ap-northeast-2.amazonaws.com/server-ca-bundle
authentication: S3Auth
commands:
00-chain-ca-bundle:
cwd: /etc/nginx/cert
command: |
cat server.crt server.ca-bundle > server-ca.pem
chown nginx:nginx server-ca.pem
chmod 400 server-ca.pem
99-remove-bak:
cwd: /etc/nginx/cert
command: rm -f *.bak
Beanstalk Resources โ
์๋ง์กด ์น ์๋น์ค์ ๋ฆฌ์์ค๋ค์ CloudFormation์ผ๋ก ๋ง๋ค์ด์ง๋ฉฐ Elastic Beanstalk ํ๊ฒฝ๋ CloudFormation ์คํ์ ๊ตฌ์ฑํ์ฌ ๋ง๋ค์ด์ง๊ฒ ๋ฉ๋๋ค.
Resources:
AWSEBAutoScalingGroup:
Metadata:
AWS::CloudFormation::Authentication:
S3Auth:
type: S3
buckets:
- mambo-cert
roleName:
Fn::GetOptionSetting:
Namespace: aws:autoscaling:launchconfiguration
OptionName: IamInstanceProfile
DefaultValue: aws-elasticbeanstalk-ec2-role
๊ทธ๋์ ๊ตฌ์ฑ ํ์ผ์ ๋ฆฌ์์ค ํค๋ฅผ ์ ์ํ๋ ๊ฒ์ CloudFormation ํ ํ๋ฆฟ์ ๋ฆฌ์์ค๋ฅผ ์ถ๊ฐํ๋ ๊ฒ๊ณผ ๊ฐ์ต๋๋ค. ์ ์์์์๋ Beanstalk ํ๊ฒฝ ์์ ์ ๋ง๋ค์ด์ง๋ CloudFormation ์คํ์ ๋ฏธ๋ฆฌ ์ ์๋ ์น ์๋ฒ ํ๊ฒฝ์ ๋ฆฌ์์ค ํญ๋ชฉ์ธ AWSEBAutoScalingGroup์ ์ฌ์ฉํ์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ AWSEBAutoScalingGroup์๋ LaunchConfiguration(AWS::AutoScaling::LaunchConfiguration)๋ผ๋ EC2 ์ธ์คํด์ค์ ๋ํ ์์ ๊ตฌ์ฑ์ ์ ์ํ๋ ํญ๋ชฉ์ด ์์ผ๋ฉฐ ์์ ๊ตฌ์ฑ์ ์ ์๋ ๋ด์ฉ ์ค์๋ IamInstanceProfile ์์ฑ์ด ์์ต๋๋ค. IamInstanceProfile ์์ฑ์ EC2 ์ธ์คํด์ค์ ๋ํ ์ธ์คํด์ค ํ๋กํ์ผ๋ก ์ง์ ๋ IAM Role์ ๋ํ ์ด๋ฆ์ ์ ๊ณตํฉ๋๋ค.
๋ฐ๋ผ์, Beanstalk ํ๊ฒฝ ๊ตฌ์ฑ ์ ์ ํํ IAM Role์ ๊ฐ์ ธ์์ AWS::CloudFormation::Authentication ๋ฆฌ์์ค๋ฅผ ํ์ฉํด S3 ๋ฒํท์ ๋ํ ์๊ฒฉ ์ฆ๋ช ์ ์ง์ ํ ๊ฒ์ ๋๋ค. ์ฐ๋ฆฌ๋ ์์ aws-elasticbeanstalk-ec2-role์ด๋ผ๋ IAM Role์ด ์ธ์ฆ์๊ฐ ์ ์ฅ๋ S3 ๋ฒํท์ ์ฝ๊ธฐ ๊ถํ์ ๋ถ์ฌํ๊ธฐ ๋๋ฌธ์ ํ์ผ ํค์ ์ ์๋ ํ์ผ์ ์์ฑํ ๋ ์ธ๋ถ ์์ค(S3 ์ ์ฅ์)์์ ๊ฐ์ ธ์ฌ ์ ์๊ฒ๋ ๊ฒ์ ๋๋ค. ์ด๋ ๊ฒ ํด์ ์ฐ๋ฆฌ๋ ์ ํ๋ฆฌ์ผ์ด์ ์์ค ๋ฒ๋ค์ ์ธ์ฆ์๋ฅผ ํฌํจ์ํค์ง ์๊ณ EC2 ์ธ์คํด์ค์์๋ง ์ ๊ทผํ ์ ์๋ S3 ๋ฒํท์ ์ธ์ฆ์๋ฅผ ์ ์ฅํ๊ณ ์ฌ์ฉํ ์ ์๋ ๊ตฌ์ฑ์ ํ ์ ์๊ฒ ๋์์ต๋๋ค.
์ด ๊ธ์ ๋ณด์๋ ๋ถ๋ค์ด ์ธ์ฆ์์ ๊ฐ์ธํค์ ๊ฐ์ ๋ฏผ๊ฐํ ํ์ผ๋ค์ ์ ํ๋ฆฌ์ผ์ด์ ์์ค ๋ฒ๋ค์ ํฌํจํ๊ณ ์๋ค๋ฉด ํ๋ผ์ด๋น S3 ์ ์ฅ์์ ์ ์ฅํ์ฌ ๋ ์์ ํ ๋ฐฉ์์ผ๋ก ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐฐํฌํ๋ ๊ฒ์ ๊ณ ๋ คํด๋ณด์๊ธฐ ๋ฐ๋๋๋ค.
๊ฐ์ฌํฉ๋๋ค.