æ¬èšäºã¯ã2025 幎 8 æ 15 æ¥ã«å
¬éããã Securing Amazon Aurora DSQL: Access control best practices ã翻蚳ãããã®ã§ãã Amazon Aurora DSQL ã¯ãåžžæå©çšå¯èœãªã¢ããªã±ãŒã·ã§ã³ã®ããã®æéã®ãµãŒããŒã¬ã¹åæ£ SQL ããŒã¿ããŒã¹ã§ãã 驿°çãªã¢ã¯ãã£ã-ã¢ã¯ãã£ã忣ã¢ãŒããã¯ãã£ã«ãããAurora DSQL ã¯ã·ã³ã°ã«ãªãŒãžã§ã³æ§æã§ 99.99% ã®å¯çšæ§ããã«ããªãŒãžã§ã³æ§æã§ 99.999% ã®å¯çšæ§ãå®çŸããããã«èšèšãããŠãããé«å¯çšæ§ã¢ããªã±ãŒã·ã§ã³ã®æ§ç¯ã«æé©ã§ãã ãããªãã¯ãšã³ããã€ã³ããš AWS PrivateLink ãšã³ããã€ã³ãã䜿çšããŠãAurora DSQL ã¯ã©ã¹ã¿ãŒã«ã¢ã¯ã»ã¹ã§ããŸãã ãã®ãã¹ãã§ã¯ãAWS ã®å
éšãšå€éšã®äž¡æ¹ããããããªãã¯ãšã³ããã€ã³ããš PrivateLink ãä»ãããã©ã€ããŒã VPC ãšã³ããã€ã³ãã䜿çšããŠãAurora DSQL ã¯ã©ã¹ã¿ãŒãžã®ã¢ã¯ã»ã¹ãå¶åŸ¡ããæ¹æ³ãã玹ä»ããŸãã Aurora DSQL ãããªãã¯ãšã³ããã€ã³ãã䜿çšããã¢ã¯ã»ã¹å¶åŸ¡ ãããªãã¯ãšã³ããã€ã³ããä»ã㊠Aurora DSQL ã«ã¢ã¯ã»ã¹ããããšã§ãVPN ã AWS Direct Connect ã®ã»ããã¢ãããªãã§ãå€éšã¢ããªã±ãŒã·ã§ã³ããªã³ãã¬ãã¹ã·ã¹ãã ã Aurora DSQL ã¯ã©ã¹ã¿ãŒã«æ¥ç¶ã§ããæè»æ§ãåŸãããŸãããããããã®å©äŸ¿æ§ã¯åŒ·åãªã¢ã¯ã»ã¹å¶åŸ¡ãšãã©ã³ã¹ãåãå¿
èŠããããŸããAurora DSQL 㯠AWS Identity and Access Management (IAM) ãšçµ±åãããŠãããID ããŒã¹ã®ã¢ã¯ã»ã¹èš±å¯ãé©çšããããšã§ãæ¿èªãããããŒã«ã®ã¿ãæ¥ç¶ãéå§ã§ããŸãããŠãŒã¶ãŒããŒã«ãIP ã¢ãã¬ã¹ç¯å²ããŸãã¯ä»®æ³ãã©ã€ããŒãã¯ã©ãŠã (VPC) èå¥åã«åºã¥ããŠãã¢ã¯ã»ã¹ãèš±å¯ãŸãã¯æåŠãã詳现ãªããªã·ãŒãå®çŸ©ã§ããŸããããšãã°ãå¿
èŠãª dsql:DbConnect ãŸã㯠dsql:DbConnectAdmin ã¢ã¯ã»ã¹èš±å¯ããªãç¶æ
ã§ãŠãŒã¶ãŒãæ¥ç¶ã詊ã¿ãå Žåããããªãã¯ãšã³ããã€ã³ãã«å°éå¯èœã§ãã£ãŠããã¢ã¯ã»ã¹æåŠãšã©ãŒãçºçããŸãã IAM ããªã·ãŒãã»ãã¥ãªãã£ã°ã«ãŒãããããã¯ãŒã¯ã¢ã¯ã»ã¹ã³ã³ãããŒã«ãªã¹ã (ãããã¯ãŒã¯ ACL) ãçµã¿åãããããšã§ãç°å¢éã§ã®å®å
šãªã¢ã¯ã»ã¹ãå¯èœã«ããªãããAurora DSQL ã¯ã©ã¹ã¿ãŒãžã®ã¢ã¯ã»ã¹ãå³å¯ã«ç®¡çã§ããŸãã ãããªãã¯ãšã³ããã€ã³ããä»ã㊠Aurora DSQL ã¯ã©ã¹ã¿ãŒã«ã¢ã¯ã»ã¹ããå Žåãã»ãã¥ãªãã£ã®ããã«ä»¥äžã®ã¢ã¯ã»ã¹å¶åŸ¡ãå®è£
ããããšãäžå¯æ¬ ã§ã: æå°æš©éã®åå â åããŒã¿ããŒã¹ã®ããŒã«ãŸãã¯ãŠãŒã¶ãŒã«å¿
èŠæå°éã® IAM ã¢ã¯ã»ã¹èš±å¯ãä»äžããŸãã IP ããŒã¹ã®ã¢ã¯ã»ã¹å¶åŸ¡ â æå®ãã IP ã¢ãã¬ã¹ãŸã㯠IP ã¢ãã¬ã¹ç¯å²ããã®æ¥ç¶ã®ã¿ãèš±å¯ããŸãã æ¬¡ã®å³ã¯ããã®ã»ããã¢ããã®ã¢ãŒããã¯ãã£ã瀺ããŠããŸãã ãããªãã¯ãšã³ããã€ã³ãã䜿çšãããªã³ãã¬ãã¹ãã Aurora DSQL ãžã®ã¢ã¯ã»ã¹å¶åŸ¡ã®ç®¡ç ãã®ã»ã¯ã·ã§ã³ã§ã¯ããããªãã¯ãšã³ããã€ã³ãã䜿çšããŠããªã³ãã¬ãã¹ãããã¯ãŒã¯ãã Aurora DSQL ã¯ã©ã¹ã¿ãŒãžã®ã¢ã¯ã»ã¹ãå®å
šã«ç®¡çããæé ãæ®µéçã«èª¬æããŸãã IAM æš©éã䜿çšããããŒã¿ããŒã¹ã¢ã¯ã»ã¹ã®å¶åŸ¡ Aurora DSQL ã¯èªèšŒã«åŸæ¥ã®ãã¹ã¯ãŒãã䜿çšããŸããã代ããã«ã AWS SDK ã«ãã£ãŠçæãããçæéæå¹ãªèªèšŒããŒã¯ã³ã䜿çšããŸãã ãŠãŒã¶ãŒãŸãã¯ã¢ããªã±ãŒã·ã§ã³ã Aurora DSQL ã¯ã©ã¹ã¿ãŒã«æ¥ç¶ã詊ã¿ããšãAurora DSQL ã¯ããŒã¯ã³ãæ€èšŒããåŒã³åºãå
ã® IAM ããªã·ãŒãè©äŸ¡ããŠã¢ã¯ã»ã¹ãèš±å¯ãããã©ããã倿ããŸãã ãã®ã¢ãããŒãã¯ãæŽæ°é »åºŠã®äœããè³æ Œæ
å ±ã®æŒæŽ©ãšãã£ããé·æéæå¹ãªãã¹ã¯ãŒãã«é¢é£ãããªã¹ã¯ã軜æžããããšã§ã»ãã¥ãªãã£ã匷åããŸãã IAM ããŒã¹ã®ããŒã¯ã³èªèšŒã䜿çšããããšã§ãæç€ºçã«æ¿èªãããããŒã«ãšãŠãŒã¶ãŒã®ã¿ãããŒã¿ããŒã¹ã«æ¥ç¶ã§ããããã«ãªããŸãã ãŸããã·ã¹ãã ã«ã¢ã¯ã»ã¹ã§ãããŠãŒã¶ãŒã®äžå
管çãšç£æ»ãå¯èœã«ãªããŸãã ãããå®èšŒããããã«ããŸã Amazon Elastic Compute Cloud (Amazon EC2) ã€ã³ã¹ã¿ã³ã¹ã® IAM ããŒã«ã« Aurora DSQL ã®ã¢ã¯ã»ã¹èš±å¯ ( dsql:DbConnect ãŸã㯠dsql:DbConnectAdmin ) ãå²ãåœãŠãã«ãAurora DSQL ã¯ã©ã¹ã¿ãŒã®ãããªãã¯ãšã³ããã€ã³ããžã®æ¥ç¶ã詊ã¿ãŸãã export PGSSLMODE=require export PGPASSWORD=$(aws dsql generate-db-connect-admin-auth-token --hostname $CLUSTER_ENDPOINT --region us-east-1) [root@ip-10-0-0-40 ~ ]# psql --quiet --username admin --dbname postgres --host $CLUSTER_ENDPOINT psql: error: connection to server at "xxxxxxxxxxxxxxxxxxxxxxxxxx.dsql.us-east-1.on.aws" (18.97.33.130), port 5432 failed: FATAL: unable to accept connection, access denied DETAIL: Session Id: kvs6xpvbygqtwayg2o6pzp7lgi HINT: User: arn:aws:sts::123456789012:assumed-role/EC2Role/i-b188560f is not authorized to perform: dsql:DbConnectAdmin on resource: arn:aws:dsql:us-east-1:123456789012:cluster/xxxxxxxxxxxxxxxxxxxxxxxxxx because no identity-based policy allows the dsql:DbConnectAdmin action ããã¯ããããªãã¯ãšã³ããã€ã³ããä»ããŠã¢ã¯ã»ã¹ããå Žåã§ããIAM èªèšŒãé©çšããããšã§ Aurora DSQL ã¯ã©ã¹ã¿ãŒãä¿è·ãããŠããããšã瀺ããŠããŸãã é©åãªããªã·ãŒãæããªãæ¥ç¶è©Šè¡ã¯æåŠãããäžæ£ã¢ã¯ã»ã¹ã广çã«é²æ¢ããŸãã æ¬¡ã«ã以äžã® IAM ããªã·ãŒã Amazon EC2 ã€ã³ã¹ã¿ã³ã¹ã® IAM ããŒã«ã«é¢é£ä»ããŸãã ãã®ããªã·ãŒã¯ã管çè
ããŒã« ( dsql:DbConnectAdmin ) ãšã«ã¹ã¿ã ããŒã¿ããŒã¹ããŒã« ( dsql:DbConnect ) ã®äž¡æ¹ã䜿çšããŠã¯ã©ã¹ã¿ãŒã«æ¥ç¶ããããã®æš©éãä»äžããŸãã æ³šæ : ãã®ããã°å
šäœãéããŠã å±±æ¬åŒ§ïŒ< >ïŒã§å²ãŸããå€ ãå¿
ããèªèº«ã®æ
å ±ã«çœ®ãæããŠãã ããã { "Version": "2012-10-17", "Statement": [ { "Sid": "StatementAllow", "Effect": "Allow", "Action": [ "dsql:DbConnect", "dsql:DbConnectAdmin" ], "Resource": [ "arn:aws:dsql: <AWS-Region> : <account-id> :cluster/ examplecluster " ] } ] } 次ã«ã以äžã®ã³ãã³ããå®è¡ã㊠PostgreSQL ã® SSL ã¢ãŒãã require ã«èšå®ããå®å
šãªæ¥ç¶ã匷å¶ããŸãã Aurora DSQL ã¯ãã¹ãŠã®æ¥ç¶ã« SSL ãå¿
é ãšããSSL ã䜿çšããªãæ¥ç¶ã®è©Šã¿ã¯æåŠãããŸãã export PGSSLMODE=require 次ã«ãèªèšŒããŒã¯ã³ãçæãã PGPASSWORD ç°å¢å€æ°ã«æ ŒçŽããŸãã ããã©ã«ãã§ã¯ãAurora DSQL ã®èªèšŒããŒã¯ã³ã¯ 15 å (900 ç§) ã§æå¹æéãåããŸãã ãã ãããã®ãã¥ãŒããªã¢ã«ã§ã¯ã1 æé (3,600 ç§) ã§æå¹æéãåããããã«èšå®ãããããé·ãæå¹æéãæã€ããŒã¯ã³ãçæããŸãã export PGPASSWORD=$(aws dsql generate-db-connect-admin-auth-token --hostname $CLUSTER_ENDPOINT --region us-east-1 --expires-in 3600) å¿
èŠãªæ¥ç¶ãã©ã¡ãŒã¿ãèšå®ããã®ã§ãAurora DSQL ã¯ã©ã¹ã¿ãŒãžã®æ¥ç¶ããã¹ãããŠã¿ãŸãããã [root@ip-10-0-0-40 ~ ]# psql --quiet --username admin --dbname postgres --host $CLUSTER_ENDPOINT postgres=> select current_user ; current_user ----------------- admin (1 row) åè¿°ã®ã³ãŒããšåºåã¯ããããªãã¯ãšã³ããã€ã³ããä»ããŠã¢ã¯ã»ã¹ããå Žåã§ããAurora DSQL ã IAM ããŒã¹ã®èªèšŒã广çã«å®æœããŠããããšã瀺ããŠããŸãã å®å
šã§å¶åŸ¡ãããã¢ã¯ã»ã¹ã®ããã«ãåžžã«æå°æš©éã®ååã«åŸããããŒã¿ããŒã¹ã¢ã¯ã»ã¹ãå¿
èŠãšããããŒã«ãšãŠãŒã¶ãŒã«å¯ŸããŠãå¿
èŠãªæš©é ( dsql:DbConnect ãŸã㯠dsql:DbConnectAdmin ) ã®ã¿ãä»äžããŠãã ããã 宿çã« IAM ããªã·ãŒãç£æ»ããã»ãã¥ãªãã£ãªã¹ã¯ã軜æžããããã«ãé·æéæå¹ãªèªèšŒæ
å ±ã®ä»£ããã«çæéã®ã¿æå¹ãªèªèšŒããŒã¯ã³ã䜿çšããŠãã ããã IP ã¢ãã¬ã¹ãŸãã¯ç¯å²ã«åºã¥ããããŒã¿ããŒã¹ã¢ã¯ã»ã¹ã®å¶åŸ¡ ããã§ã¯ããœãŒã¹ IP ã¢ãã¬ã¹ã«åºã¥ã㊠Aurora DSQL ã¯ã©ã¹ã¿ãŒãžã®ã¢ã¯ã»ã¹ãå¶éããæ¹æ³ã説æããŸãã ãã®æ¹æ³ã¯ããããã¯ãŒã¯ã¬ãã«ã®ã»ãã¥ãªãã£å±€ã远å ããä¿¡é Œã§ãã IP ã¢ãã¬ã¹ãŸã㯠CIDR ãããã¯ããã®æ¥ç¶ã®ã¿ãèš±å¯ããŸãã aws:SourceIp æ¡ä»¶ãå«ã IAM ããªã·ãŒã䜿çšããããšã§ãããŒã«ããŒã¹ã®ã¢ã¯ã»ã¹å¶åŸ¡ãè£å®ããæç€ºçãªèš±å¯ãŸãã¯æåŠã«ãŒã«ãå®çŸ©ã§ããŸãã ããã¯ãç¹å®ã®äŒæ¥ãªãã£ã¹ããªã³ãã¬ãã¹ããŒã¿ã»ã³ã¿ãŒããŸãã¯æ¢ç¥ã®ãã¹ãã£ãªã³ãã¹ããžã®ã¢ã¯ã»ã¹ãèš±å¯ããå Žåã«ç¹ã«äŸ¿å©ã§ãã æ¬¡ã®ã³ãŒãäŸã¯ãæ¥ç¶èŠæ±ãæå®ãããç¯å²å€ã® IP ã¢ãã¬ã¹ããçºä¿¡ãããå Žåã«ãAurora DSQL ã¯ã©ã¹ã¿ãŒãžã®ã¢ã¯ã»ã¹ãæåŠãã ID ããŒã¹ã® IAM ããªã·ãŒãäœæããæ¹æ³ã瀺ããŠããŸãã ãã®ããªã·ãŒã§ã¯ã "Effect": "Deny" æ¡ä»¶ã«ãããä¿¡é Œããã IP ã¢ãã¬ã¹ (ãã®å Žå㯠203.0.113.1/32) 以å€ããã®ãªã¯ãšã¹ãããããã¯ããŸãã ãã®ã¢ãããŒãã«ããããŠãŒã¶ãŒãŸãã¯ããŒã«ãå¿
èŠãª Aurora DSQL ã®æš©éãæã£ãŠããå Žåã§ããæ¿èªããã IP ããã®æ¥ç¶ã®ã¿ãèš±å¯ãããŸãã { "Version": "2012-10-17", "Statement": [ { "Sid": "StatementDeny", "Effect": "Deny", "Action": [ "dsql:DbConnect", "dsql:DbConnectAdmin" ], "Resource": [ "arn:aws:dsql: <AWS-Region> : <account-id> :cluster/ examplecluster " ], "Condition": { "NotIpAddress": { "aws:SourceIp": "203.0.113.1/32" } } }, { "Sid": "StatementAllow", "Effect": "Allow", "Action": [ "dsql:DbConnect", "dsql:DbConnectAdmin" ], "Resource": [ "arn:aws:dsql: <AWS-Region> : <account-id> :cluster/ examplecluster " ] } ] } ç°ãªãéä¿¡å
IP ã¢ãã¬ã¹ãæã€ Amazon EC2 ã€ã³ã¹ã¿ã³ã¹ãã Aurora DSQL ã«æ¥ç¶ãã åã®ã»ã¯ã·ã§ã³ã§èª¬æãã IP ããŒã¹ã®å¶éã®æå¹æ§ãæ€èšŒããããã«ãIAM ããªã·ãŒã§å®çŸ©ãããèš±å¯ç¯å²å€ã®ç°ãªããããªã㯠IP ã¢ãã¬ã¹ãæã€ Amazon EC2 ã€ã³ã¹ã¿ã³ã¹ãããAurora DSQL ã¯ã©ã¹ã¿ãŒãžã®æ¥ç¶ã詊ã¿ãŠã¿ãŸãããã ããªã·ãŒã§ã¯ 203.0.113.1/32 ã«äžèŽããªã IP ã¢ãã¬ã¹ããã®ã¢ã¯ã»ã¹ãæç€ºçã«æåŠããŠãããããä»ã®ãã¹ãŠã® IAM æš©éãæ£ããèšå®ãããŠããŠãããã® Amazon EC2 ã€ã³ã¹ã¿ã³ã¹ããã®æ¥ç¶è©Šè¡ã¯å€±æããã¯ãã§ãã æ¥ç¶ããã¹ãããåã«ãAmazon EC2 ã€ã³ã¹ã¿ã³ã¹ã®ãããªã㯠IP ã¢ãã¬ã¹ããIAM ããªã·ãŒã§å®çŸ©ãããèš±å¯ IP ç¯å²ã®å€ã«ããããšã確èªããå¿
èŠããããŸãã Amazon EC2 Instance Metadata Service Version 2 (IMDSv2) ã IMDSv2 ããŒã¯ã³ãšå
±ã«äœ¿çšããŠãã€ã³ã¹ã¿ã³ã¹ã®ãããªã㯠IPv4 ã¢ãã¬ã¹ãå®å
šã«ååŸããã«ã¯ã以äžã®ã³ãã³ããå®è¡ããŸãïŒ # IMDSv2 ããŒã¯ã³ãçæ TOKEN=$(curl --silent -X PUT "http://169.254.169.254/latest/api/token" \ -H "X-aws-ec2-metadata-token-ttl-seconds: 21600") # ããŒã¯ã³ã䜿çšããŠãããªã㯠IP ã¢ãã¬ã¹ãååŸ public_ipv4=$(curl --silent -H "X-aws-ec2-metadata-token: $TOKEN" \ http://169.254.169.254/latest/meta-data/public-ipv4) # IP ã衚瀺 echo $public_ipv4 192.0.2.1 IAM ããªã·ãŒã¯ 203.0.113.1/32 以å€ã®ãœãŒã¹ IP ã¢ãã¬ã¹ããã®ã¢ã¯ã»ã¹ãæç€ºçã«æåŠããããããããªã㯠IP ã¢ãã¬ã¹ã 192.0.2.1 ã§ãã Amazon EC2 ã€ã³ã¹ã¿ã³ã¹ããã®æ¥ç¶è©Šè¡ã¯æ£ããæåŠãããŸãã ããã«ãããIP ããŒã¹ã®å¶éãæå³ãããšããã«åŒ·å¶ãããŠããããšã確èªã§ããŸãã [root@ip-10-0-0-40 ~ ]# psql --quiet --username admin --dbname postgres --host $CLUSTER_ENDPOINT psql: error: connection to server at "examplecluster.dsql.us-east-1.on.aws" (18.97.33.130), port 5432 failed: FATAL: unable to accept connection, access denied DETAIL: Session Id: abcdefghijaklmnop2ryunhve HINT: User: arn:aws:sts:: 12345678910:assumed-role/EC2Role/i-b188560f is not authorized to perform: dsql:DbConnectAdmin on resource: arn:aws:dsql:us-east-1:12345678910:cluster/examplecluster with an explicit deny in an identity-based policy äžèšã®ã³ãŒãã¯ããŠãŒã¶ãŒãŸãã¯ããŒã«ãé©åãªæš©éãæã£ãŠããå Žåã§ããAurora DSQL ã IP ããŒã¹ã®æåŠã«ãŒã«ã«åŸããã¢ã¯ã»ã¹ãä¿¡é Œã§ãããããã¯ãŒã¯å¢çã«å¶éããããšã瀺ããŠããŸãã èš±å¯ããããœãŒã¹ IP ã¢ãã¬ã¹ãæã€ Amazon EC2 ã€ã³ã¹ã¿ã³ã¹ããã® Aurora DSQL ãžã®æ¥ç¶ IP ããŒã¹ã®ã¢ã¯ã»ã¹ããªã·ãŒãæåŸ
éãã«æ©èœããããšã確èªãããããIAM ããªã·ãŒã§èš±å¯ããã IP ç¯å² (203.0.113.1/32) ã«äžèŽãããããªã㯠IP ã¢ãã¬ã¹ãæã€ Amazon EC2 ã€ã³ã¹ã¿ã³ã¹ãã Aurora DSQL ã¯ã©ã¹ã¿ãŒã«æ¥ç¶ããŸãã ã€ã³ã¹ã¿ã³ã¹ã®ãããªã㯠IP ã¢ãã¬ã¹ãèš±å¯ãããç¯å²å
ã«ãããIAM ããŒã«ã«å¿
èŠãª dsql:DbConnect ãŸã㯠dsql:DbConnectAdmin æš©éããããããæ¥ç¶ã¯ãšã©ãŒãªãæåããã¯ãã§ãã æ¥ç¶ããã¹ãããåã«ãAmazon EC2 ã€ã³ã¹ã¿ã³ã¹ã®ãããªã㯠IP ã¢ãã¬ã¹ããIAM ããªã·ãŒã§å®çŸ©ãããèš±å¯ IP ç¯å² (203.0.113.1/32) å
ã«ããããšã確èªããŸãããã ãããè¡ãããã«ãIMDSv2 ããŒã¯ã³ã䜿çšããŠã€ã³ã¹ã¿ã³ã¹ã®ãããªã㯠IPv4 ã¢ãã¬ã¹ãå®å
šã«ååŸããŸãã # IMDSv2 ããŒã¯ã³ãçæ [root@ip-10-0-0-40 ~ ]# export PGSSLMODE=require [root@ip-10-0-0-40 ~ ]# export PGPASSWORD=$(aws dsql generate-db-connect-admin-auth-token --hostname $CLUSTER_ENDPOINT â region us-east-1) # ããŒã¯ã³ã䜿çšããŠãããªã㯠IP ã¢ãã¬ã¹ãååŸ [root@ip-10-0-0-40 ~ ]# TOKEN=$(curl --silent -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600") [root@ip-10-0-0-40 ~ ]# public_ipv4=$(curl â silent -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/public-ipv4) # IP ã衚瀺 [root@ip-10-0-0-40 ~ ]# echo $public_ipv4 203.0.113.1 IAM ããªã·ãŒã§ IP ã¢ãã¬ã¹ 203.0.113.1 ããã®ã¢ã¯ã»ã¹ãèš±å¯ããããã«æ£ããèšå®ããèªèšŒããŒã¯ã³ã SSL ã¢ãŒããªã©ã®å¿
èŠãªæ¥ç¶ãã©ã¡ãŒã¿ããã¹ãŠèšå®ããã®ã§ãAurora DSQL ã¯ã©ã¹ã¿ãŒã«æ£åžžã«æ¥ç¶ã§ããããã«ãªããŸããã [root@ip-10-0-0-40 ~ ]# psql --quiet --username admin --dbname postgres --host $CLUSTER_ENDPOINT postgres=> select current_user ; current_user -------------- admin ããã«ãããIP ããŒã¹ã®ã¢ã¯ã»ã¹å¶åŸ¡ãæ£ããæ©èœããæç€ºçã«èš±å¯ããã IP ã¢ãã¬ã¹ããã®æ¥ç¶ã®ã¿ãèš±å¯ããŠããããšã確èªã§ããŸãã PrivateLink ãšãã©ã€ããŒã DNS ãšã³ããã€ã³ãã䜿çšãã Aurora DSQL ãžã®ã¢ã¯ã»ã¹å¶åŸ¡ ãã®ã»ã¯ã·ã§ã³ã§ã¯ãPrivateLink ãšãã©ã€ããŒã DNS ãšã³ããã€ã³ãã䜿çšã㊠Aurora DSQL ã«å®å
šã«ã¢ã¯ã»ã¹ããæ¹æ³ãæ¢ããŸãã ãã®ã¢ãããŒãã«ãããVPC ãš Aurora DSQL éã®ãã©ãã£ãã¯ãå®å
šã« AWS ãããã¯ãŒã¯å
ã«çããããšãã§ãããããªã㯠IP ã¢ãã¬ã¹ãã€ã³ã¿ãŒãããã²ãŒããŠã§ã€ããŸã㯠NAT ããã€ã¹ãäžèŠã«ãªããŸãã PrivateLink ã䜿çšãããšãã€ã³ã¿ãŒãã§ãŒã¹ VPC ãšã³ããã€ã³ããäœæããŠãAurora DSQL ãèªèº«ã® VPC ã®äžéšã§ãããã®ããã«æ¥ç¶ã§ããŸãã ãã©ã€ããŒã DNS ãšçµã¿åãããããšã§ããããã®ãšã³ããã€ã³ãã䜿çšããŠã¢ããªã±ãŒã·ã§ã³ã¯æšæºã®ãã¹ãåã䜿çšã㊠Aurora DSQL ã¯ã©ã¹ã¿ãŒã解決ãã¢ã¯ã»ã¹ã§ããããã«ãªãããã©ãã£ãã¯ã¯ãã©ã€ããŒããã€å®å
šã«ã«ãŒãã£ã³ã°ãããŸãã ãã®æ§æã¯ãããŒã¿ã®ãã©ã€ãã·ãŒãšäœã¬ã€ãã³ã·ãŒãå®å
šãªæ¥ç¶ãéèŠãªèŠä»¶ãšãªãå
éšã¯ãŒã¯ããŒãããã€ããªããç°å¢ã§ç¹ã«æçšã§ãã æ¬¡ã®å³ã¯ãPrivateLink ã䜿çšã㊠Aurora DSQL ã¯ã©ã¹ã¿ãŒãžã®ã¢ã¯ã»ã¹ãå¶åŸ¡ããæ¹æ³ã瀺ããŠããŸãã åææ¡ä»¶ 以äžã®ã»ã¯ã·ã§ã³ã«é²ãåã«ã次ã®åææ¡ä»¶ãæºãããŠããããšã確èªããŠãã ããã Amazon VPC VPC å
ã®ã³ã³ãã¥ãŒãã£ã³ã°ãªãœãŒã¹ ( Amazon EC2 ã€ã³ã¹ã¿ã³ã¹ ãªã©) åäžã® AWS ãªãŒãžã§ã³ã«ãã Aurora DSQL ã¯ã©ã¹ã¿ãŒ ã€ã³ã¿ãŒãã§ãŒã¹ VPC ãšã³ããã€ã³ãã®äœæãš Aurora DSQL ãžã®ã¢ã¯ã»ã¹ã«å¿
èŠãª IAM ã¢ã¯ã»ã¹èš±å¯ PrivateLink ã€ã³ã¿ãŒãã§ã€ã¹ãšã³ããã€ã³ãã®äœæ Aurora DSQL ã® PrivateLink ãµããŒãã«ãããVPC ã«ã€ã³ã¿ãŒãã§ãŒã¹ VPC ãšã³ããã€ã³ããããããžã§ãã³ã°ã§ããŸãã ãããã®ãšã³ããã€ã³ãã䜿çšãããšããããªã㯠IP ã¢ãã¬ã¹ãã€ã³ã¿ãŒãããæ¥ç¶ãå¿
èŠãšããã«ãã¢ããªã±ãŒã·ã§ã³ãããã©ã€ããŒãã« Aurora DSQL ã«æ¥ç¶ã§ããŸãã Amazon VPC å
ã«ãããã€ãããã¢ããªã±ãŒã·ã§ã³ã¯ãã€ã³ã¿ãŒãã§ãŒã¹ãšã³ããã€ã³ããä»ããŠãã©ã€ããŒã DNS ãã¹ãåã䜿çšããAurora DSQL ã«å®å
šã«ã¢ã¯ã»ã¹ã§ããŸãã ããã«ããããã©ãã£ãã¯ã¯ AWS ãããã¯ãŒã¯å
ã«å®å
šã«éããããã»ãã¥ãªãã£ãšããã©ãŒãã³ã¹ã®äž¡æ¹ãåäžããŸãã PrivateLink ã€ã³ã¿ãŒãã§ãŒã¹ãšã³ããã€ã³ãã®äœææé ã®è©³çްã«ã€ããŠã¯ã AWS PrivateLink ã䜿çšãã Amazon Aurora DSQL ã¯ã©ã¹ã¿ãŒã®ç®¡çãšæ¥ç¶ ããåç
§ãã ããã PrivateLink ã€ã³ã¿ãŒãã§ã€ã¹ãšã³ããã€ã³ããèšå®ããããæ¬¡ã®ã¹ãããã§ã¯ã詳现㪠ID ããŒã¹ã®å¶åŸ¡ãéã㊠Aurora DSQL ã¯ã©ã¹ã¿ãŒãžã®ã¢ã¯ã»ã¹ãå¶åŸ¡ããã¡ã«ããºã ãæ€èšããŸãã VPC ãšã³ããã€ã³ãããªã·ãŒã䜿çšããããŒã¿ããŒã¹ã¢ã¯ã»ã¹ã®å¶é VPC ãšã³ããã€ã³ãããªã·ãŒ ã䜿çšããããšã§ããããã¯ãŒã¯å
ã®ä¿¡é Œããã IAM ããªã³ã·ãã«ãšãªãœãŒã¹ã«ã®ã¿ã¢ã¯ã»ã¹ãèš±å¯ããå
ç¢ãª ããŒã¿å¢ç ãå®çŸ©ã§ããŸãã ãã®ã¢ãããŒãã«ãããäžæ£ã¢ã¯ã»ã¹ã®ãªã¹ã¯ãæå°éã«æããAurora DSQL ã¯ã©ã¹ã¿ãŒãžã®ã¢ã¯ã»ã¹æ¹æ³ãããªã·ãŒã«åºã¥ããå³å¯ãªå¶åŸ¡ãã§ããŸãã 以äžã®äŸã§ã¯ãæ¥ç¶ãªã¯ãšã¹ããç¹å®ã® IAM ããŒã«ããçºä¿¡ãããŠããªãå Žåã«ãAurora DSQL ã¯ã©ã¹ã¿ãŒãžã®ã¢ã¯ã»ã¹ãæåŠããã¢ã€ãã³ãã£ãã£ããŒã¹ã® IAM ããªã·ãŒãäœæããæ¹æ³ã瀺ããŸãã ãã®ããªã·ãŒã§ã¯ã "Effect": "Deny" æ¡ä»¶ã«ãããä¿¡é Œããã IAM ããŒã« EC2Role 以å€ããã®ãªã¯ãšã¹ãããããã¯ããŸãã åæã«ããã®ããªã·ãŒã¯ examplecluster Aurora DSQL ã¯ã©ã¹ã¿ãŒã«å¯Ÿãã dsql:DbConnect ããã³ dsql:DbConnectAdmin ã¢ã¯ã·ã§ã³ã«é©çšãããŸãã ãã®ã¢ãããŒãã«ãããæ¿èªããã IAM ããŒã«ã䜿çšããæ¥ç¶ã®ã¿ãèš±å¯ãããããšã確å®ã«ããŸãã { "Statement": [ { "Effect": "Deny", "Principal": "*", "Action": "*", "Resource": "arn:aws:dsql: <AWS-Region> : <account-id> :cluster/ examplecluster ", "Condition": { "StringNotEquals": { "aws:PrincipalArn": "arn:aws:iam:::role/ EC2Role " } } }, { "Effect": "Allow", "Principal": "*", "Action": [ "dsql:DbConnect", "dsql:DbConnectAdmin" ], "Resource": "arn:aws:dsql: <AWS-Region> : <account-id> :cluster/ examplecluster " } ] } èªå¯ãããŠããªã IAM ããŒã«ã䜿çšãã Aurora DSQL æ¥ç¶ã®ãã¹ã åè¿°ã® VPC ãšã³ããã€ã³ãããªã·ãŒãæå³ãããšããã«æ©èœããŠããããšã確èªãããããèš±å¯ãããŠããªã IAM ããŒã«ã䜿çšã㊠Amazon EC2 ã€ã³ã¹ã¿ã³ã¹ãã Aurora DSQL ã¯ã©ã¹ã¿ãŒãžã®æ¥ç¶ã詊ã¿ãŸãã ãã®å Žåãã€ã³ã¹ã¿ã³ã¹ã«é¢é£ä»ããããŠããããŒã« ( ec2-admin-role ) ã¯ãVPC ãšã³ããã€ã³ãããªã·ãŒã§æç€ºçã«èš±å¯ãããŠããããŒã« ( ec2-role ) ãšã¯ç°ãªããŸãã ãŸããã€ã³ã¹ã¿ã³ã¹ã«é¢é£ä»ããããŠãã IAM ããŒã«ã確èªããŸãããïŒ [root@ip-10-0-0-34 ~ ]# TOKEN=$(curl --silent -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600") [root@ip-10-0-0-34 ~ ]# curl --silent -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/iam/security-credentials/ ec2-admin-role æ¥ç¶ãã©ã¡ãŒã¿ã以äžã®ããã«èšå®ããŸãã # Set environment variables export CLUSTERID=your-cluster-id export REGION=us-east-1 export SERVICE_IDENTIFIER=dsql-fnh4 # This should match the identifier in your service name # Construct the hostname export HOSTNAME="$CLUSTERID.$SERVICE_IDENTIFIER.$REGION.on.aws" # Generate authentication token export PGPASSWORD=$(aws dsql --region $REGION generate-db-connect-admin-auth-token --hostname $HOSTNAME) ããã§ã¯æ¥ç¶ããŠçµæã確èªããŠã¿ãŸãããïŒ [root@ip-10-0-0-34 ~ ]# psql --d postgres --h $HOSTNAME --U admin psql: error: connection to server at "examplecluster.dsql-fnh4.us-east-1.on.aws" (10.0.0.0), port 5432 failed: FATAL: unable to accept connection, access deniedDETAIL: Session Id: sfs65e33upgza5iywqh64wd7sq HINT: User: arn:aws:sts::123456789012:assumed-role/ec2-admin-role/i-XXXXXXXXXXX is not authorized to perform: dsql:DbConnectAdmin on resource: arn:aws:dsql:us-east-1:123456789012:cluster/examplecluster with an explicit deny in a VPC endpoint policy VPC ãšã³ããã€ã³ãããªã·ãŒã¯ãæš©éã®ãªã IAM ããŒã« ( ec2-admin-role ) ã®ã¢ã¯ã»ã¹ãæ£ããæåŠããŸããã èš±å¯ããã IAM ããŒã«ã䜿çšãã Aurora DSQL æ¥ç¶ã®ãã¹ã VPC ãšã³ããã€ã³ãããªã·ãŒãæå³ãã IAM ã¢ã€ãã³ãã£ãã£ã«å¯ŸããŠã¢ã¯ã»ã¹ãèš±å¯ããŠããããšãæ€èšŒãããããæ¿èªããã IAM ããŒã« ( ec2-role ) ã§èšå®ããã Amazon EC2 ã€ã³ã¹ã¿ã³ã¹ããæ¥ç¶ãéå§ããŸãã ãŸããã€ã³ã¹ã¿ã³ã¹ã«é¢é£ä»ãããã IAM ããŒã«ã確èªããŸãã [root@ip-10-0-0-40 ~ ]# TOKEN=$(curl --silent -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600") [root@ip-10-0-0-40 ~ ]# curl --silent -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/iam/security-credentials ec2-role ããã«ãããAmazon EC2 ã€ã³ã¹ã¿ã³ã¹ãèš±å¯ããã IAM ããŒã« ( ec2-role ) ã䜿çšããŠããããšã確èªã§ããŸãã æ¬¡ã«ãæ¥ç¶ãã©ã¡ãŒã¿ãèšå®ããAurora DSQL ã¯ã©ã¹ã¿ãŒãžã®æ¥ç¶ãéå§ããŸãã export PGSSLMODE=require export PGPASSWORD=$(aws dsql --region $REGION generate-db-connect-admin-auth-token â hostname $HOSTNAME) psql --d postgres --h $HOSTNAME --U admin psql (15.6, server 16.9) WARNING: psql major version 15, server major version 16. Some psql features might not work. SSL connection (protocol: TLSv1.3, cipher: TLS_AES_128_GCM_SHA256, compression: off) Type "help" for help. postgres=> select current_user ; current_user ---------------- admin (1 row) ãªã¯ãšã¹ããæ¿èªããã IAM ããŒã«ããçºä¿¡ãããå ŽåãVPC ãšã³ããã€ã³ãããªã·ãŒã«ãã£ãŠã¢ã¯ã»ã¹ãæ£ããèš±å¯ãããæ¥ç¶ã¯æ³å®éãã«æåããŸãã ã»ãã¥ãªãã£ã°ã«ãŒãã䜿çšãã Aurora DSQL ãžã®ãã©ãã£ãã¯ã®å¶é ã»ãã¥ãªãã£ã°ã«ãŒãã¯ãã€ã³ããŠã³ããšã¢ãŠãããŠã³ãã®äž¡æ¹ã®ãã©ãã£ãã¯ãå¶åŸ¡ãããAWS ãªãœãŒã¹ã®ä»®æ³ãã¡ã€ã¢ãŠã©ãŒã«ãšããŠæ©èœããŸãã Aurora DSQL PrivateLink VPC ãšã³ããã€ã³ã (ã€ã³ã¿ãŒãã§ã€ã¹ãšã³ããã€ã³ã) ã䜿çšããå Žåãã»ãã¥ãªãã£ã°ã«ãŒã㯠VPC å
ã®ç¹å®ã®ã³ã³ãã¥ãŒãã£ã³ã°ãªãœãŒã¹ãIP ç¯å²ããŸãã¯ãµãããããžã®ã¯ã©ã¹ã¿ãŒã¢ã¯ã»ã¹ãå¶éãã匷åãªã¡ã«ããºã ãæäŸããŸãã ãã®ã»ã¯ã·ã§ã³ã§ã¯ãã»ãã¥ãªãã£ã°ã«ãŒãã䜿çšã㊠Aurora DSQL ã¯ã©ã¹ã¿ãŒãžã®æ¥ç¶ãå¶åŸ¡ãããã¹ãã·ããªãªãéããŠèšå®ãé ã远ã£ãŠèª¬æããŸãã Amazon EC2 ã€ã³ã¹ã¿ã³ã¹ã«é¢é£ä»ããããã»ãã¥ãªãã£ã°ã«ãŒãã®ç¹å® Aurora PostgreSQL ã«æ¥ç¶ã詊ã¿ã Amazon EC2 ã€ã³ã¹ã¿ã³ã¹ã«é¢é£ä»ããããŠããã»ãã¥ãªãã£ã°ã«ãŒãã®ãªã¹ããæåã«ååŸããŸãã # Get EC2 metadata token TOKEN=$(curl --silent -X PUT "http://169.254.169.254/latest/api/token" \ -H "X-aws-ec2-metadata-token-ttl-seconds: 21600") # List attached security groups curl --silent -H "X-aws-ec2-metadata-token: $TOKEN" \ http://169.254.169.254/latest/meta-data/security-groups #Example Output: SecGroup-MySQL SecGroup-PG SecGroup-DSQL PrivateLink ãšã³ããã€ã³ãã®ã»ãã¥ãªãã£ã°ã«ãŒãã®ç¢ºèª 次ã«ãAurora DSQL PrivateLink ãšã³ããã€ã³ãã«çŸåšé¢é£ä»ããããŠããã»ãã¥ãªãã£ã°ã«ãŒãã確èªããŠã¿ãŸãããã aws ec2 describe-vpc-endpoints \ --vpc-endpoint-ids vpce-03ae184e1b904ecb5 \ --query "VpcEndpoints[0].Groups" #Example Output: [ { "GroupId": "sg-0b457c8e654a695f5", "GroupName": " SecGroup-ec2" } ] Amazon EC2 ã€ã³ã¹ã¿ã³ã¹ãš PrivateLink ãšã³ããã€ã³ãã«å
±éã®ã»ãã¥ãªãã£ã°ã«ãŒãããªãããšãããããŸãããã®ãããæç€ºçã«èš±å¯ããªãéããæ¥ç¶ã¯å€±æããå¯èœæ§ãé«ãã§ãã ã»ãã¥ãªãã£ã°ã«ãŒãã®äžäžèŽã«ããæ¥ç¶ã®è©Šè¡ Amazon EC2 ã€ã³ã¹ã¿ã³ã¹ãã Aurora PostgreSQL ã¯ã©ã¹ã¿ãŒãžã®æ¥ç¶ã詊ã¿ãã¢ã¯ã»ã¹ãèš±å¯ãããŠãããã©ããã確èªããããã«ã¿ã€ã ã¢ãŠããèšå®ããŸãã PGCONNECT_TIMEOUT 倿°ãèšå®ããŠã10 ç§åŸã«æ¥ç¶ãã¿ã€ã ã¢ãŠãããããã«ããŠããŸãã export HOSTNAME="$CLUSTERID.$SERVICE_IDENTIFIER.$REGION.on.aws" echo $HOSTNAME examplecluster. dsql-fnh4.us-east-1.on.aws export PGCONNECT_TIMEOUT=10 export PGPASSWORD=$(aws dsql --region $REGION generate-db-connect-admin-auth-token --hostname $HOSTNAME) psql --quiet --username admin --dbname postgres --host $HOSTNAME #Example Output: psql: error: connection to server at " examplecluster. dsql-fnh4.us-east-1.on.aws" (10.0.0.0), port 5432 failed: timeout expired connection to server at " examplecluster. dsql-fnh4.us-east-1.on.aws (10.0.0.0), port 5432 failed: timeout expired äžèšã®åºåã¯ãVPC ãšã³ããã€ã³ãã®å¶éããã ã»ãã¥ãªãã£ã°ã«ãŒãèšå®ã«ãããAmazon EC2 ã€ã³ã¹ã¿ã³ã¹ã Aurora DSQL ãšã³ããã€ã³ãã«å°éã§ããªãããšã瀺ããŠããŸãã ãšã³ããã€ã³ããžã®é©åãªã»ãã¥ãªãã£ã°ã«ãŒãã®å²ãåœãŠ ãšã³ããã€ã³ãã«é©åãªã»ãã¥ãªãã£ã°ã«ãŒããé¢é£ä»ããããã«ãAmazon EC2 ã€ã³ã¹ã¿ã³ã¹ã§äœ¿çšãããŠããã»ãã¥ãªãã£ã°ã«ãŒããç¹å®ããŸãã aws ec2 describe-security-groups \ --filter Name=group-name,Values= SecGroup-DSQL \ --query "SecurityGroups[0].GroupId" #Example Output: "sg-078a098b3069c40de" 次ã«ãæ¢åã® PrivateLink ãšã³ããã€ã³ãã«ã»ãã¥ãªãã£ã°ã«ãŒã sg-078a098b3069c40de ã远å ããŸãã aws ec2 modify-vpc-endpoint \ --vpc-endpoint-id vpce-03ab184c1d904efg5 \ --add-security-group-ids sg-078a098b3069c40de aws ec2 describe-vpc-endpoints \ --vpc-endpoint-ids vpce-privatelink-id \ --query "VpcEndpoints[*].Groups" # Example Output [ { "GroupId": " sg-078a098b3069c40de", "GroupName": " SecGroup-DSQL" } ] Amazon EC2 ã€ã³ã¹ã¿ã³ã¹ããã®æ¥ç¶ã®åãã¹ã æ£ããã»ãã¥ãªãã£ã°ã«ãŒãã VPC ãšã³ããã€ã³ãã«é¢é£ä»ããã®ã§ãAmazon EC2 ã€ã³ã¹ã¿ã³ã¹ããæ¥ç¶ãå詊è¡ããŸãã psql --quiet --username admin --dbname postgres --host $HOSTNAME postgres=>postgres=> select current_user ; current_user -------------- admin Aurora DSQL ã¯ã©ã¹ã¿ãŒãžã®æ¥ç¶ãæåããPrivateLink ãä»ããã¢ã¯ã»ã¹ãæå¹ã«ããããã«ã¯ã»ãã¥ãªãã£ã°ã«ãŒãã®æŽåæ§ãéèŠã§ããããšã確èªã§ããŸããã Aurora DSQL PrivateLink ãšã³ããã€ã³ãã§ã»ãã¥ãªãã£ã°ã«ãŒãã䜿çšããããšã§ãIAM ãš VPC ãšã³ããã€ã³ãããªã·ãŒãè£å®ãããéèŠãªãããã¯ãŒã¯ã¬ãã«ã®ã¢ã¯ã»ã¹å¶åŸ¡ãæäŸãããŸãã Amazon EC2 ã€ã³ã¹ã¿ã³ã¹ãš VPC ã€ã³ã¿ãŒãã§ãŒã¹ãšã³ããã€ã³ãã«é©åã«ã»ãã¥ãªãã£ã°ã«ãŒããé¢é£ä»ããããšã§ãVPC å
ã®ä¿¡é Œã§ãããªãœãŒã¹ã®ã¿ã Aurora DSQL ã¯ã©ã¹ã¿ãŒã«æ¥ç¶ã§ããããã«ãªããŸãã ãã®ã¢ãããŒãã¯ãæå°æš©éã¢ã¯ã»ã¹ã¢ãã«ã宿œããã ãã§ãªããæå³ããªãããŸãã¯èš±å¯ãããŠããªããããã¯ãŒã¯ãã©ãã£ãã¯ãã»ã³ã·ãã£ããªããŒã¿ãæ±ããšã³ããã€ã³ãã«å°éããããšãé²ãããšã§ãå
šäœçãªã»ãã¥ãªãã£äœå¶ã匷åããŸãã Aurora DSQL åãã®è¿œå ã® IAM ããŒã¹ã®ã¢ã¯ã»ã¹å¶åŸ¡ããªã·ãŒ ã»ãã¥ãªãã£ãšç£æ»ã®ç®çã«å¿ããŠãIAM ã§ã¯ Aurora DSQL ã¯ã©ã¹ã¿ãŒã«æ¥ç¶ã§ãããŠãŒã¶ãŒãšããã®æ¥ç¶è©Šè¡ã®çºä¿¡å
ãšãªã VPC ãå¶åŸ¡ããããã®æè»ãªãªãã·ã§ã³ãæäŸããŠããŸãã 以äžã®ãµã³ãã«ããªã·ãŒã¯ãç°å¢ã«åããã VPC ããŒã¹ããã³ã¢ã€ãã³ãã£ãã£ããŒã¹ã®ã¢ã¯ã»ã¹å¶åŸ¡ãé©çšããããã®åºçºç¹ãšããŠæŽ»çšã§ããŸãã IAM ã¯äžçäžã®ããŒã¿ã»ã³ã¿ãŒã®ã³ã³ãã¥ãŒã¿ããã¢ã¯ã»ã¹ããããµãŒãã¹ã§ã çµææŽåæ§ ãšåŒã°ãã忣ã³ã³ãã¥ãŒãã£ã³ã°ã¢ãã«ã䜿çšããŠåäœããŠããããšã«æ³šæããŠãã ããã ããã¯ãIAM ãé¢é£ãã AWS ãµãŒãã¹ã§è¡ã£ãå€æŽ (äŸãã° å±æ§ããŒã¹ã®ã¢ã¯ã»ã¹ã³ã³ãããŒã« (ABAC) ã¿ã°ã®æŽæ°ãªã©) ãããã¹ãŠã®ãšã³ããã€ã³ãã«åæ ããã衚瀺ããããŸã§ã«æéããããå¯èœæ§ãããããšãæå³ããŸãã ãã®é
å»¶ã¯ãããŒã¿ããµãŒããŒéãã¬ããªã±ãŒã·ã§ã³ãŸãŒã³éãAWS ãªãŒãžã§ã³éã§äŒéãããå¿
èŠãããããã«çºçããŸãã ããã«ãIAM ã¯ããã©ãŒãã³ã¹ãåäžãããããã«ãã£ãã·ã¥ã䜿çšããŠãããããã«ãã£ãŠãããªãé
å»¶ãçºçããããšããããŸãã ãã®çµæããã£ãã·ã¥ãããããŒã¿ãæéåãã«ãªããŸã§ã倿Žãå³åº§ã«åæ ãããªãå ŽåããããŸãã 詳现ã«ã€ããŠã¯ã 倿Žãå³åº§ã«åæ ãããªã ãåç
§ããŠãã ããã IAM æ¡ä»¶ã䜿çšãã Aurora DSQL ã¯ã©ã¹ã¿ãŒã®ãããªãã¯ã¢ã¯ã»ã¹ã®ããã㯠Aurora DSQL ã®ãããªãã¯ãšã³ããã€ã³ããžã®ã¢ã¯ã»ã¹ãå³å¯ã«å¶åŸ¡ããããã«ãæ¿èªããã VPC ãŸã㯠PrivateLink ãšã³ããã€ã³ãããçºä¿¡ãããªããã¹ãŠã®ãã©ãã£ãã¯ããããã¯ã§ããŸãã 以äžã® IAM ããªã·ãŒã¯ãæ¡ä»¶ããŒã䜿çšããŠãæ¥ç¶ãªã¯ãšã¹ãã VPC ãŸãã¯ã€ã³ã¿ãŒãã§ãŒã¹ãšã³ããã€ã³ãããçºä¿¡ãããŠããªãå Žåã«ã¢ã¯ã»ã¹ãæåŠããŸãã ãã®äŸã§ã¯ããªã¯ãšã¹ãã«æå¹ãª VPC ãœãŒã¹ IP ( aws:VpcSourceIp )ããœãŒã¹ VPC èå¥å ( aws:SourceVpc )ããŸã㯠VPC ãšã³ããã€ã³ãèå¥å ( aws:SourceVpce ) ãå«ãŸããŠããªãå ŽåããŠãŒã¶ãŒãŸãã¯ããŒã«ãå¿
èŠãª Aurora DSQL ã®ã¢ã¯ã»ã¹èš±å¯ãæã£ãŠããŠããæ¥ç¶ã®è©Šè¡ã¯æåŠãããã€ã³ã¿ãŒãããããã®ã¢ã¯ã»ã¹ããã¹ãŠå¹æçã«é²æ¢ãããŸãã { "Version": "2012-10-17", "Statement": [ { "Resource": "arn:aws:dsql: <AWS-Region> : <account-id> :cluster/ examplecluster ", "Effect": "Deny", "Action": [ "dsql:DbConnect", "dsql:DbConnectAdmin" ], "Condition": { "Null": { "aws:VpcSourceIp": "true", "aws:SourceVpc": "true", "aws:SourceVpce": "true" } } } ] } ãã®ããªã·ãŒã¯ãä¿¡é Œã§ãããã©ã€ããŒããããã¯ãŒã¯ãŸãã¯æç€ºçã«èšå®ããã VPC ã€ã³ã¿ãŒãã§ãŒã¹ãšã³ããã€ã³ãããã®æ¥ç¶ã®ã¿ãèš±å¯ããããšã§ãAurora DSQL ã¯ã©ã¹ã¿ãŒããããªãã¯ã€ã³ã¿ãŒãããã«æå³ããå
¬éãããããšãé²ãã匷åãªã»ãŒãã¬ãŒããšããŠæ©èœããŸãã ä¿¡é Œã§ãã VPC ãžã® Aurora DSQL PrivateLink ã¢ã¯ã»ã¹ã®å¶é Aurora DSQL ãžã®ã¢ã¯ã»ã¹ãäºåã«å®çŸ©ããã VPC ã°ã«ãŒã (äŸãã°ãæ¿èªãããæ¬çªç°å¢ãã¹ããŒãžã³ã°ç°å¢ã®ãããã¯ãŒã¯) ããã®ã¿ã«å¶éããå¿
èŠãããç°å¢ã§ã¯ãä¿¡é Œããã VPC ID ããã®ãªã¯ãšã¹ãã§ãªãéããæ¥ç¶ã®è©Šè¡ãæåŠã§ããŸãã æ¬¡ã®äŸã§ã¯ãæ¥ç¶ã vpc-abc ãŸã㯠vpc-xyz ã®ããããããã§ãªãå Žåã dsql:DbConnect ãš dsql:DbConnectAdmin ã®äž¡æ¹ãæåŠããŸãã { "Version": "2012-10-17", "Statement": [ { "Sid": "RestrictDSQLDBConnectToSpecificVPCs", "Effect": "Deny", "Action": [ "dsql:DbConnect", "dsql:DbConnectAdmin" ], "Resource": "*", "Condition": { "ForAnyValue:StringNotEquals": { "aws:SourceVpc": [ "vpc-abc", "vpc-xyz" ] } } } ] } ãã®ããªã·ãŒãèšå®ããããšã§ãåŒã³åºãå
ãå¿
èŠãª IAM èš±å¯ãæã£ãŠããŠããä»ã® VPC ããã®æ¥ç¶è©Šè¡ã¯ãã¹ãŠæåŠãããŸãã æå®ãã VPC ããã® Aurora DSQL PrivateLink æ¥ç¶ã®å¶é é«åºŠã«ç®¡çãããç°å¢ã§ã¯ãAurora DSQL ãžã®ã¢ã¯ã»ã¹ãåäžã® VPC ããã®ã¿ã«å¶éããå¿
èŠãããå ŽåããããŸãã 以äžã®ããªã·ãŒã§ã¯ãVPC vpc-xyz ããã®æ¥ç¶ä»¥å€ã®ãã¹ãŠã®æ¥ç¶è©Šè¡ãæåŠããŸãã { "Version": "2012-10-17", "Statement": [ { "Sid": "RestrictDSQLDBConnectToVPC", "Effect": "Deny", "Action": [ "dsql:DBConnect" ], "Resource": "*", "Condition": { "StringNotEquals": { "aws:SourceVpc": "vpc-xyz" } } } ] } ããã¯ãAurora DSQL ã¯ã©ã¹ã¿ãŒãžã®ã¢ã¯ã»ã¹ãã瀟å
ã¢ããªã±ãŒã·ã§ã³ã§äœ¿çšãããäžå€®ããŒã¿ãµãŒãã¹ VPC ã®ãããªãå³å¯ã«ç®¡çããã VPC ããã®ã¿ã«å¶éããå¿
èŠãããå Žåã«æçšã§ãã Aurora DSQL PrivateLink ã«ããã VPC ããã³ IAM ããŒã¹ã®ã¢ã¯ã»ã¹å¶åŸ¡ã®é©çš æé«ã¬ãã«ã®å¶åŸ¡ãå®çŸããããã«ãåãããªã·ãŒå
ã§ãããã¯ãŒã¯ããŒã¹ã®å¶éãšã¢ã€ãã³ãã£ãã£ããŒã¹ã®å¶éã®äž¡æ¹ãçµã¿åãããããšãã§ããŸãã æ¬¡ã®äŸã§ã¯ããªã¯ãšã¹ãã vpc-xyz ããçºä¿¡ãããIAM ããŒã« ApprovedRole ãŸãã¯ãŠãŒã¶ãŒ ApprovedUser ã®ããããã䜿çšããå Žåã«ã®ã¿ã dsql:DbConnect ãèš±å¯ããŸãã { "Version": "2012-10-17", "Statement": [ { "Sid": "RestrictDSQLDBConnectByVPCAndPrincipal", "Effect": "Allow", "Action": [ "dsql:DBConnect" ], "Resource": "*", "Condition": { "StringEquals": { "aws:SourceVpc": "vpc-xyz", "aws:PrincipalArn": [ "arn:aws:iam::444455556666:role/ApprovedRole", "arn:aws:iam::444455556666:user/ApprovedUser" ] } } } ] } ãã®ã¢ãããŒãã§ã¯ãæ¿èªããã VPC ããã®ãªã¯ãšã¹ãã§ãã£ãŠããä¿¡é Œããã IAM äž»äœã® 1 ã€ããçºè¡ãããå¿
èŠããããŸãã ããã«ãããAurora DSQL ãžã®ã¢ã¯ã»ã¹ãèš±å¯ããåã«ãID ãšãããã¯ãŒã¯ã®èµ·ç¹ãçµã¿åãããããšã§ã匷åãªå€å±€é²åŸ¡ãå®çŸããŸãã ã»ãã¥ãªãã£ã®ãã¹ããã©ã¯ãã£ã¹ Aurora DSQL çšã« PrivateLink ãèšå®ããéã¯ãããŒã¿ãšã€ã³ãã©ã¹ãã©ã¯ãã£ãä¿è·ããããã«ãè€æ°ã®ã¬ã€ã€ãŒã§ã¢ã¯ã»ã¹å¶åŸ¡ãå®è£
ããããšãéèŠã§ããå
šäœçãªã»ãã¥ãªãã£å¯Ÿçã匷åããããã«ã以äžã® ã»ãã¥ãªãã£ã®ãã¹ããã©ã¯ãã£ã¹ ãæ€èšããŠãã ããïŒ ã»ãã¥ãªãã£ã°ã«ãŒã â VPC ã€ã³ã¿ãŒãã§ãŒã¹ãšã³ããã€ã³ãã«å³å¯ã«å®çŸ©ãããã»ãã¥ãªãã£ã°ã«ãŒããé¢é£ä»ããŸãããããã¯ãæ¿èªããã Amazon EC2 ã€ã³ã¹ã¿ã³ã¹ãã¢ããªã±ãŒã·ã§ã³ãµãããããªã©ãVPC å
ã®ç¹å®ã®ä¿¡é Œã§ãããªãœãŒã¹ããã®ãã©ãã£ãã¯ã®ã¿ãèš±å¯ããPostgreSQL ã®å Žåã¯éåžž TCP 5432 ãªã©ãå¿
èŠãªããŒããžã®ã¢ã¯ã»ã¹ãå¶éããå¿
èŠããããŸãã IAM ããªã·ãŒ â VPC ãšã³ããã€ã³ãã®äœæã倿Žãåé€ãå¶åŸ¡ãã IAM ããªã·ãŒãå®çŸ©ããããšã§ãæå°æš©éã¢ã¯ã»ã¹ã宿œããŸããããã«ãããæ¿èªããããšã³ããŠãŒã¶ãŒãšãµãŒãã¹ã®ã¿ã Aurora DSQL ã¯ã©ã¹ã¿ãŒãžã®ãããã¯ãŒã¯ã¢ã¯ã»ã¹ã管çã§ããããã«ãªããŸãã ãããã¯ãŒã¯ ACL â ãããã¯ãŒã¯ ACL ã䜿çšããŠãã¹ããŒãã¬ã¹ãªãµããããã¬ãã«ã®ãã©ãã£ãã¯ãã£ã«ã¿ãªã³ã°ãæäŸããŸããã»ãã¥ãªãã£ã°ã«ãŒããšäœµããŠè¿œå ã®ä¿è·å±€ãæäŸãããããVPC ãšã³ããã€ã³ãã®ãããã¯ãŒã¯ã€ã³ã¿ãŒãã§ãŒã¹ããã¹ããããµããããã«å¿
èŠãªçä¿¡ããã³çºä¿¡ãã©ãã£ãã¯ã®ã¿ãèš±å¯ããããã«ãããã¯ãŒã¯ ACL ãèšå®ããŸãã ãããã®ãã¹ããã©ã¯ãã£ã¹ãçµã¿åãããããšã§ãAWS ç°å¢å
ã® Aurora DSQL æ¥ç¶ãä¿è·ãããå
ç¢ãªå€å±€é²åŸ¡æŠç¥ãæ§ç¯ã§ããŸãã ãããã€èšç»ã«é¢ããèæ
®äºé
Aurora DSQL ã PrivateLink ã§ãããã€ããéã¯ã以äžã®ç¹ãèæ
®ããŠãã ããïŒ å
±æãšã³ããã€ã³ã â åããµãŒãã¹åã䜿çšããå Žåãè€æ°ã® Aurora DSQL ã¯ã©ã¹ã¿ãŒã§ 1 ã€ã® PrivateLink ã€ã³ã¿ãŒãã§ãŒã¹ãšã³ããã€ã³ããå
±æã§ããŸããããã«ãããæ¥ç¶ãç°¡çŽ åãããéçšãªãŒããŒããããåæžã§ããŸãã ãªãŒãžã§ã³ã®ç¯å² â PrivateLink ãšã³ããã€ã³ãã¯ãªãŒãžã§ã³åºæã§ããåäžãªãŒãžã§ã³å
ã® Aurora DSQL ã¯ã©ã¹ã¿ãŒã«ã®ã¿ã¢ã¯ã»ã¹ã§ããŸããPrivateLink ãä»ãããªãŒãžã§ã³éã¢ã¯ã»ã¹ã¯ãµããŒããããŠããŸããã ã³ã¹ãã«é¢ããèæ
®äºé
â ã€ã³ã¿ãŒãã§ãŒã¹ãšã³ããã€ã³ããšããŒã¿åŠçã®æéãå«ããæšæºç㪠PrivateLink ã®æéãé©çšãããŸããPrivateLink ã®äœ¿çšæã¯ Aurora DSQL ã®äœ¿çšæãšã¯å¥ã«è«æ±ããããããã³ã¹ãèšç»ã«å«ããå¿
èŠããããŸãã æ¥ç¶å¶é â PrivateLink ãšã³ããã€ã³ããä»ããŠåæã«ç¢ºç«ã§ããæ¥ç¶æ°ã¯ã Aurora DSQL ã®æ¥ç¶å¶é ã«ãã£ãŠå¶éãããŸããã¹ããããªã³ã°ãæ¥ç¶ãšã©ãŒãé¿ãããããã¯ãŒã¯ããŒãã®èšèšããããã®å¶éã«é©åããŠããããšã確èªããŠãã ããã ãããã®èæ
®äºé
ãæ©æã«çè§£ããããšã§ãAurora DSQL ãš PrivateLink ãäžå¿ãšãããå®å
šã§ã¹ã±ãŒã©ãã«ããã€ã³ã¹ãå¹çã®é«ãã¢ãŒããã¯ãã£ãèšèšããããšãã§ããŸãã ãŸãšã ãã®æçš¿ã§ã¯ããããªãã¯ãšã³ããã€ã³ããš PrivateLink ãšã³ããã€ã³ãã®äž¡æ¹ã䜿çšããŠãAurora DSQL ã¯ã©ã¹ã¿ãŒãžã®å®å
šãªæ¥ç¶ãšã¢ã¯ã»ã¹å¶åŸ¡ãå®çŸããæ¹æ³ã«ã€ããŠèª¬æããŸããã VPC å
ããã§ãããªã³ãã¬ãã¹ã®ããŒã¿ã»ã³ã¿ãŒããã§ããAurora DSQL ã«ã¢ã¯ã»ã¹ããéã«ãããã§èª¬æããã¢ãããŒãã䜿çšããããšã§ããã©ãã£ãã¯ããã©ã€ããŒãã«ä¿ã¡ããã现ããã¢ã¯ã»ã¹å¶åŸ¡ã宿œããã»ãã¥ãªãã£ã®ãã¹ããã©ã¯ãã£ã¹ã«æºæ ããããšãã§ããŸãã VPC ã€ã³ã¿ãŒãã§ã€ã¹ãšã³ããã€ã³ããã»ãã¥ãªãã£ã°ã«ãŒããIAM ããªã·ãŒãVPC ãšã³ããã€ã³ãããªã·ãŒã䜿çšããããšã§ãä¿¡é Œã§ãããªãœãŒã¹ãšã¢ã€ãã³ãã£ãã£ã®ã¿ã«ã¢ã¯ã»ã¹ãå¶éããå
ç¢ãªã»ãã¥ãªãã£å¢çãæ§ç¯ã§ããŸãã Aurora DSQL ã®æ¥ç¶ã«é¢ããå®å
šã§ã¹ã±ãŒã©ãã«ãªãœãªã¥ãŒã·ã§ã³ãèšèšããéã¯ããã®èšäºã®ç¥èŠãã¢ãŒããã¯ãã£ã®å€æææãšããŠæŽ»çšããŠãã ããã èè
ã«ã€ã㊠Ranjan Burman Ranjan 㯠AWS ã®ã·ãã¢ããŒã¿ããŒã¹ã¹ãã·ã£ãªã¹ããœãªã¥ãŒã·ã§ã³ã¢ãŒããã¯ããšããŠãå€§èŠæš¡ãªããŒã¿å€æãšè€éãªããŒã¿ããŒã¹ç§»è¡ãå°éãšããŠããŸããAmazon RDS ãš Amazon Aurora ã«é¢ããæ·±ãå°éç¥èãæŽ»ãããããã©ãŒãã³ã¹ãã¹ã±ãŒã©ããªãã£ãã³ã¹ãå¹çãæé©åããããã·ã§ã³ã¯ãªãã£ã«ã«ã§å
ç¢ãªãšã³ã¿ãŒãã©ã€ãºã°ã¬ãŒãã®ããŒã¿ããŒã¹ãœãªã¥ãŒã·ã§ã³ã®èšèšãæ¯æŽããŠããŸãããªã¬ãŒã·ã§ãã«ããŒã¿ããŒã¹ãããŒã¿ãŠã§ã¢ããŠã¹ãããŒã¿åæã«ãããçŽ 20 幎ã®çµéšã掻ãããã客æ§ã®ããŒã¿ã«é¢ãã課é¡ãã¯ã©ãŠãã§ã®ç«¶äºåªäœæ§ã«å€ããããã®ããŒãããŒãšããŠæŽ»åããŠããŸãã Vijay Karumajji Vijay 㯠AWS ã®ããªã³ã·ãã«ããŒã¿ããŒã¹ã¹ãã·ã£ãªã¹ããœãªã¥ãŒã·ã§ã³ã¢ãŒããã¯ããšããŠãã客æ§ãšååããŠã¹ã±ãŒã©ãã«ã§å®å
šãªã¯ã©ãŠããã€ãã£ããªããŒã¿ããŒã¹ã¢ãŒããã¯ãã£ã®èšèšã«åãçµãã§ããŸããåçšããã³ãªãŒãã³ãœãŒã¹ã®ããŒã¿ããŒã¹ã«ããã 20 幎以äžã®çµéšãæã¡ãçµç¹ã®ããŒã¿ãã©ãããã©ãŒã ã®ææ°åãš AWS ãããŒãžãããŒã¿ããŒã¹ãµãŒãã¹ã®äŸ¡å€æå€§åãæ¯æŽããæ·±ãæè¡çå°éç¥èãæäŸããŠããŸããå®éã®ããŒãºã«å¿ããæ°ããããŒã¿ããŒã¹æ©èœã®åœ¢æãšæäŸã®ãããAWS ãµãŒãã¹ããŒã ãšç·å¯ã«é£æºããŠããŸãã