Elastic Beanstalk S3 Authentication
μλ νμΈμ 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 μ μ₯μμ μ μ₯νμ¬ λ μμ ν λ°©μμΌλ‘ μ ν리μΌμ΄μ μ λ°°ν¬νλ κ²μ κ³ λ €ν΄λ³΄μκΈ° λ°λλλ€.
κ°μ¬ν©λλ€.