ããã«ã¡ã¯ãAWS CLIã好ããªç¦å³¶ã§ãã
- ã¯ããã«
- åèæ å ±
- æ§æå³
- Webã¢ããªä¸ã§ã¦ã¼ã¶ã¼æ å ±ãåå¾ããæ¹æ³
- ã¦ã¼ã¶ã¼æ å ±ã確èªã§ããALBã®ãªã¯ã¨ã¹ããããã¼
- ãã¤ã³ã
- æ¤è¨¼
- åä½ç¢ºèª
- çµããã«
ã¯ããã«
Webã¢ããªãå®è£ ããéã«ãALB+Cognitoã使ã£ã¦èªè¨¼æ©è½ãå®è£ ãã¤ã¤ã Webä¸ã«ã¦ã¼ã¶ã¼æ å ±ã表示ãããããã¢ããªå´ã§ã¦ã¼ã¶ã¼æ å ±ãåºã«æä½ãå¶å¾¡(èªå¯)ãããã±ã¼ã¹ããããã¨æãã¾ãã
ããã§ä»åã¯ãALB+Cognito+Flaskã®æ§æã§ã¦ã¼ã¶ã¼æ
å ±ãåå¾ããæ¹æ³ããç´¹ä»ãããã¾ãã
â»Flaskã¨ã¯ãPythonã®Webãã¬ã¼ã ã¯ã¼ã¯ã«ãªãã¾ãã
åèæ å ±
æ§æå³
ä»åã®æ¤è¨¼ã«ãããæ§æå³ã¯ã以ä¸ã®éãã«ãªãã¾ãã
Webã¢ããªä¸ã§ã¦ã¼ã¶ã¼æ å ±ãåå¾ããæ¹æ³
Webã¢ããªä¸ã§ã¦ã¼ã¶ã¼æ å ±ãåå¾ããã«ã¯ãALBããã®ãªã¯ã¨ã¹ãã«å«ã¾ãããããã¼ãåå¾ãã¾ãã
ãã£ããã¨ããæµãã¯ä»¥ä¸ã®éãã§ãã
- â Webã¢ããªä¸ã§ALBããã®ãªã¯ã¨ã¹ããããã¼ãåå¾
- â¡ãããã¼ã®æ¤è¨¼
- â¢ãããã¼ã®ãã³ã¼ã
ã¦ã¼ã¶ã¼æ å ±ã確èªã§ããALBã®ãªã¯ã¨ã¹ããããã¼
ã¦ã¼ã¶ã¼æ å ±ã確èªã§ããALBã®ãªã¯ã¨ã¹ããããã¼ã¯ã以ä¸ã®2ã¤ãããã¾ãã
x-amzn-oidc-accesstoken(Cognitoãçºè¡)
ãã¼ã¯ã³ã¨ã³ããã¤ã³ãããã®ã¢ã¯ã»ã¹ãã¼ã¯ã³ ãã
x-amzn-oidc-data(ALBãçºè¡)
ã¦ã¼ã¶ã¼ã¯ã¬ã¼ã (JSON ã¦ã§ããã¼ã¯ã³ (JWT) å½¢å¼)
è£è¶³
ã¦ã¼ã¶ã¼ãæå±ããã°ã«ã¼ãæ å ±ã¯ãx-amzn-oidc-accesstokenããããåå¾ã§ããªããããåºæ¬çã«ã¯ãã®ãã¼ã¿ã使ããã¨ãå¤ãã®ããªã¨æãã¾ãã
ãã¤ã³ã
ã©ã®ãµã¼ãã¹ãçºè¡ãããã¼ã¿ãªã®ã(ALB or Cognito)
ã»ãã¥ãªãã£ã®è¦³ç¹ããWebã¢ããªã§åãåã£ããªã¯ã¨ã¹ããããã¼ã¯ãæ³å®ãã¦ããçºè¡å ããæãåºããããã¼ã¿ãªã®ããæ¤è¨¼ãããã¨ãå¤ããã¨æãã¾ãã
ãã®ãããã©ã®ãµã¼ãã¹ãçºè¡ãããã¼ã¿ãªã®ããæèããå¿ è¦ãããã¾ãã
Cognitoã®ãã¼ã¯ã³ãæ¤è¨¼ããå ´åã®åèæ å ± https://docs.aws.amazon.com/ja_jp/cognito/latest/developerguide/amazon-cognito-user-pools-using-tokens-verifying-a-jwt.html
ALBã®ãã¼ã¯ã³ãæ¤è¨¼ããå ´åã®åèæ å ± https://docs.aws.amazon.com/ja_jp/elasticloadbalancing/latest/application/listener-authenticate-users.html#user-claims-encoding
ã¦ã¼ã¶ã¼ãæå±ããã°ã«ã¼ãæ å ±ãå«ã¾ãã¦ããã
Webã¢ããªä¸ã§æä½ãå¶å¾¡(èªå¯)ãããå ´åãã¦ã¼ã¶ã¼åããã¦ã¼ã¶ã¼ãæå±ããã°ã«ã¼ãåã使ãããã±ã¼ã¹ãå¤ãã¨æãã¾ãã ããããx-amzn-oidc-dataããã¯ãã¦ã¼ã¶ã¼æ å ±ããåå¾ã§ããªãããã ã°ã«ã¼ãæ å ±ãåå¾ãããå ´åã¯ãx-amzn-oidc-accesstokenã確èªããå¿ è¦ãããã¾ãã
æ¤è¨¼
ããããã¯æ¤è¨¼ã¨ãã¦ãå®éã«ALBããã®ãªã¯ã¨ã¹ããããã¼ãè¦ãã¦ã¿ããã¨æãã¾ãã
åæ
- DNSã管çãã¦ãããã¨
- ACMã§è¨¼ææ¸ãçºè¡æ¸ã¿ã§ãããã¨
Git Clone
Gitããã½ã¼ã¹ã³ã¼ããCloneãã¾ãã
git clone https://github.com/kazuya9831/blog-sample.git
cd blog-sample
samconfig.tomlã®æ´æ°
samconfig.tomlã®æ´æ°ãã¾ãã
vi alb-cognito-flask/samconfig.toml
version = 0.1 [default.deploy.parameters] stack_name = "alb-cognito-flask" resolve_s3 = true s3_prefix = "alb-cognito-flask" region = "ap-northeast-1" capabilities = "CAPABILITY_IAM" parameter_overrides = [ "ApplicationName=alb-cognito-flask", "AllowSourceIp=xxx.xxx.xxx.xxx/xx", "DNSNameForALB=xxxx", "ACMArn=xxxxx", "VpcCIDR=192.168.0.0/24", "PublicSubnet1CIDR=192.168.0.0/27", "PublicSubnet2CIDR=192.168.0.32/27" ] image_repositories = []
å¤æ´ããå¤ã¯ã以ä¸ã®3ç¹ã§ãã
AllowSourceIp
ALBã«ã¢ã¯ã»ã¹å¯è½ãªIPãè¨å®ãã¾ããDNSNameForALB
æãåºãã¦ãã証ææ¸ã«ãããããFQDNãæå®ãã¾ããACMArn
ACMã®ARNãæå®ãã¾ãã
ãªã½ã¼ã¹ã®ãããã¤
cd alb-cognito-flask
sam build
sam deploy
Cognito Userã®ä½æ
cognito_user_pool_id=$(aws cloudformation describe-stacks \ --stack-name alb-cognito-flask \ --query "Stacks[].Outputs[?OutputKey=='CognitoUserPoolId'].OutputValue" \ --output text)
python tools/setup_cognito_user_and_group.py ${cognito_user_pool_id} tools/cognito_user_and_group.csv
DNSè¨å®
以ä¸ã®ã³ãã³ãã®å®è¡çµæãåºã«DNSã«ã¬ã³ã¼ããè¨å®ãã¾ãã
aws cloudformation describe-stacks \ --stack-name alb-cognito-flask \ --query "Stacks[].Outputs[?OutputKey=='DNSNameForALB' || OutputKey=='ALBFQDN'].OutputValue" \ --output text
DNSã«ã¬ã³ã¼ããç»é²ããæ¹æ³ã¯å²æãã¾ãã
åä½ç¢ºèª
ãã©ã¦ã¶ããDNSã¬ã³ã¼ãã«ç»é²ããã¨ã³ããã¤ã³ãã«ã¢ã¯ã»ã¹ãã¾ãã ã¢ã¯ã»ã¹ããã¨ãCognitoã®ãã¹ãUIã®ç»é¢ã«ãªãã¤ã¬ã¯ãããã以ä¸ã®ç»é¢ã表示ãããã¨æãã¾ãã
Cognitoã«ã¯ä»¥ä¸ã®ã¦ã¼ã¶ã¼ãä½æãã¦ããã®ã§ã好ããªã¦ã¼ã¶ã¼ã§ã¢ã¯ã»ã¹ãã¾ãã
- TestUser-1 (adminã°ã«ã¼ãã«æå±)
- TestUser-2 (generalã°ã«ã¼ãã«æå±)
â»ãã¹ã¯ã¼ãã¯ã¦ã¼ã¶ã¼åã¨åä¸ã§ãã
èªè¨¼ãéãã以ä¸ã®ãããªç»é¢ã表示ãããã°OKã§ãã
ä¸è¨ã¯é ç®åéããX-Amzn-Oidc-Accesstokenã¾ãã¯X-Amzn-Oidc-Dataããåå¾ããã¦ã¼ã¶ã¼æ å ±ã表示ããã¦ãã¾ãã
Request Headersã«ã¯ãALBããéããã¦ãããªã¯ã¨ã¹ããããã¼ãå ¨ã¦è¡¨ç¤ºããã¦ãã¾ãã
X-Amzn-Oidc-Accesstokenã«ã¯ããã³ã¼ãåã®ãã¼ã¿ã表示ãã X-Amzn-Oidc-Accesstoken(decode)ã«ã¯ããã³ã¼ãå¾ã®ãã¼ã¿ã表示ãã¦ãã¾ãã
1çªä¸ã«è¡¨ç¤ºãã¦ããã¦ã¼ã¶ã¼ããã³ã°ã«ã¼ãåã¯ã赤æ ã®é¨åããåå¾ãã¦ãã¾ãã
X-Amzn-Oidc-Dataã«ã¯ããã³ã¼ãåã®ãã¼ã¿ã表示ãã X-Amzn-Oidc-Data(decode)ã«ã¯ããã³ã¼ãå¾ã®ãã¼ã¿ã表示ãã¦ãã¾ãã
1çªä¸ã«è¡¨ç¤ºãã¦ããã¦ã¼ã¶ã¼åã¯ã赤æ ã®é¨åããåå¾ãã¦ãã¾ãã ãã®ãã¼ã¿ããX-Amzn-Oidc-Data(ALBãçºè¡)ã«ã¯ãã°ã«ã¼ãæ å ±ãå«ã¾ãã¦ããªããã¨ãåãããã¨æãã¾ãã
çµããã«
ä»åã¯ãALB+Cognito+Flaskã§èªè¨¼ãããã¦ã¼ã¶ã¼æ å ±ãåå¾ããæ¹æ³ããç´¹ä»ãããã¾ããã ã©ãªããã®ãå½¹ã«ç«ã¦ãã°å¹¸ãã§ãã