<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>ClouD</title>
    <link>https://engine.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Tue, 9 Jun 2026 23:49:32 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>횲</managingEditor>
    <image>
      <title>ClouD</title>
      <url>https://tistory1.daumcdn.net/tistory/4687195/attach/e1718216ae444e1aaecd3f03728d8b1d</url>
      <link>https://engine.tistory.com</link>
    </image>
    <item>
      <title>nlb endpoint를 이용해 private VPC EC2를 외부로 노출하기</title>
      <link>https://engine.tistory.com/190</link>
      <description>&lt;h1&gt;개요&lt;/h1&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;NAT, IGW가 없는 VPC의 EC2를 외부에 노출시키기 위한 작전&lt;/li&gt;
&lt;li&gt;EC2는 Private Subnet에 있고 IGW, NAT도 없어서 인터넷에서 다운로드가 불가능하다. 이를 위해 TGW를 이용해 인터넷을 사용할 수 있게 할 수 있음&lt;/li&gt;
&lt;li&gt;추가로 EC2에 설치된 애플리케이션인 nginx를 외부에 노출시키기 위해 A VPC에 ALB - Endpoint, B VPC에 internal NLB - EC2 이런 구조로 만드는 것이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;준비물&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;NAT, IGW 없는 B VPC의 Private Subnet에 위치한 Private IP를 단 EC2&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1260&quot; data-origin-height=&quot;759&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oAdpN/dJMcafrSedV/AYQJybJ6rsmWG56Uo7JCqk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oAdpN/dJMcafrSedV/AYQJybJ6rsmWG56Uo7JCqk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oAdpN/dJMcafrSedV/AYQJybJ6rsmWG56Uo7JCqk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoAdpN%2FdJMcafrSedV%2FAYQJybJ6rsmWG56Uo7JCqk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1260&quot; height=&quot;759&quot; data-origin-width=&quot;1260&quot; data-origin-height=&quot;759&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;리스너는 80 포트로 ec2 대상그룹으로 전달하기&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1398&quot; data-origin-height=&quot;232&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b6tatq/dJMcagRRVVK/k8mN3GgjysbCfvbUxhVC1K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b6tatq/dJMcagRRVVK/k8mN3GgjysbCfvbUxhVC1K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b6tatq/dJMcagRRVVK/k8mN3GgjysbCfvbUxhVC1K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb6tatq%2FdJMcagRRVVK%2Fk8mN3GgjysbCfvbUxhVC1K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1398&quot; height=&quot;232&quot; data-origin-width=&quot;1398&quot; data-origin-height=&quot;232&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;internal NLB는 B VPC의 Private Subnet에 위치한다.&lt;/li&gt;
&lt;li&gt;보안그룹으로는 A VPC CIDR 대역을 80 포트 허용한다&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1447&quot; data-origin-height=&quot;263&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bhzHZS/dJMcagdfM3m/ruKenMBQt5tyJDNBvkf0QK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bhzHZS/dJMcagdfM3m/ruKenMBQt5tyJDNBvkf0QK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bhzHZS/dJMcagdfM3m/ruKenMBQt5tyJDNBvkf0QK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbhzHZS%2FdJMcagdfM3m%2FruKenMBQt5tyJDNBvkf0QK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1447&quot; height=&quot;263&quot; data-origin-width=&quot;1447&quot; data-origin-height=&quot;263&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;교차 영역 로드 밸런싱은 꼭 켜둬야한다. 그래야 추후 ALB의 타겟그룹에서 NLB의 엔드포인트 서비스가 지정되었을 때 상태 검사 fail이 안 뜬다&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1116&quot; data-origin-height=&quot;157&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ndI8W/dJMcadt0GaF/8MGsQrYv7bukWFuEObfakk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ndI8W/dJMcadt0GaF/8MGsQrYv7bukWFuEObfakk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ndI8W/dJMcadt0GaF/8MGsQrYv7bukWFuEObfakk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FndI8W%2FdJMcadt0GaF%2F8MGsQrYv7bukWFuEObfakk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1116&quot; height=&quot;157&quot; data-origin-width=&quot;1116&quot; data-origin-height=&quot;157&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1448&quot; data-origin-height=&quot;332&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/drSvoc/dJMcaiWpqMS/kXoDUUwH5FYRF0oryChyWK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/drSvoc/dJMcaiWpqMS/kXoDUUwH5FYRF0oryChyWK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/drSvoc/dJMcaiWpqMS/kXoDUUwH5FYRF0oryChyWK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdrSvoc%2FdJMcaiWpqMS%2FkXoDUUwH5FYRF0oryChyWK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1448&quot; height=&quot;332&quot; data-origin-width=&quot;1448&quot; data-origin-height=&quot;332&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;엔드포인트 서비스 생성&lt;/h2&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;VPC &amp;gt; 엔드포인트 서비스 로 접근하기&lt;/li&gt;
&lt;li&gt;로드밸런서 유형에서 네트워크 선택하면 연결 가능한 internal NLB가 나타난다&lt;/li&gt;
&lt;li&gt;지원 리전을 굳이 설정 안 해도 됨.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;412&quot; data-origin-height=&quot;207&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d2n2F4/dJMcadOixtm/0DVMd3eorzb0kL5zv2kfVK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d2n2F4/dJMcadOixtm/0DVMd3eorzb0kL5zv2kfVK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d2n2F4/dJMcadOixtm/0DVMd3eorzb0kL5zv2kfVK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd2n2F4%2FdJMcadOixtm%2F0DVMd3eorzb0kL5zv2kfVK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;412&quot; height=&quot;207&quot; data-origin-width=&quot;412&quot; data-origin-height=&quot;207&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 생성 완료되면 서비스 이름을 기록해둔다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1428&quot; data-origin-height=&quot;469&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bxFEGv/dJMcaf6tAct/cD6u8HcVuJ618XY3TVihB0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bxFEGv/dJMcaf6tAct/cD6u8HcVuJ618XY3TVihB0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bxFEGv/dJMcaf6tAct/cD6u8HcVuJ618XY3TVihB0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbxFEGv%2FdJMcaf6tAct%2FcD6u8HcVuJ618XY3TVihB0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1428&quot; height=&quot;469&quot; data-origin-width=&quot;1428&quot; data-origin-height=&quot;469&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5. 승인이 필요하다면 엔드포인트 서비스의 &amp;lt;엔드포인트 연결&amp;gt; 탭에서 진행하면 된다. 이미 승인해서 선택할 수 없지만, &amp;lt;엔드포인트 연결 요청 수락&amp;gt;을 선택하면 됨.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1418&quot; data-origin-height=&quot;232&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/RSjDz/dJMcaaREEjw/ZC2T0qkoKvHvkc2CQ4BKyk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/RSjDz/dJMcaaREEjw/ZC2T0qkoKvHvkc2CQ4BKyk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/RSjDz/dJMcaaREEjw/ZC2T0qkoKvHvkc2CQ4BKyk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRSjDz%2FdJMcaaREEjw%2FZC2T0qkoKvHvkc2CQ4BKyk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1418&quot; height=&quot;232&quot; data-origin-width=&quot;1418&quot; data-origin-height=&quot;232&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;엔드포인트&lt;/h2&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;엔드포인트 생성하기 에서 NLB 및 GWLB를 사용하는 엔드포인트 서비스 선택&lt;/li&gt;
&lt;li&gt;서비스 설정에 엔드포인트 서비스 이름 복사한 거 붙여넣기&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1602&quot; data-origin-height=&quot;864&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Fy0np/dJMcaiIRWmC/KKa1OXXLKjSxI2IIrlIRu0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Fy0np/dJMcaiIRWmC/KKa1OXXLKjSxI2IIrlIRu0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Fy0np/dJMcaiIRWmC/KKa1OXXLKjSxI2IIrlIRu0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFy0np%2FdJMcaiIRWmC%2FKKa1OXXLKjSxI2IIrlIRu0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1602&quot; height=&quot;864&quot; data-origin-width=&quot;1602&quot; data-origin-height=&quot;864&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 서브넷은 A VPC의 Public Subnet, Private Subnet 모두 가능하다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1180&quot; data-origin-height=&quot;175&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eLbEq7/dJMcagRRVZ9/bZY4E4DbRFb3qcYWqedk80/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eLbEq7/dJMcagRRVZ9/bZY4E4DbRFb3qcYWqedk80/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eLbEq7/dJMcagRRVZ9/bZY4E4DbRFb3qcYWqedk80/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeLbEq7%2FdJMcagRRVZ9%2FbZY4E4DbRFb3qcYWqedk80%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1180&quot; height=&quot;175&quot; data-origin-width=&quot;1180&quot; data-origin-height=&quot;175&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 보안그룹은 아래에서 만들 ALB의 보안그룹을 HTTP 80으로 허용 하면 된다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1051&quot; data-origin-height=&quot;40&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b9dL9o/dJMcagxxIfe/GfycoH3neycatGvDKYo9p1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b9dL9o/dJMcagxxIfe/GfycoH3neycatGvDKYo9p1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b9dL9o/dJMcagxxIfe/GfycoH3neycatGvDKYo9p1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb9dL9o%2FdJMcagxxIfe%2FGfycoH3neycatGvDKYo9p1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1051&quot; height=&quot;40&quot; data-origin-width=&quot;1051&quot; data-origin-height=&quot;40&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5. 그리고 서브넷 연결된 IPv4 주소를 미리 적어둔다. 이제 이 IP주소가 A VPC의 ALB 타겟이 될 IP이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1218&quot; data-origin-height=&quot;174&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cD3cWZ/dJMcagxxIfv/KL7T6WibhIaevGPlKR0Zk0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cD3cWZ/dJMcagxxIfv/KL7T6WibhIaevGPlKR0Zk0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cD3cWZ/dJMcagxxIfv/KL7T6WibhIaevGPlKR0Zk0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcD3cWZ%2FdJMcagxxIfv%2FKL7T6WibhIaevGPlKR0Zk0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1218&quot; height=&quot;174&quot; data-origin-width=&quot;1218&quot; data-origin-height=&quot;174&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;ALB 생성&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;이제 A VPC에 External ALB를 만들면 된다.&lt;/li&gt;
&lt;li&gt;보안그룹은 일반적으로 하는 HTTP 80 0.0.0.0/0으로 열면 된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;298&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/movMT/dJMcaaREElN/hzFWR9hSO2nTJO5jFBVLe0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/movMT/dJMcaaREElN/hzFWR9hSO2nTJO5jFBVLe0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/movMT/dJMcaaREElN/hzFWR9hSO2nTJO5jFBVLe0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmovMT%2FdJMcaaREElN%2FhzFWR9hSO2nTJO5jFBVLe0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1440&quot; height=&quot;298&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;298&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;타겟그룹&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;사용할 포트는 nginx여서 HTTP:80으로 했고, 타겟그룹은 위에서 적어둔 IP 주소로 타겟이 되는 것이다.&lt;/li&gt;
&lt;li&gt;대상 유형은 반드시 IP로 설정하기&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1401&quot; data-origin-height=&quot;245&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cM5yvk/dJMcaihP2bH/XWR5eHi7CkBGn4KFtwVFR1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cM5yvk/dJMcaihP2bH/XWR5eHi7CkBGn4KFtwVFR1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cM5yvk/dJMcaihP2bH/XWR5eHi7CkBGn4KFtwVFR1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcM5yvk%2FdJMcaihP2bH%2FXWR5eHi7CkBGn4KFtwVFR1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1401&quot; height=&quot;245&quot; data-origin-width=&quot;1401&quot; data-origin-height=&quot;245&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;결과&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;ALB DNS로 들어가면 웹 페이지가 정상적으로 나타난다. EC2가 있는 VPC는 IGW도 NAT도 없지만, endpoint service와 인터넷과 연결되는 외부 ALB를 통해 EC2의 nginx 애플리케이션이 외부로 노출이 가능한 것이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1439&quot; data-origin-height=&quot;343&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bkaONS/dJMcagYBiPS/P8K241DgJykWBEBbdun62K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bkaONS/dJMcagYBiPS/P8K241DgJykWBEBbdun62K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bkaONS/dJMcagYBiPS/P8K241DgJykWBEBbdun62K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbkaONS%2FdJMcagYBiPS%2FP8K241DgJykWBEBbdun62K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1439&quot; height=&quot;343&quot; data-origin-width=&quot;1439&quot; data-origin-height=&quot;343&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;정리&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;ALB&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1430&quot; data-origin-height=&quot;324&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cwALfu/dJMcabpt4T4/Wmg36j1kIhHHhy1IT8nxck/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cwALfu/dJMcabpt4T4/Wmg36j1kIhHHhy1IT8nxck/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cwALfu/dJMcabpt4T4/Wmg36j1kIhHHhy1IT8nxck/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcwALfu%2FdJMcabpt4T4%2FWmg36j1kIhHHhy1IT8nxck%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1430&quot; height=&quot;324&quot; data-origin-width=&quot;1430&quot; data-origin-height=&quot;324&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;NLB&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1065&quot; data-origin-height=&quot;245&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cp0Pp5/dJMcagj1C3n/GxtxkkGNM1M5VCtqGzkfpk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cp0Pp5/dJMcagj1C3n/GxtxkkGNM1M5VCtqGzkfpk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cp0Pp5/dJMcagj1C3n/GxtxkkGNM1M5VCtqGzkfpk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcp0Pp5%2FdJMcagj1C3n%2FGxtxkkGNM1M5VCtqGzkfpk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1065&quot; height=&quot;245&quot; data-origin-width=&quot;1065&quot; data-origin-height=&quot;245&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>AWS</category>
      <category>dmz vpc</category>
      <category>endpoint service</category>
      <category>external alb internal nlb</category>
      <category>NLB</category>
      <category>nlb alb</category>
      <category>nlb endpoint service</category>
      <category>tgw 연결</category>
      <category>vpc tgw</category>
      <category>vpc without internet</category>
      <category>vpc without nat</category>
      <author>횲</author>
      <guid isPermaLink="true">https://engine.tistory.com/190</guid>
      <comments>https://engine.tistory.com/190#entry190comment</comments>
      <pubDate>Tue, 27 Jan 2026 16:32:49 +0900</pubDate>
    </item>
    <item>
      <title>Transit Gateway 이용해 중앙집중형 VPC에서 인터넷 이용하기</title>
      <link>https://engine.tistory.com/189</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;Transit Gateway는 클라우드용 중앙 집중식 라우터(Hub)이다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예전에는 VPC Peering을 통해서 VPC 간에 하나하나 연결을 다 했어야 했는데 이제는 Transit Gateway를 이용해서 전이적 통신이 가능해졌다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;암튼 Transit Gateway 설명은 그렇고, 얘는 VPC와 VPN, Peering, Direct Connect와 연결 가능하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;내가 얘기하고 싶은 건 하나의 리전 안에 VPC가 두 개가 있을 때 A VPC에만 인터넷 게이트웨이와 NAT 게이트웨이가 있고 B VPC는 외부와 통신 가능한 망이 하~나도 없을 때 Transit Gateway를 이용해 어떻게 할 수 있는지다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;A VPC&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Internet Gateway 있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- NAT Gateway 있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Public Subnet 있음&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1380&quot; data-origin-height=&quot;402&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/KMOfY/dJMcadm76aw/J2N3XQm9nQayin8J7wEsaK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/KMOfY/dJMcadm76aw/J2N3XQm9nQayin8J7wEsaK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/KMOfY/dJMcadm76aw/J2N3XQm9nQayin8J7wEsaK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKMOfY%2FdJMcadm76aw%2FJ2N3XQm9nQayin8J7wEsaK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1380&quot; height=&quot;402&quot; data-origin-width=&quot;1380&quot; data-origin-height=&quot;402&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;B VPC&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Internet Gateway 없음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- NAT Gateway 없음&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- Private Subnet만 존재&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image1.png&quot; data-origin-width=&quot;1174&quot; data-origin-height=&quot;269&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cm9XWR/dJMcaaYiQdJ/1txd2JwPFBBmgg0vDRBpQK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cm9XWR/dJMcaaYiQdJ/1txd2JwPFBBmgg0vDRBpQK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cm9XWR/dJMcaaYiQdJ/1txd2JwPFBBmgg0vDRBpQK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcm9XWR%2FdJMcaaYiQdJ%2F1txd2JwPFBBmgg0vDRBpQK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1174&quot; height=&quot;269&quot; data-filename=&quot;image1.png&quot; data-origin-width=&quot;1174&quot; data-origin-height=&quot;269&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;이런 상황이라면 B VPC의 인스턴스에는 접근도 외부에서 뭔가 다운로드 하는 것조차도 불가능하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;근데 상식적으로 그럴 순 없으니까 우리는 외부와 연결 가능한 A VPC를 이용해서 인터넷을 사용할 거다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇게 하기 위해선 VPC Peering도 할 수 있겠지만, 여기에선 Transit Gateway를 사용하고자 한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Transit_Gateway_260109.png&quot; data-origin-width=&quot;2172&quot; data-origin-height=&quot;1315&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/etW3Y2/dJMcahb2F5q/UfsM1CK36T7GZUInOKrAAK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/etW3Y2/dJMcahb2F5q/UfsM1CK36T7GZUInOKrAAK/img.png&quot; data-alt=&quot;Transit Gateway 아키텍처&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/etW3Y2/dJMcahb2F5q/UfsM1CK36T7GZUInOKrAAK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FetW3Y2%2FdJMcahb2F5q%2FUfsM1CK36T7GZUInOKrAAK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2172&quot; height=&quot;1315&quot; data-filename=&quot;Transit_Gateway_260109.png&quot; data-origin-width=&quot;2172&quot; data-origin-height=&quot;1315&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Transit Gateway 아키텍처&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Transit Gateway 생성하기&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- VPC &amp;gt; Transit Gateway 페이지에서 tgw를 생성한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 기본 라우팅 테이블 연결과 전파는 체크 해도 되고 체크 안 해도 된다. 자동으로 라우팅테이블을 만들 것이냐 아니냐의 차이여서 크게 상관없다. 어차피 우리는 라우팅만 잘 잡아주면 됨&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1087&quot; data-origin-height=&quot;973&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Chdpy/dJMb99ZoNM2/AuUsUWTcli1jBI1NtpuGLK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Chdpy/dJMb99ZoNM2/AuUsUWTcli1jBI1NtpuGLK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Chdpy/dJMb99ZoNM2/AuUsUWTcli1jBI1NtpuGLK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FChdpy%2FdJMb99ZoNM2%2FAuUsUWTcli1jBI1NtpuGLK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1087&quot; height=&quot;973&quot; data-origin-width=&quot;1087&quot; data-origin-height=&quot;973&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;Transit Gateway Attachment 생성하기&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. A VPC의 Transit Gateway Attachment 생성하기&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;1번에서 생성한 TGW 선택&lt;/li&gt;
&lt;li&gt;VPC에서 A VPC 선택하기&lt;/li&gt;
&lt;li&gt;Private Subnet 둘 다 선택해주기. 아무 서브넷이나 상관 없다고는 함. 나는 Private2 서브넷 선택했음&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1092&quot; data-origin-height=&quot;998&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Y901o/dJMcahQEUaN/7kEMAAZHyFxu0DuWuYAVe1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Y901o/dJMcahQEUaN/7kEMAAZHyFxu0DuWuYAVe1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Y901o/dJMcahQEUaN/7kEMAAZHyFxu0DuWuYAVe1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FY901o%2FdJMcahQEUaN%2F7kEMAAZHyFxu0DuWuYAVe1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1092&quot; height=&quot;998&quot; data-origin-width=&quot;1092&quot; data-origin-height=&quot;998&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. B VPC의 Transit Gateway Attachment 생성하기&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;1번에서 생성한 TGW 선택&lt;/li&gt;
&lt;li&gt;VPC에서 B VPC 선택하기&lt;/li&gt;
&lt;li&gt;Private Subnet 둘 다 선택해주기. 어차피 Private Subnet 뿐이라 선택의 폭이 없음&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1082&quot; data-origin-height=&quot;926&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dsTBFG/dJMcabbPvWU/EqEIsIxWHxBfRAl12vQCCK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dsTBFG/dJMcabbPvWU/EqEIsIxWHxBfRAl12vQCCK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dsTBFG/dJMcabbPvWU/EqEIsIxWHxBfRAl12vQCCK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdsTBFG%2FdJMcabbPvWU%2FEqEIsIxWHxBfRAl12vQCCK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1082&quot; height=&quot;926&quot; data-origin-width=&quot;1082&quot; data-origin-height=&quot;926&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;Transit Gateway Route Table 생성하기&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Transit Gateway 라우팅 테이블 생성할 때는 간단히 Transit Gateway만 지정해주면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 만약 Transit Gateway 생성할 때 기본 라우팅 테이블을 지정했다면 자동으로 만들어져있을 것이고, 아니라면 수동으로 만들면 된다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1071&quot; data-origin-height=&quot;395&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/UP2OJ/dJMcahJTIf2/tMOqPqrDvDlpPM1Rb9GnvK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/UP2OJ/dJMcahJTIf2/tMOqPqrDvDlpPM1Rb9GnvK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/UP2OJ/dJMcahJTIf2/tMOqPqrDvDlpPM1Rb9GnvK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FUP2OJ%2FdJMcahJTIf2%2FtMOqPqrDvDlpPM1Rb9GnvK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1071&quot; height=&quot;395&quot; data-origin-width=&quot;1071&quot; data-origin-height=&quot;395&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;라우팅 테이블의 &amp;lt;연결&amp;gt;과 &amp;lt;전파&amp;gt;에 Transit Gateway Attachment를 각각 생성해준다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1419&quot; data-origin-height=&quot;331&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/brELTy/dJMcahb2GyI/v1i8WxUmGDaWaOVKFwRstk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/brELTy/dJMcahb2GyI/v1i8WxUmGDaWaOVKFwRstk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/brELTy/dJMcahb2GyI/v1i8WxUmGDaWaOVKFwRstk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbrELTy%2FdJMcahb2GyI%2Fv1i8WxUmGDaWaOVKFwRstk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1419&quot; height=&quot;331&quot; data-origin-width=&quot;1419&quot; data-origin-height=&quot;331&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1421&quot; data-origin-height=&quot;327&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bk7gvp/dJMcacPlynS/jQQdVlYiZWRuZt6Zy7w64k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bk7gvp/dJMcacPlynS/jQQdVlYiZWRuZt6Zy7w64k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bk7gvp/dJMcacPlynS/jQQdVlYiZWRuZt6Zy7w64k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbk7gvp%2FdJMcacPlynS%2FjQQdVlYiZWRuZt6Zy7w64k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1421&quot; height=&quot;327&quot; data-origin-width=&quot;1421&quot; data-origin-height=&quot;327&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러면 자동으로 &amp;lt;경로&amp;gt;에 A와 B VPC CIDR 대역으로 향하는 TGW ID가 지정되어 있을텐데 여기에 추가로 0.0.0.0/0 인터넷으로 향하는 경우에 A VPC로의 TGW ID가 잡히도록 넣어주면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 0.0.0.0/0 CIDR의 연결이 TGW가 되도록 설정하기&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1092&quot; data-origin-height=&quot;564&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/PNEQ9/dJMcafZA0Fp/aD3KnCxEqOSRuTwaSuMbnK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/PNEQ9/dJMcafZA0Fp/aD3KnCxEqOSRuTwaSuMbnK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/PNEQ9/dJMcafZA0Fp/aD3KnCxEqOSRuTwaSuMbnK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FPNEQ9%2FdJMcafZA0Fp%2FaD3KnCxEqOSRuTwaSuMbnK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1092&quot; height=&quot;564&quot; data-origin-width=&quot;1092&quot; data-origin-height=&quot;564&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1364&quot; data-origin-height=&quot;239&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bzGxb0/dJMcadHrUwZ/AB49KFKHJfFOPneKHQNwa1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bzGxb0/dJMcadHrUwZ/AB49KFKHJfFOPneKHQNwa1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bzGxb0/dJMcadHrUwZ/AB49KFKHJfFOPneKHQNwa1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbzGxb0%2FdJMcadHrUwZ%2FAB49KFKHJfFOPneKHQNwa1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1364&quot; height=&quot;239&quot; data-origin-width=&quot;1364&quot; data-origin-height=&quot;239&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;라우팅 테이블 제어하기&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이젠 VPC 서브넷의 라우팅 테이블을 수정하면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. A VPC의 Public Subnet의 라우팅테이블&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;0.0.0.0/0 &amp;rarr; IGW&lt;/li&gt;
&lt;li&gt;10.1.0.0/16(B VPC대역) &amp;rarr; TGW&lt;/li&gt;
&lt;li&gt;10.10.0.0/16 &amp;rarr; local&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1428&quot; data-origin-height=&quot;373&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/crlTUo/dJMcaa43TH4/h2Kc3Mqv0RgjXoKPVnh3QK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/crlTUo/dJMcaa43TH4/h2Kc3Mqv0RgjXoKPVnh3QK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/crlTUo/dJMcaa43TH4/h2Kc3Mqv0RgjXoKPVnh3QK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcrlTUo%2FdJMcaa43TH4%2Fh2Kc3Mqv0RgjXoKPVnh3QK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1428&quot; height=&quot;373&quot; data-origin-width=&quot;1428&quot; data-origin-height=&quot;373&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. B VPC의 Private Subnet의 라우팅테이블&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;0.0.0.0/0 &amp;rarr; TGW&lt;/li&gt;
&lt;li&gt;10.1.0.0/16 &amp;rarr; local&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1379&quot; data-origin-height=&quot;202&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/s3KGF/dJMcaaxd9Xv/JCkcMCfkKUyWgLvOhk3hKK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/s3KGF/dJMcaaxd9Xv/JCkcMCfkKUyWgLvOhk3hKK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/s3KGF/dJMcaaxd9Xv/JCkcMCfkKUyWgLvOhk3hKK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fs3KGF%2FdJMcaaxd9Xv%2FJCkcMCfkKUyWgLvOhk3hKK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1379&quot; height=&quot;202&quot; data-origin-width=&quot;1379&quot; data-origin-height=&quot;202&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;결론&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;B VPC에 NAT, IGW가 없어도 A VPC의 NAT를 이용해서 B VPC의 EC2에서 인터넷이 가능하게 할 수 있다.&lt;/li&gt;
&lt;li&gt;사진은 B VPC의 EC2 인스턴스에서 인터넷으로 ping 날린 것&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;581&quot; data-origin-height=&quot;244&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cY2q4X/dJMcah4bCPP/0QUPKx5k4MEhWJVkDengTk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cY2q4X/dJMcah4bCPP/0QUPKx5k4MEhWJVkDengTk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cY2q4X/dJMcah4bCPP/0QUPKx5k4MEhWJVkDengTk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcY2q4X%2FdJMcah4bCPP%2F0QUPKx5k4MEhWJVkDengTk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;581&quot; height=&quot;244&quot; data-origin-width=&quot;581&quot; data-origin-height=&quot;244&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Regional NAT는 왜인지 되지 않았다 왜 ? 안되는지 이유는 모르겠으나 Zonal NAT를 사용하니까 잘 됨&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;참고 문서&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://dev.to/hugothomaz/centralizing-internet-output-in-multiple-aws-accounts-with-the-aws-transit-gateway-1ad5&quot;&gt;https://dev.to/hugothomaz/centralizing-internet-output-in-multiple-aws-accounts-with-the-aws-transit-gateway-1ad5&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://yoo11052.tistory.com/170&quot;&gt;https://yoo11052.tistory.com/170&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bigco-growth-diary.tistory.com/33&quot;&gt;https://bigco-growth-diary.tistory.com/33&lt;/a&gt;\&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;끝&lt;/p&gt;</description>
      <category>AWS</category>
      <category>dmz vpc</category>
      <category>hub vpc</category>
      <category>tgw vpc</category>
      <category>tgw 연결</category>
      <category>transit gateway vpc</category>
      <category>transitgateway</category>
      <category>transitgateway attachment</category>
      <category>transitgateway 생성</category>
      <category>transitgateway 연결</category>
      <category>인터넷 없는 vpc</category>
      <author>횲</author>
      <guid isPermaLink="true">https://engine.tistory.com/189</guid>
      <comments>https://engine.tistory.com/189#entry189comment</comments>
      <pubDate>Fri, 9 Jan 2026 17:56:18 +0900</pubDate>
    </item>
    <item>
      <title>CloudFront와 S3 버킷에 없는 객체 불러올 때 오류(index.html, SPA)</title>
      <link>https://engine.tistory.com/188</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;CloudFront에 원본으로 S3와 ALB를 지정할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;보통 프론트엔드는 S3, 백엔드는 ALB 이런 식으로 지정하는데, 프론트엔드 첫페이지로 index.html을 사용한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어 example.com 도메인에 접속하면 example.com/login으로 가게끔 코드단에 설정되어 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;근데 cloudfront 입장에서 /login이라는 객체는 s3에 없어서 403 에러가 뜸&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1086&quot; data-origin-height=&quot;563&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/H4bxX/dJMcacPcMkZ/DOnT0K2c841sPgI7BXews1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/H4bxX/dJMcacPcMkZ/DOnT0K2c841sPgI7BXews1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/H4bxX/dJMcacPcMkZ/DOnT0K2c841sPgI7BXews1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FH4bxX%2FdJMcacPcMkZ%2FDOnT0K2c841sPgI7BXews1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1086&quot; height=&quot;563&quot; data-origin-width=&quot;1086&quot; data-origin-height=&quot;563&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 403 응답을 제어하기 위해서 보통 cloudfront의 오류 페이지 기능을 사용함.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;S3에 저장된&amp;nbsp;index.html 모습&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;573&quot; data-origin-height=&quot;224&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cyXfsn/dJMcag49hPw/QZIooioxDjS1cphXsRYihk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cyXfsn/dJMcag49hPw/QZIooioxDjS1cphXsRYihk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cyXfsn/dJMcag49hPw/QZIooioxDjS1cphXsRYihk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcyXfsn%2FdJMcag49hPw%2FQZIooioxDjS1cphXsRYihk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;573&quot; height=&quot;224&quot; data-origin-width=&quot;573&quot; data-origin-height=&quot;224&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CloudFront의 동작에 s3와 alb가 지정된 모습&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1370&quot; data-origin-height=&quot;201&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/UjQQ9/dJMcagD5vLV/Vzfvenzdc0KNqCfkuoH5nK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/UjQQ9/dJMcagD5vLV/Vzfvenzdc0KNqCfkuoH5nK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/UjQQ9/dJMcagD5vLV/Vzfvenzdc0KNqCfkuoH5nK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FUjQQ9%2FdJMcagD5vLV%2FVzfvenzdc0KNqCfkuoH5nK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1370&quot; height=&quot;201&quot; data-origin-width=&quot;1370&quot; data-origin-height=&quot;201&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오류 페이지 기능을 이용해서 403이 뜨면 index.html 파일로 들어가게끔 설정해둔다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 해야만 example.com 도메인에 들어갔을 때 index.html 파일에 접근되며 프론트 페이지가 잘 보이게된다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;967&quot; data-origin-height=&quot;596&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/coDtfR/dJMcahbUii9/yMImC0elPSCVvH4KwGxXwk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/coDtfR/dJMcahbUii9/yMImC0elPSCVvH4KwGxXwk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/coDtfR/dJMcahbUii9/yMImC0elPSCVvH4KwGxXwk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcoDtfR%2FdJMcahbUii9%2FyMImC0elPSCVvH4KwGxXwk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;967&quot; height=&quot;596&quot; data-origin-width=&quot;967&quot; data-origin-height=&quot;596&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;근데 문제&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;코드 단에서 403 응답이 오면 토큰 refesh 처리가 되는 기능이 있었음 ..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉, 403을 자동으로 200 코드 뜨게 하면 이 토큰 refresh 기능이 아무 의미 없어지는 것이다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오류 페이지를 없애자니 403 에러가 뜨고, 403 에러를 해결하자니 토큰 기능을 할 수 없는 문제가 발생 ..!&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1066&quot; data-origin-height=&quot;561&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bsG58p/dJMb99Sunub/2kdzyeilNL1kkypuJjNYI0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bsG58p/dJMb99Sunub/2kdzyeilNL1kkypuJjNYI0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bsG58p/dJMb99Sunub/2kdzyeilNL1kkypuJjNYI0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbsG58p%2FdJMb99Sunub%2F2kdzyeilNL1kkypuJjNYI0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1066&quot; height=&quot;561&quot; data-origin-width=&quot;1066&quot; data-origin-height=&quot;561&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 할 수 있는 것 : cloudfront edge function에서 default(*)일 경우 함수를 호출하게 설정하는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉, 동작 중 S3와 연결된 동작에 함수를 쓸 수 있게 하는 것&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1428&quot; data-origin-height=&quot;267&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/chDTfn/dJMcajtYFfv/IigH9KH1GK0dhrKYIjC2P0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/chDTfn/dJMcajtYFfv/IigH9KH1GK0dhrKYIjC2P0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/chDTfn/dJMcajtYFfv/IigH9KH1GK0dhrKYIjC2P0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FchDTfn%2FdJMcajtYFfv%2FIigH9KH1GK0dhrKYIjC2P0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1428&quot; height=&quot;267&quot; data-origin-width=&quot;1428&quot; data-origin-height=&quot;267&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;함수는 cloudfront &amp;gt; 함수에서 만들 수 있다. 만들어서 게시, 배포하면 끝&lt;/p&gt;
&lt;pre id=&quot;code_1766024517111&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;function handler(event) {
    var request = event.request;
    var uri = request.uri;

    // 확장자가 없는 SPA 라우트 &amp;rarr; index.html로 rewrite
    if (!uri.includes(&quot;.&quot;)) {
        request.uri = &quot;/index.html&quot;;
    }

    return request;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CloudFront Edge Function을 활용하면 응답 코드와 S3에 없는 객체를 불러오는 오류 코드도 해결이 가능하다!&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1374&quot; data-origin-height=&quot;560&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c3x3DU/dJMcagqxdJ0/g6XDBEX9u2Nim1MA41jhkk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c3x3DU/dJMcagqxdJ0/g6XDBEX9u2Nim1MA41jhkk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c3x3DU/dJMcagqxdJ0/g6XDBEX9u2Nim1MA41jhkk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc3x3DU%2FdJMcagqxdJ0%2Fg6XDBEX9u2Nim1MA41jhkk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1374&quot; height=&quot;560&quot; data-origin-width=&quot;1374&quot; data-origin-height=&quot;560&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CloudFront의 오류 페이지 말고, Edge Function도 써보자&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;끗&lt;/p&gt;</description>
      <category>AWS</category>
      <category>cloudfront 403</category>
      <category>cloudfront edge</category>
      <category>cloudfront function</category>
      <category>cloudfront index.html</category>
      <category>cloudfront s3 403</category>
      <category>cloudfront s3 edge function</category>
      <category>cloudfront s3 index.html</category>
      <category>cloudfront 도메인 403</category>
      <category>cloudfront 오류페이지</category>
      <category>edge function</category>
      <author>횲</author>
      <guid isPermaLink="true">https://engine.tistory.com/188</guid>
      <comments>https://engine.tistory.com/188#entry188comment</comments>
      <pubDate>Thu, 18 Dec 2025 13:12:09 +0900</pubDate>
    </item>
    <item>
      <title>DataSync로 S3에 데이터 이관하기</title>
      <link>https://engine.tistory.com/187</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;DataSync는 보통 S3에 데이터 이관할 때 사용하는 서비스이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약 온프레미스에서 아래 세 가지에 충족하지 않는다면 Site-to-Site VPN을 이용해 DataSync AMI로 EC2를 생성해 구성해야 한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;789&quot; data-origin-height=&quot;460&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/DGkl3/dJMcabJscS9/rKUmS1bIroYGkB602wDlD0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/DGkl3/dJMcabJscS9/rKUmS1bIroYGkB602wDlD0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/DGkl3/dJMcabJscS9/rKUmS1bIroYGkB602wDlD0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDGkl3%2FdJMcabJscS9%2FrKUmS1bIroYGkB602wDlD0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;789&quot; height=&quot;460&quot; data-origin-width=&quot;789&quot; data-origin-height=&quot;460&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Amazon EC2에 에이전트 배포&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;EC2 생성할 때 AMI에서 datasync를 검색해서 가장 최신의 AMI를 선택하기&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1613&quot; data-origin-height=&quot;1062&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/12nr5/dJMcagcVj1L/r8OXgDvW1n4zUTiaJloXSk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/12nr5/dJMcagcVj1L/r8OXgDvW1n4zUTiaJloXSk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/12nr5/dJMcagcVj1L/r8OXgDvW1n4zUTiaJloXSk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F12nr5%2FdJMcagcVj1L%2Fr8OXgDvW1n4zUTiaJloXSk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1613&quot; height=&quot;1062&quot; data-origin-width=&quot;1613&quot; data-origin-height=&quot;1062&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;DataSync AMI로 만든 EC2의 보안그룹
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;HTTP(80)이 인바운드 허용되어 있어야함&lt;/li&gt;
&lt;li&gt;SSH(22)는 에이전트에 직접 접근해서 작업할 때 진행 필요&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1530&quot; data-origin-height=&quot;288&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bAYGGU/dJMcadtGmV0/HMrfabXIVaNKyPlOyVTRr1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bAYGGU/dJMcadtGmV0/HMrfabXIVaNKyPlOyVTRr1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bAYGGU/dJMcadtGmV0/HMrfabXIVaNKyPlOyVTRr1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbAYGGU%2FdJMcadtGmV0%2FHMrfabXIVaNKyPlOyVTRr1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1530&quot; height=&quot;288&quot; data-origin-width=&quot;1530&quot; data-origin-height=&quot;288&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;EC2 만들 때 Public IP 활성화 필수 !&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Public 통신일 경우&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;이 /share/tmp 폴더에 있는 파일을 S3에 옮길 것이다.&lt;/li&gt;
&lt;li&gt;이건 같은 계정에 Public IP가 달린 EC2 인스턴스이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;645&quot; data-origin-height=&quot;193&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bcsOy4/dJMcabJscU2/gWq2uOFgkBFUflAlZbK9kk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bcsOy4/dJMcabJscU2/gWq2uOFgkBFUflAlZbK9kk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bcsOy4/dJMcabJscU2/gWq2uOFgkBFUflAlZbK9kk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbcsOy4%2FdJMcabJscU2%2FgWq2uOFgkBFUflAlZbK9kk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;645&quot; height=&quot;193&quot; data-origin-width=&quot;645&quot; data-origin-height=&quot;193&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Amazon EC2에 에이전트에서 활성화 키 가져오기&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. datasync agent EC2에 접속&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- admin으로 접속해야함&lt;/p&gt;
&lt;pre class=&quot;css&quot;&gt;&lt;code&gt;ssh -i &quot;hyo-key-al2023.pem&quot; admin@ec2-13-125-156-157.ap-northeast-2.compute.amazonaws.com
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 활성화 키를 얻기 위해 0 선택&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;649&quot; data-origin-height=&quot;388&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cRmBbW/dJMcaihu5jt/tSjlxhNCjwndujiqr1iQ9k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cRmBbW/dJMcaihu5jt/tSjlxhNCjwndujiqr1iQ9k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cRmBbW/dJMcaihu5jt/tSjlxhNCjwndujiqr1iQ9k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcRmBbW%2FdJMcaihu5jt%2FtSjlxhNCjwndujiqr1iQ9k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;649&quot; height=&quot;388&quot; data-origin-width=&quot;649&quot; data-origin-height=&quot;388&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. region 입력하기&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;611&quot; data-origin-height=&quot;253&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lw5up/dJMcac9nzuz/vmccjRqSqcvKVeeEyY8QGk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lw5up/dJMcac9nzuz/vmccjRqSqcvKVeeEyY8QGk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lw5up/dJMcac9nzuz/vmccjRqSqcvKVeeEyY8QGk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Flw5up%2FdJMcac9nzuz%2FvmccjRqSqcvKVeeEyY8QGk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;611&quot; height=&quot;253&quot; data-origin-width=&quot;611&quot; data-origin-height=&quot;253&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;4. 1 (Public endpoints) 선택하면 활성화 키를 얻을 수 있음&lt;/div&gt;
&lt;div&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;433&quot; data-origin-height=&quot;125&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/TBjd5/dJMcaf585Lr/7b4DsuUcRJAFermBwRL5k0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/TBjd5/dJMcaf585Lr/7b4DsuUcRJAFermBwRL5k0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/TBjd5/dJMcaf585Lr/7b4DsuUcRJAFermBwRL5k0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FTBjd5%2FdJMcaf585Lr%2F7b4DsuUcRJAFermBwRL5k0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;433&quot; height=&quot;125&quot; data-origin-width=&quot;433&quot; data-origin-height=&quot;125&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;에이전트 등록하기&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;datasync &amp;rarr; 에이전트 생성&lt;/li&gt;
&lt;li&gt;다음과 같이 입력
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;위에서 했던 방식으로도 활성화 키를 얻을 수 있고, 그게 아니라면 아래 사진처럼 datasync AMI의 Public IP를 넣어서 자동으로 가져올 수 있음&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1220&quot; data-origin-height=&quot;712&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/18mck/dJMcaiaJrUi/tP5GIcEGav0MF2txOuBg30/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/18mck/dJMcaiaJrUi/tP5GIcEGav0MF2txOuBg30/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/18mck/dJMcaiaJrUi/tP5GIcEGav0MF2txOuBg30/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F18mck%2FdJMcaiaJrUi%2FtP5GIcEGav0MF2txOuBg30%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1220&quot; height=&quot;712&quot; data-origin-width=&quot;1220&quot; data-origin-height=&quot;712&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;위치 생성&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;NFS(소스가 될 서버)의 Public 주소 입력&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1233&quot; data-origin-height=&quot;550&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/t4YWU/dJMcagRvXIM/ko0Ibd5onhasd0mjUsqfPK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/t4YWU/dJMcagRvXIM/ko0Ibd5onhasd0mjUsqfPK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/t4YWU/dJMcagRvXIM/ko0Ibd5onhasd0mjUsqfPK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Ft4YWU%2FdJMcagRvXIM%2Fko0Ibd5onhasd0mjUsqfPK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1233&quot; height=&quot;550&quot; data-origin-width=&quot;1233&quot; data-origin-height=&quot;550&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;위치를 하나 더 생성해서 Amazon S3로 설정하여 타겟이 될 S3 버킷 설정하기&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1635&quot; data-origin-height=&quot;469&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d0G7le/dJMcaiPiczY/K7eNBCVUkqlSEx5VqorGI1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d0G7le/dJMcaiPiczY/K7eNBCVUkqlSEx5VqorGI1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d0G7le/dJMcaiPiczY/K7eNBCVUkqlSEx5VqorGI1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd0G7le%2FdJMcaiPiczY%2FK7eNBCVUkqlSEx5VqorGI1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1635&quot; height=&quot;469&quot; data-origin-width=&quot;1635&quot; data-origin-height=&quot;469&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참고로 IAM Role에 들어가야할 정책은 대충 다음과 같다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;신뢰관계는 datasync로 설정하면 알아서 AWSDataSyncFullAccess와 AWSDataSyncReadOnlyAccess가 들어감&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1764726272618&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#S3에 접근하기 위해 추가로 들어가야 하는 정책
s3:GetBucketLocation
s3:ListBucket
s3:ListBucketMultipartUploads
s3:AbortMultipartUpload
s3:DeleteObject
s3:GetObject
s3:ListMultipartUploadParts
s3:PutObjectTagging
s3:GetObjectTagging
s3:PutObject&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;태스크 생성&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;소스 위치에서 NFS 서버 설정&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;900&quot; data-origin-height=&quot;450&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/MYhdX/dJMcahXcKIV/iPLDRHmmQtJtmWKXkncjj0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/MYhdX/dJMcahXcKIV/iPLDRHmmQtJtmWKXkncjj0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/MYhdX/dJMcahXcKIV/iPLDRHmmQtJtmWKXkncjj0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMYhdX%2FdJMcahXcKIV%2FiPLDRHmmQtJtmWKXkncjj0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;900&quot; height=&quot;450&quot; data-origin-width=&quot;900&quot; data-origin-height=&quot;450&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 대상 위치에서 S3 선택하기&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1870&quot; data-origin-height=&quot;942&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/OyWr5/dJMb99LCRLM/ru1KSFFmEyxJ1ph1xZAM91/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/OyWr5/dJMb99LCRLM/ru1KSFFmEyxJ1ph1xZAM91/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/OyWr5/dJMb99LCRLM/ru1KSFFmEyxJ1ph1xZAM91/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FOyWr5%2FdJMb99LCRLM%2Fru1KSFFmEyxJ1ph1xZAM91%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1870&quot; height=&quot;942&quot; data-origin-width=&quot;1870&quot; data-origin-height=&quot;942&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 나머지는 다 기본으로 설정해주기&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1356&quot; data-origin-height=&quot;1052&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/CubTf/dJMcagcVkjP/K83TCd1jHGWrQKpkF54MLK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/CubTf/dJMcagcVkjP/K83TCd1jHGWrQKpkF54MLK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/CubTf/dJMcagcVkjP/K83TCd1jHGWrQKpkF54MLK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCubTf%2FdJMcagcVkjP%2FK83TCd1jHGWrQKpkF54MLK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1356&quot; height=&quot;1052&quot; data-origin-width=&quot;1356&quot; data-origin-height=&quot;1052&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1344&quot; data-origin-height=&quot;775&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/brhZ1u/dJMcagcVkjU/Ik79ZqzlkRG91D7bxbeBG1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/brhZ1u/dJMcagcVkjU/Ik79ZqzlkRG91D7bxbeBG1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/brhZ1u/dJMcagcVkjU/Ik79ZqzlkRG91D7bxbeBG1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbrhZ1u%2FdJMcagcVkjU%2FIk79ZqzlkRG91D7bxbeBG1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1344&quot; height=&quot;775&quot; data-origin-width=&quot;1344&quot; data-origin-height=&quot;775&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;마이그레이션 시작&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;시작 - 기본값으로 시작&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1497&quot; data-origin-height=&quot;654&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bw8M7I/dJMcaiIwIvM/Q01pCFQh8A5i33HaHZnfy0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bw8M7I/dJMcaiIwIvM/Q01pCFQh8A5i33HaHZnfy0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bw8M7I/dJMcaiIwIvM/Q01pCFQh8A5i33HaHZnfy0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbw8M7I%2FdJMcaiIwIvM%2FQ01pCFQh8A5i33HaHZnfy0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1497&quot; height=&quot;654&quot; data-origin-width=&quot;1497&quot; data-origin-height=&quot;654&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 버킷에 알아서 들어와있다&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1483&quot; data-origin-height=&quot;338&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d2jwq3/dJMb995Wcod/rc1UcG9TFTSJZcPR2iWpQ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d2jwq3/dJMb995Wcod/rc1UcG9TFTSJZcPR2iWpQ1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d2jwq3/dJMb995Wcod/rc1UcG9TFTSJZcPR2iWpQ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd2jwq3%2FdJMb995Wcod%2Frc1UcG9TFTSJZcPR2iWpQ1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1483&quot; height=&quot;338&quot; data-origin-width=&quot;1483&quot; data-origin-height=&quot;338&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 태스크 기록에서 얼마만에 성공했는지 볼 수 있음&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1455&quot; data-origin-height=&quot;207&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bg52ik/dJMcacO7ekc/gpJ85Rh8iysFA5xPcf4W51/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bg52ik/dJMcacO7ekc/gpJ85Rh8iysFA5xPcf4W51/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bg52ik/dJMcacO7ekc/gpJ85Rh8iysFA5xPcf4W51/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbg52ik%2FdJMcacO7ekc%2FgpJ85Rh8iysFA5xPcf4W51%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1455&quot; height=&quot;207&quot; data-origin-width=&quot;1455&quot; data-origin-height=&quot;207&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;보통 2TB면 33시간 ..? 정도 걸린다고 했던 것 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;로딩이 좀 길 뿐 금방 되긴 하는듯&lt;/p&gt;</description>
      <category>AWS</category>
      <category>AWS DataSync</category>
      <category>aws 데이터</category>
      <category>aws 데이터 이관</category>
      <category>Datasync</category>
      <category>datasync ami</category>
      <category>datasync ec2</category>
      <category>datasync s3</category>
      <category>datasync 데이터 이관</category>
      <category>datasync 방법</category>
      <category>onpremise datasync</category>
      <author>횲</author>
      <guid isPermaLink="true">https://engine.tistory.com/187</guid>
      <comments>https://engine.tistory.com/187#entry187comment</comments>
      <pubDate>Wed, 3 Dec 2025 10:48:57 +0900</pubDate>
    </item>
    <item>
      <title>EC2 인스턴스 nginx에 ACM 인증서 적용하기</title>
      <link>https://engine.tistory.com/186</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;원래 AWS Certificate Manager(ACM)은 API Gateway, CloudFront, ALB 등 AWS 서비스에만 사용 가능했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;근데 내보내기 가능한 공인 인증서 기능이 업데이트 되어서 nginx에 ACM에서 발급 받은 인증서를 적용해보겠다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대부분 블로그는 api 이용해서 인증서 다운 받은 걸 바로 적용하길래 순수 어떻게 적용하는 건지 알아보자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ACM 공인 인증서 관련 내용은 여기로 -&amp;gt; &lt;a href=&quot;https://engine.tistory.com/184&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://engine.tistory.com/184&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1756085504874&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;AWS Certificate Manager 공인 인증서 개념, 발급방법&quot; data-og-description=&quot;ACM 공인 인증서AWS Certificate Manager 신기능, 어디서나 사용할 수 있는 공개 인증서가 출시되었다.2025년 6월 17일, AWS에서 어디에서나 사용할 수 있는 AWS Certificate Manager (ACM) 공개 인증서를 업데이트&quot; data-og-host=&quot;engine.tistory.com&quot; data-og-source-url=&quot;https://engine.tistory.com/184&quot; data-og-url=&quot;https://engine.tistory.com/184&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/b49HLi/hyZCXPU583/bUuItLXkiQMbjr2u7LnJ60/img.png?width=800&amp;amp;height=576&amp;amp;face=0_0_800_576,https://scrap.kakaocdn.net/dn/bvwUDz/hyZC3byLZE/eQ0KPJPeKVBHkLHtyIG47K/img.png?width=800&amp;amp;height=576&amp;amp;face=0_0_800_576,https://scrap.kakaocdn.net/dn/8ZT5D/hyZzJkXZiJ/BqsqzlfXy8ltreNeHw5ea1/img.png?width=1926&amp;amp;height=1046&amp;amp;face=0_0_1926_1046&quot;&gt;&lt;a href=&quot;https://engine.tistory.com/184&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://engine.tistory.com/184&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/b49HLi/hyZCXPU583/bUuItLXkiQMbjr2u7LnJ60/img.png?width=800&amp;amp;height=576&amp;amp;face=0_0_800_576,https://scrap.kakaocdn.net/dn/bvwUDz/hyZC3byLZE/eQ0KPJPeKVBHkLHtyIG47K/img.png?width=800&amp;amp;height=576&amp;amp;face=0_0_800_576,https://scrap.kakaocdn.net/dn/8ZT5D/hyZzJkXZiJ/BqsqzlfXy8ltreNeHw5ea1/img.png?width=1926&amp;amp;height=1046&amp;amp;face=0_0_1926_1046');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;AWS Certificate Manager 공인 인증서 개념, 발급방법&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;ACM 공인 인증서AWS Certificate Manager 신기능, 어디서나 사용할 수 있는 공개 인증서가 출시되었다.2025년 6월 17일, AWS에서 어디에서나 사용할 수 있는 AWS Certificate Manager (ACM) 공개 인증서를 업데이트&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;engine.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;테스트 환경&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- EC2 : Amazon Linux 2023&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 네트워크 : 인터넷 게이트웨이와 연결된 Public Subnet&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;테스트 방법&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. nginx 설치하기&lt;/p&gt;
&lt;pre id=&quot;code_1756085674106&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo apt update &amp;amp;&amp;amp; sudo apt install nginx -y&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. SSL 인증서 저장&lt;/p&gt;
&lt;pre id=&quot;code_1756085698550&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# SSL 디렉터리 생성
sudo mkdir -p /etc/nginx/ssl

# 다운로드한 인증서/키 복사
sudo cp ~/Downloads/certificate.pem /etc/nginx/ssl/
sudo cp ~/Downloads/certificate_chain.pem /etc/nginx/ssl/
sudo cp ~/Downloads/private_key.pem /etc/nginx/ssl/&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. nginx HTTPS 설정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- site-available 폴더에 사용할 도메인 이름으로 된 파일을 생성한다&lt;/p&gt;
&lt;pre id=&quot;code_1756085784134&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo mkdir /etc/nginx/site-available
sudo nano /etc/nginx/sites-available/DOMAIN.kro.kr&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. DOMAIN.kro.kr 파일에 다음 내용을 입력한다.&lt;/p&gt;
&lt;pre id=&quot;code_1756085882866&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;server {
    listen 443 ssl;
    server_name DOMAIN.kro.kr;

    ssl_certificate /etc/nginx/ssl/certificate.pem;
    ssl_certificate_key /etc/nginx/ssl/private_key.pem;
    ssl_trusted_certificate /etc/nginx/ssl/certificate_chain.pem;

    location / {
        root /var/www/html;
        index index.html;
    }
}

server {
    listen 80;
    server_name DOMAIN.kro.kr;
    return 301 https://$host$request_uri;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5. nginx.conf 파일을 변경한다. 이 conf 파일에 site-enabled 폴더의 심볼링 링크를 적용할 수 있도록 해준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;27번째 줄만 추가해줘도 괜찮다.&lt;/p&gt;
&lt;pre id=&quot;code_1756085906132&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo nano /etc/nginx/nginx.conf&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1756086063163&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log notice;
pid /run/nginx.pid;

# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;

events {
    worker_connections 1024;
}
http {
    log_format  main  '$remote_addr - $remote_user [$time_local] &quot;$request&quot; '
                      '$status $body_bytes_sent &quot;$http_referer&quot; '
                      '&quot;$http_user_agent&quot; &quot;$http_x_forwarded_for&quot;';

    access_log  /var/log/nginx/access.log  main;

    sendfile            on;
    tcp_nopush          on;
    keepalive_timeout   65;
    types_hash_max_size 4096;

    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;
    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*; &amp;lt;&amp;lt; 추가

    server {
        listen       80;
        listen       [::]:80;
        server_name  _;
        root         /usr/share/nginx/html;

        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

        error_page 404 /404.html;
        
        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
        }
    }&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;6. 심볼릭 링크 생성 및 nginx 재시작 해준다.&lt;/p&gt;
&lt;pre id=&quot;code_1756086130173&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo ln -s /etc/nginx/sites-available/test.kro.kr /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl restart nginx&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약, pem키가 필요하다고 하면 ACM 인증서 발급받을 때 설정한 비밀번호를 입력하면 된다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;87&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bvNiow/btsP2973mmx/KG6z88MflgQfZzuKkzAxv1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bvNiow/btsP2973mmx/KG6z88MflgQfZzuKkzAxv1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bvNiow/btsP2973mmx/KG6z88MflgQfZzuKkzAxv1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbvNiow%2FbtsP2973mmx%2FKG6z88MflgQfZzuKkzAxv1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;87&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;87&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약 인증서가 암호화 되어서 nginx 적용이 불가능하다거나 하면 다음 명령을 이용해 pem 파일의 암호화를 해제한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이때에도 동일하게 pem 파일의 비밀번호를 입력해야한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;* 파일이름이 바뀌면 4번에서 파일이름을 변경해주는 것 잊지말자 *&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1756086405271&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo openssl rsa -in /etc/nginx/ssl/private_key.pem -out /etc/nginx/ssl/private_key_decrypted.pem&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;731&quot; data-origin-height=&quot;66&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bZuDeN/btsP237O2oR/2nkUNyEc7ZqegjCr3h9OSK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bZuDeN/btsP237O2oR/2nkUNyEc7ZqegjCr3h9OSK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bZuDeN/btsP237O2oR/2nkUNyEc7ZqegjCr3h9OSK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbZuDeN%2FbtsP237O2oR%2F2nkUNyEc7ZqegjCr3h9OSK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;731&quot; height=&quot;66&quot; data-origin-width=&quot;731&quot; data-origin-height=&quot;66&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;730&quot; data-origin-height=&quot;86&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b2Ywzi/btsP25kljdI/zR8KU7x30KtZQDZ9G6PnSk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b2Ywzi/btsP25kljdI/zR8KU7x30KtZQDZ9G6PnSk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b2Ywzi/btsP25kljdI/zR8KU7x30KtZQDZ9G6PnSk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb2Ywzi%2FbtsP25kljdI%2FzR8KU7x30KtZQDZ9G6PnSk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;730&quot; height=&quot;86&quot; data-origin-width=&quot;730&quot; data-origin-height=&quot;86&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;7. 그러면 nginx에 도메인 적용이 되고, 암호화된 통신이 가능해진다!&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image1.png&quot; data-origin-width=&quot;1396&quot; data-origin-height=&quot;404&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/5c5LP/btsP3zZNytn/uTghZ6tNFYxtzlcHwkmfx1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/5c5LP/btsP3zZNytn/uTghZ6tNFYxtzlcHwkmfx1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/5c5LP/btsP3zZNytn/uTghZ6tNFYxtzlcHwkmfx1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F5c5LP%2FbtsP3zZNytn%2FuTghZ6tNFYxtzlcHwkmfx1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1396&quot; height=&quot;404&quot; data-filename=&quot;image1.png&quot; data-origin-width=&quot;1396&quot; data-origin-height=&quot;404&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ACM에서 여러 활용이 가능한 기능이 나온 것 같아 도움이 많이 될 것 같다 !&lt;/p&gt;</description>
      <category>AWS</category>
      <category>ACM</category>
      <category>acm nginx</category>
      <category>acm 인증서</category>
      <category>AWS</category>
      <category>AWS ACM</category>
      <category>ec2 nginx acm</category>
      <category>nginx acm 적용</category>
      <category>nginx https acm</category>
      <category>nginx ssl</category>
      <category>nginx 인증서</category>
      <author>횲</author>
      <guid isPermaLink="true">https://engine.tistory.com/186</guid>
      <comments>https://engine.tistory.com/186#entry186comment</comments>
      <pubDate>Mon, 25 Aug 2025 10:53:59 +0900</pubDate>
    </item>
    <item>
      <title>AWS CodeBuild, CodePipeline Gitlab 소스 연동 오류</title>
      <link>https://engine.tistory.com/185</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;요새 왜ㅐㅐ이렇게 이슈가 많은지 싶지만 언제나 감사하면서 살기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;암튼 CodePipeline이나 Codebuild를 돌리기 위해서는 Source가 필요한데 보통 Github이나 Gitlab을 쓴다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Github 같은 경우 내가 Organizations로 들어가 있다면 소스에서 내 Github 레포지토리를 선택하면 사진처럼 잘 나온다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;403&quot; data-origin-height=&quot;93&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b3Rcr8/btsPmJaAt5d/jyXrLdfh24TsIjj18lPgSK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b3Rcr8/btsPmJaAt5d/jyXrLdfh24TsIjj18lPgSK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b3Rcr8/btsPmJaAt5d/jyXrLdfh24TsIjj18lPgSK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb3Rcr8%2FbtsPmJaAt5d%2FjyXrLdfh24TsIjj18lPgSK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;403&quot; height=&quot;93&quot; data-origin-width=&quot;403&quot; data-origin-height=&quot;93&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;근데 요놈의 Gitlab은 잘 안 써서 잘 모르는데, 내가 멤버로 들어가있는 프로젝트의 레포지토리 목록이 자동으로 안 나타난다&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Gitlab 레포지토리 목록이 안 나타날 때 확인할 것, 설정 해야하는 것에 대해서 알아보자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일단 Gitlab을 소스로 연결하는 방법은 다음과 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문서 참고 : &lt;a href=&quot;https://docs.aws.amazon.com/ko_kr/codepipeline/latest/userguide/connections-gitlab.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://docs.aws.amazon.com/ko_kr/codepipeline/latest/userguide/connections-gitlab.html&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1752734728977&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;GitLab.com 연결 - AWS CodePipeline&quot; data-og-description=&quot;이 기능은 아시아 태평양(홍콩), 아시아 태평양(하이데라바드), 아시아 태평양(자카르타), 아시아 태평양(멜버른), 아시아 태평양(오사카), 아프리카(케이프타운), 중동(바레인), 중동(UAE), 유럽(스&quot; data-og-host=&quot;docs.aws.amazon.com&quot; data-og-source-url=&quot;https://docs.aws.amazon.com/ko_kr/codepipeline/latest/userguide/connections-gitlab.html&quot; data-og-url=&quot;https://docs.aws.amazon.com/ko_kr/codepipeline/latest/userguide/connections-gitlab.html&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/SfkEl/hyZjFv61MW/gLpJX2leYCHTb8PufWuW30/img.png?width=810&amp;amp;height=1105&amp;amp;face=0_0_810_1105,https://scrap.kakaocdn.net/dn/cE5i6n/hyZngapgCh/tlN55OK6LEJKYLaPFrxGN0/img.png?width=1257&amp;amp;height=656&amp;amp;face=0_0_1257_656&quot;&gt;&lt;a href=&quot;https://docs.aws.amazon.com/ko_kr/codepipeline/latest/userguide/connections-gitlab.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://docs.aws.amazon.com/ko_kr/codepipeline/latest/userguide/connections-gitlab.html&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/SfkEl/hyZjFv61MW/gLpJX2leYCHTb8PufWuW30/img.png?width=810&amp;amp;height=1105&amp;amp;face=0_0_810_1105,https://scrap.kakaocdn.net/dn/cE5i6n/hyZngapgCh/tlN55OK6LEJKYLaPFrxGN0/img.png?width=1257&amp;amp;height=656&amp;amp;face=0_0_1257_656');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;GitLab.com 연결 - AWS CodePipeline&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;이 기능은 아시아 태평양(홍콩), 아시아 태평양(하이데라바드), 아시아 태평양(자카르타), 아시아 태평양(멜버른), 아시아 태평양(오사카), 아프리카(케이프타운), 중동(바레인), 중동(UAE), 유럽(스&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;docs.aws.amazon.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 문서 참고해서 connection 연결하면 다음 사진처럼 &quot;나의&quot; 레포지토리는 잘 나온다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 나는 내가 멤버로 들어가있는 프로젝트의 레포지토리를 보고싶단 말이지!&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1204&quot; data-origin-height=&quot;1216&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/8TOk0/btsPn7nHAlD/9xZ1lJZ7gmNomsvxCnH1u0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/8TOk0/btsPn7nHAlD/9xZ1lJZ7gmNomsvxCnH1u0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/8TOk0/btsPn7nHAlD/9xZ1lJZ7gmNomsvxCnH1u0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F8TOk0%2FbtsPn7nHAlD%2F9xZ1lJZ7gmNomsvxCnH1u0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;591&quot; height=&quot;597&quot; data-origin-width=&quot;1204&quot; data-origin-height=&quot;1216&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 리포지토리 칸에 프로젝트 URL을 입력해봤다.&lt;/p&gt;
&lt;pre id=&quot;code_1752735136852&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;https://gitlab.com/PROJECT/REPOSITORY&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 했는데도 안 된단 말이지? CodeConnection에서 찾을 수 없다나 모라나 ..&lt;/p&gt;
&lt;pre id=&quot;code_1752734785885&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Failed to transform source location to CodeConnections location. A connection arn is required for CodeConnections sources&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 AWS 콘솔에서 개발자도구 &amp;gt; 설정 &amp;gt; 생성한 CodeConnection을 삭제했다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image (6).png&quot; data-origin-width=&quot;2210&quot; data-origin-height=&quot;418&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ckQXaP/btsPmSd1PjY/7IY41saNdJL4q4tkKKTHuk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ckQXaP/btsPmSd1PjY/7IY41saNdJL4q4tkKKTHuk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ckQXaP/btsPmSd1PjY/7IY41saNdJL4q4tkKKTHuk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FckQXaP%2FbtsPmSd1PjY%2F7IY41saNdJL4q4tkKKTHuk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2210&quot; height=&quot;418&quot; data-filename=&quot;image (6).png&quot; data-origin-width=&quot;2210&quot; data-origin-height=&quot;418&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 나의 Gitlab 계정에 가서 Settings &amp;gt; Applications &amp;gt; Authorized applications에 있는 연결을 Revoke 시켰다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1271&quot; data-origin-height=&quot;354&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bbv6A5/btsPmqClBpP/WO5bOkC7sJGgMkr5gpbGKK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bbv6A5/btsPmqClBpP/WO5bOkC7sJGgMkr5gpbGKK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bbv6A5/btsPmqClBpP/WO5bOkC7sJGgMkr5gpbGKK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbbv6A5%2FbtsPmqClBpP%2FWO5bOkC7sJGgMkr5gpbGKK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1271&quot; height=&quot;354&quot; data-origin-width=&quot;1271&quot; data-origin-height=&quot;354&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 다시 ...&amp;nbsp; CodeConnection에서 Gitlab 연결 &amp;gt; 소스의 리포지토리에 프로젝트 URL 입력 했는데 이번엔 다른 에러가 나왔다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;웹훅 만드는데 기대하지 못 한 에러가 있다나 뭐라나...&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image (7).png&quot; data-origin-width=&quot;1384&quot; data-origin-height=&quot;586&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/br6IV5/btsPlWBQHFv/1cfrrquuDz4ndBlGujVMP1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/br6IV5/btsPlWBQHFv/1cfrrquuDz4ndBlGujVMP1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/br6IV5/btsPlWBQHFv/1cfrrquuDz4ndBlGujVMP1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbr6IV5%2FbtsPlWBQHFv%2F1cfrrquuDz4ndBlGujVMP1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1384&quot; height=&quot;586&quot; data-filename=&quot;image (7).png&quot; data-origin-width=&quot;1384&quot; data-origin-height=&quot;586&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 사례를 찾아봤는데 웹훅 생성은 최대 20개까지 되고, 어떤 사람은 웹훅 만드는데 4시간 걸렸다길래 이상했지만 일단 기다렸다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;근데 이상한 게 저 위에 에러난건 백엔드 리포지토리이고, 그 전에 code connection 삭제-&amp;gt;생성 후 data 리포지토리는 에러 없이 잘 됐단 말이지 ...?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;왜 data 리포지토리만 Codebuild에 소스가 잘 연결됐는지 이해가 안되서 더 찾아봤다..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Gitlab이 연결 안 되면 가장 대표적인 이슈는 &amp;lt;권한&amp;gt;일 수 있다고 하더라&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;차이점을 알고보니 리포지토리 권한이 Developer와 Maintainer로 달랐던 것이다 ...&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;646&quot; data-origin-height=&quot;340&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/voaph/btsPnmlJqKX/46DqHuMstK02EU4L0352ek/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/voaph/btsPnmlJqKX/46DqHuMstK02EU4L0352ek/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/voaph/btsPnmlJqKX/46DqHuMstK02EU4L0352ek/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fvoaph%2FbtsPnmlJqKX%2F46DqHuMstK02EU4L0352ek%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;646&quot; height=&quot;340&quot; data-origin-width=&quot;646&quot; data-origin-height=&quot;340&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Codebuild든 Codepipeline이든 Webhook으로 트리거 되는 거여서 Webhook에 대한 권한이 있어야 하는데 Developer에겐 권한이 없어서 나타나는 오류였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Gitlab 공식 페이지에선 다음처럼 권한이 부여되어 있다고 나와있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;804&quot; data-origin-height=&quot;660&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cBcv1y/btsPlQ2Dmh4/aYbwPHTNqnu80iDKxZyGv0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cBcv1y/btsPlQ2Dmh4/aYbwPHTNqnu80iDKxZyGv0/img.png&quot; data-alt=&quot;https://docs.gitlab.com/user/permissions/&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cBcv1y/btsPlQ2Dmh4/aYbwPHTNqnu80iDKxZyGv0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcBcv1y%2FbtsPlQ2Dmh4%2FaYbwPHTNqnu80iDKxZyGv0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;804&quot; height=&quot;660&quot; data-origin-width=&quot;804&quot; data-origin-height=&quot;660&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;https://docs.gitlab.com/user/permissions/&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사실 aws docs에는 Gitlab 리포지토리에 Owner 권한이 필요하다고 해서 권한을 Owner로 승격해야하나 고민하고 있었는데 업데이트가 안 된건지.. Maintainer 권한으로 잘 된다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1017&quot; data-origin-height=&quot;90&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nLx8L/btsPns61xhd/i7QMErpQsCUpK3EeqZYnM0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nLx8L/btsPns61xhd/i7QMErpQsCUpK3EeqZYnM0/img.png&quot; data-alt=&quot;https://docs.aws.amazon.com/codebuild/latest/userguide/access-tokens-gitlab-overview.html&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nLx8L/btsPns61xhd/i7QMErpQsCUpK3EeqZYnM0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnLx8L%2FbtsPns61xhd%2Fi7QMErpQsCUpK3EeqZYnM0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1017&quot; height=&quot;90&quot; data-origin-width=&quot;1017&quot; data-origin-height=&quot;90&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;https://docs.aws.amazon.com/codebuild/latest/userguide/access-tokens-gitlab-overview.html&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;lt;정리&amp;gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Gitlab 레포지토리가 Codebuild와 Codepipeline 소스에서 보이지 않는다면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. CodeConnection을 삭제하고, Gitlab Applications 설정에서 revoke 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래도 안 된다면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. Gitlab 레포지토리에 접근가능한 나의 역할이 Maintainer 또는 Owner인지 확인하고, 변경한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;끝&lt;/p&gt;</description>
      <category>AWS</category>
      <category>codebuild gitlab</category>
      <category>codebuild gitlab authoriaztion</category>
      <category>codebuild gitlab 권한</category>
      <category>codebuild gitlab 연동</category>
      <category>codeconnection gitlab</category>
      <category>gitlab webhook</category>
      <category>gitlab webhook 연결 안 됨</category>
      <category>gitlab 역할</category>
      <category>gitlab 연결 오류</category>
      <category>webhook 오류</category>
      <author>횲</author>
      <guid isPermaLink="true">https://engine.tistory.com/185</guid>
      <comments>https://engine.tistory.com/185#entry185comment</comments>
      <pubDate>Thu, 21 Aug 2025 10:46:15 +0900</pubDate>
    </item>
    <item>
      <title>AWS Certificate Manager 공인 인증서 개념, 발급방법</title>
      <link>https://engine.tistory.com/184</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;ACM 공인 인증서&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AWS Certificate Manager 신기능, 어디서나 사용할 수 있는 공개 인증서가 출시되었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2025년 6월 17일, AWS에서 어디에서나 사용할 수 있는 AWS Certificate Manager (ACM) 공개 인증서를 업데이트했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존엔 CloudFront, ALB 등 AWS 서비스에만 국한되어 사용할 수 있던 SSL 인증서를 온프레미스, EC2 인스턴스에서 사용할 수 있게 되었다는 소식!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;a href=&quot;https://aws.amazon.com/about-aws/whats-new/2025/06/aws-certificate-manager-public-certificates-use-anywhere/?nc1=h_ls&quot;&gt;https://aws.amazon.com/about-aws/whats-new/2025/06/aws-certificate-manager-public-certificates-use-anywhere/?nc1=h_ls&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1755654090554&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;company&quot; data-og-title=&quot;AWS Certificate Manager, 어디서나 사용할 수 있는 공인 인증서 도입  - AWS&quot; data-og-description=&quot;AWS Certificate Manager(ACM)는 AWS 내부 또는 외부에서 공인 TLS 인증서가 필요한 모든 워크로드에서 사용할 수 있는 내보내기 가능한 공인 인증서를 발표했습니다. 이번 릴리스를 통해 인증서의 프라이&quot; data-og-host=&quot;aws.amazon.com&quot; data-og-source-url=&quot;https://aws.amazon.com/about-aws/whats-new/2025/06/aws-certificate-manager-public-certificates-use-anywhere/?nc1=h_ls&quot; data-og-url=&quot;https://aws.amazon.com/ko/about-aws/whats-new/item/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/ffEOm/hyZzFPGmUc/W1RJSAVxcokip5Z7Ak6L71/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/VfT2x/hyZzHtcM0a/6KyLcNVJtoHullbYEye9EK/img.png?width=179&amp;amp;height=109&amp;amp;face=0_0_179_109&quot;&gt;&lt;a href=&quot;https://aws.amazon.com/about-aws/whats-new/2025/06/aws-certificate-manager-public-certificates-use-anywhere/?nc1=h_ls&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://aws.amazon.com/about-aws/whats-new/2025/06/aws-certificate-manager-public-certificates-use-anywhere/?nc1=h_ls&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/ffEOm/hyZzFPGmUc/W1RJSAVxcokip5Z7Ak6L71/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/VfT2x/hyZzHtcM0a/6KyLcNVJtoHullbYEye9EK/img.png?width=179&amp;amp;height=109&amp;amp;face=0_0_179_109');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;AWS Certificate Manager, 어디서나 사용할 수 있는 공인 인증서 도입 - AWS&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;AWS Certificate Manager(ACM)는 AWS 내부 또는 외부에서 공인 TLS 인증서가 필요한 모든 워크로드에서 사용할 수 있는 내보내기 가능한 공인 인증서를 발표했습니다. 이번 릴리스를 통해 인증서의 프라이&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;aws.amazon.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 업데이트를 통해 사용자는 내보내기 가능한 공개 인증서를 발급받고 프라이빗 키에 접근하여 모든 컴퓨팅 워크로드에서 TLS 트래픽을 안전하게 종료할 수 있게 되었다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가령 EC2의 nginx나 apache, 컨테이너의 애플리케이션에 직접 인증서를 설치해 TLS 트래픽을 처리하던 워크플로나 CloudFront 외 서드파티 CDN 서비스를 쓴다면 유용한 업데이트가 될 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;보통 TLS 인증서 가격은 400달러쯤 한다는데 ACM 인증서는 FQDN당 15달러, 와일드카드 당 149달러니까 엄청 싸게 느껴진다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다만 지금까지 발표된 인증서 유효 기간은 다음과 같다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;2026년 3월 11일까지 발급된 TLS 인증서의 최대 수명은 398일입니다.&lt;/li&gt;
&lt;li&gt;2026년 3월 1일부터 발급된 TLS 인증서의 최대 유효 기간은 200일입니다.&lt;/li&gt;
&lt;li&gt;2027년 3월 1일부터 발급된 TLS 인증서의 최대 유효 기간은 100일입니다.&lt;/li&gt;
&lt;li&gt;2029년 3월 1일부터 발급된 TLS 인증서의 최대 수명은 47일입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참고: FQDN은 &lt;a href=&quot;http://www.test.co.kr,&quot;&gt;www.test.co.kr,&lt;/a&gt; &lt;a href=&quot;http://sample.ac.kr&quot;&gt;sample.ac.kr&lt;/a&gt; 등이고 와일드카드는 *.test.co.kr, *.sample.ac.kr 등을 의미한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;ACM 공개 인증서 발급 방법&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. AWS 콘솔 &amp;gt; AWS Certificate Manager(ACM) 접근 &amp;gt; 인증서 요청에서 공개 인증서 발급 선택&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1246&quot; data-origin-height=&quot;332&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b3vR7D/btsPZmE57ED/YBusi6CV5MYdR2WWiIUIX1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b3vR7D/btsPZmE57ED/YBusi6CV5MYdR2WWiIUIX1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b3vR7D/btsPZmE57ED/YBusi6CV5MYdR2WWiIUIX1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb3vR7D%2FbtsPZmE57ED%2FYBusi6CV5MYdR2WWiIUIX1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1246&quot; height=&quot;332&quot; data-origin-width=&quot;1246&quot; data-origin-height=&quot;332&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 도메인 이름 입력하고 내보내기를 활성화 선택한다&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image.png&quot; data-origin-width=&quot;1228&quot; data-origin-height=&quot;883&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/BXhT5/btsPXwuWFtD/YHPjKcaoUqKBn2xzWEE0z1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/BXhT5/btsPXwuWFtD/YHPjKcaoUqKBn2xzWEE0z1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/BXhT5/btsPXwuWFtD/YHPjKcaoUqKBn2xzWEE0z1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBXhT5%2FbtsPXwuWFtD%2FYHPjKcaoUqKBn2xzWEE0z1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1228&quot; height=&quot;883&quot; data-filename=&quot;image.png&quot; data-origin-width=&quot;1228&quot; data-origin-height=&quot;883&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 그렇게 하면 &amp;lt;검증 대기 중&amp;gt;인 상태로 CNAME 값이 뜬다&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image.png&quot; data-origin-width=&quot;1230&quot; data-origin-height=&quot;886&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bIIwWN/btsPYNXfSgp/mFRcc3CKmH8zd1PNZ5B1G1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bIIwWN/btsPYNXfSgp/mFRcc3CKmH8zd1PNZ5B1G1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bIIwWN/btsPYNXfSgp/mFRcc3CKmH8zd1PNZ5B1G1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbIIwWN%2FbtsPYNXfSgp%2FmFRcc3CKmH8zd1PNZ5B1G1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1230&quot; height=&quot;886&quot; data-filename=&quot;image.png&quot; data-origin-width=&quot;1230&quot; data-origin-height=&quot;886&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 요 CNAME 이름과 CNAME 값을 도메인 DNS 설정에 입력해주면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 아래는 한국 도메인에서 도메인 설정으로, 가비아나 후이즈는 다를 수 있지만, CNAME 칸에 입력해주면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- CNAME 값의 마지막 .(점)은 삭제하고 입력해준다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image.png&quot; data-origin-width=&quot;1926&quot; data-origin-height=&quot;1046&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cVtmQo/btsPYOu6hXy/iVkWs94m2kldoK5kkxeuD1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cVtmQo/btsPYOu6hXy/iVkWs94m2kldoK5kkxeuD1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cVtmQo/btsPYOu6hXy/iVkWs94m2kldoK5kkxeuD1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcVtmQo%2FbtsPYOu6hXy%2FiVkWs94m2kldoK5kkxeuD1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1926&quot; height=&quot;1046&quot; data-filename=&quot;image.png&quot; data-origin-width=&quot;1926&quot; data-origin-height=&quot;1046&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5. 몇 분 지나면 상태가 &amp;lt;발급됨&amp;gt;으로 변경된다. 이제 오른쪽 상단의 [내보내기]를 선택한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image.png&quot; data-origin-width=&quot;1230&quot; data-origin-height=&quot;523&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cr8V1j/btsPZtDY8bD/iSmbdKEZ8TNGsLPJSZkKPk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cr8V1j/btsPZtDY8bD/iSmbdKEZ8TNGsLPJSZkKPk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cr8V1j/btsPZtDY8bD/iSmbdKEZ8TNGsLPJSZkKPk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcr8V1j%2FbtsPZtDY8bD%2FiSmbdKEZ8TNGsLPJSZkKPk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1230&quot; height=&quot;523&quot; data-filename=&quot;image.png&quot; data-origin-width=&quot;1230&quot; data-origin-height=&quot;523&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;6. 프라이빗 키를 암호화 해야해서 암호를 입력해준다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image.png&quot; data-origin-width=&quot;1240&quot; data-origin-height=&quot;665&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cpnSNc/btsPWpiLRRJ/aHOK3uTkF3jkK6RAajXkKk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cpnSNc/btsPWpiLRRJ/aHOK3uTkF3jkK6RAajXkKk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cpnSNc/btsPWpiLRRJ/aHOK3uTkF3jkK6RAajXkKk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcpnSNc%2FbtsPWpiLRRJ%2FaHOK3uTkF3jkK6RAajXkKk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1240&quot; height=&quot;665&quot; data-filename=&quot;image.png&quot; data-origin-width=&quot;1240&quot; data-origin-height=&quot;665&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;7. 그러면 짜자잔~ 어디서든 사용할 수 있는 TLS 인증서가 발급 완료된다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 모두 다운로드 버튼을 누르면 한 번에 다운받을 수 있음&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image.png&quot; data-origin-width=&quot;1245&quot; data-origin-height=&quot;475&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cKEzG3/btsPXyl1LxM/pwWWCW8wPnAWhahUWmaUtK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cKEzG3/btsPXyl1LxM/pwWWCW8wPnAWhahUWmaUtK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cKEzG3/btsPXyl1LxM/pwWWCW8wPnAWhahUWmaUtK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcKEzG3%2FbtsPXyl1LxM%2FpwWWCW8wPnAWhahUWmaUtK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1245&quot; height=&quot;475&quot; data-filename=&quot;image.png&quot; data-origin-width=&quot;1245&quot; data-origin-height=&quot;475&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음엔 EC2 nginx에 acm 인증서 다운받은 걸 적용해보는 테스트를 해봐야지&lt;/p&gt;</description>
      <category>AWS</category>
      <category>ACM</category>
      <category>acm public</category>
      <category>acm ssl</category>
      <category>acm tls</category>
      <category>AWS</category>
      <category>AWS ACM</category>
      <category>public certification</category>
      <category>tls인증서</category>
      <category>공개인증서</category>
      <category>공인인증서</category>
      <author>횲</author>
      <guid isPermaLink="true">https://engine.tistory.com/184</guid>
      <comments>https://engine.tistory.com/184#entry184comment</comments>
      <pubDate>Wed, 20 Aug 2025 16:37:21 +0900</pubDate>
    </item>
    <item>
      <title>Unable to load credentials from any of the providers in the chain AwsCredentialsProviderChain 이슈</title>
      <link>https://engine.tistory.com/183</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;AWS에는 다양한 자격증명 방법이 있는데 보통 Access key랑 Secret key를 이용한 임시 자격 증명과 EC2 IAM Role 자격증명 등이 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;EC2에 Access key랑 Secret Key를 입력해두고, EC2에서 S3로의 Get, Put 등 작업을 해야하는데 이런 이슈가 나타났다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이슈 전문&lt;/p&gt;
&lt;pre id=&quot;code_1752553112117&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt; [ERROR] c.h.o.e.exception.ExceptionAdvice - ExceptionAdvice(handleRunTimeException) =&amp;gt; ErrorResultRes(success=false, data=null, error=ErrorRes(errorCode=E0002, errorMsg=RuntimeException)) [Unable to load credentials from any of the providers in the chain AwsCredentialsProviderChain(credentialsProviders=[SystemPropertyCredentialsProvider(), EnvironmentVariableCredentialsProvider(), WebIdentityTokenCredentialsProvider(), ProfileCredentialsProvider(profileName=default, profileFile=ProfileFile(sections=[])), ContainerCredentialsProvider(), InstanceProfileCredentialsProvider()]) : [SystemPropertyCredentialsProvider(): Unable to load credentials from system settings. Access key must be specified either via environment variable (AWS_ACCESS_KEY_ID) or system property (aws.accessKeyId)., EnvironmentVariableCredentialsProvider(): 
Unable to load credentials from system settings. Access key must be specified either via environment variable (AWS_ACCESS_KEY_ID) or system property (aws.accessKeyId)., WebIdentityTokenCredentialsProvider(): Either the environment variable AWS_WEB_IDENTITY_TOKEN_FILE or the javaproperty aws.webIdentityTokenFile must be set., ProfileCredentialsProvider(profileName=default, 
profileFile=ProfileFile(sections=[])): Profile file contained no credentials for profile 'default': ProfileFile(sections=[]), ContainerCredentialsProvider(): Cannot fetch credentials from container - neither AWS_CONTAINER_CREDENTIALS_FULL_URI or AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variables are set., InstanceProfileCredentialsProvider(): Failed to load credentials from IMDS.]]&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이슈 해석&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- SystemPropertyCredentialsProvider(): 시스템 속성(aws.accessKeyId, aws.secretAccessKey)에서 자격 증명을 찾지 못했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- EnvironmentVariableCredentialsProvider(): 환경 변수(AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY)에서 자격 증명을 찾지 못했습니다.&lt;br /&gt;- WebIdentityTokenCredentialsProvider(): 웹 ID 토큰 (IAM Roles for Service Accounts 등)을 찾지 못했습니다.&lt;br /&gt;- ProfileCredentialsProvider(profileName=default, profileFile=ProfileFile(sections=[])): ~/.aws/credentials 파일의 default 프로필에서 자격 증명을 찾지 못했습니다.&lt;br /&gt;- ContainerCredentialsProvider(): ECS/EKS 컨테이너 환경에서 사용하는 컨테이너 자격 증명을 찾지 못했습니다.&lt;br /&gt;- InstanceProfileCredentialsProvider(): EC2 인스턴스 프로파일 (IAM Role)에서 자격 증명을 찾지 못했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이슈 결론&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: 너 자격증명 없는데?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;근데 EC2에 접속해서 들어가보면 .aws/credential 파일에 acess key와 secret key 모두 잘 들어가 있고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;심지어 aws s3 ls 명령도 잘 됐다 ㅠ&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;892&quot; data-origin-height=&quot;186&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cTRqpB/btsPj8t40dl/SViYjSjDsGUrhqRu7ItgT0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cTRqpB/btsPj8t40dl/SViYjSjDsGUrhqRu7ItgT0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cTRqpB/btsPj8t40dl/SViYjSjDsGUrhqRu7ItgT0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcTRqpB%2FbtsPj8t40dl%2FSViYjSjDsGUrhqRu7ItgT0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;892&quot; height=&quot;186&quot; data-origin-width=&quot;892&quot; data-origin-height=&quot;186&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;aws configure list 해보니까 잘 되어있음 ..&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1188&quot; data-origin-height=&quot;300&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/beDm4D/btsPjnSUrPP/5D3jwk9PiEtaTeHiKPGP90/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/beDm4D/btsPjnSUrPP/5D3jwk9PiEtaTeHiKPGP90/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/beDm4D/btsPjnSUrPP/5D3jwk9PiEtaTeHiKPGP90/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbeDm4D%2FbtsPjnSUrPP%2F5D3jwk9PiEtaTeHiKPGP90%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1188&quot; height=&quot;300&quot; data-origin-width=&quot;1188&quot; data-origin-height=&quot;300&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;근데도 ec2에 올라간 spring 애플리케이션에서 s3 접속이 불가능하다고 하니.. 이상했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 IAM User Credential에 적용된 정책도 확인해보았으나 별 이상이 없었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러던 중 누군가 이전에 동일한 이슈가 발생했었다고, 해서 들어보니..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;aws configure로 credential 자체는 ec2-user 사용자로 설정이 되어있는데, 배포 하다보면 이 credential 정보를 ec2-user가 아닌 root로 하여금 찾게된다는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;aws sdk(java를 사용)는 로그에서 봤던 것처럼 credential 정보를 알아서 찾을 수 있는데 root로 하면 aws access key를 하던, ec2 IAM Role을 보던 제대로 된 권한을 가지고 있는 자격증명을 찾을 수 없어서 발생하는 이슈였다..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 배포하여 서비스 시작할 때 -Daws.sharedCredentialsFile=/home/ec2-user/.aws/credentials 이 옵션을 추가하면 정상적으로 경로를 잘 찾아가게 된다는 것이다 ...&lt;/p&gt;
&lt;pre id=&quot;code_1752566700190&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo nohup java -Dspring.profiles.active=dev -Daws.sharedCredentialsFile=/home/ec2-user/.aws/credentials -jar /home/ec2-user/deploy/test.jar \
      &amp;gt; /home/ec2-user/deploy/start.log&quot; 2&amp;gt;&amp;amp;1 &amp;amp;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇게 했더니 잘 되었다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여러 ec2에서 하나의 access key를 사용하는 건 상관 없었고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;EC2에 IAM Role과 Access key가 모두 들어가 있어서 문제였나? 싶었는데 문서를 확인해보니 credential 파일이 선순위고 ec2 iam role은 후순위였다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;lt;자격 증명 설정 검색 순서&amp;gt;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal; background-color: #ffffff; color: #0f141a; text-align: start;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;Java 시스템 속성&lt;/li&gt;
&lt;li&gt;AWS_ACCESS_KEY_ID,&lt;span&gt;&amp;nbsp;&lt;/span&gt;AWS_SECRET_ACCESS_KEY, 및&lt;span&gt;&amp;nbsp;&lt;/span&gt;AWS_SESSION_TOKEN&lt;span&gt;&amp;nbsp;&lt;/span&gt;환경 변수&lt;/li&gt;
&lt;li&gt;웹 ID 토큰 및 IAM 역할 ARN&lt;/li&gt;
&lt;li&gt;공유&lt;span&gt;&amp;nbsp;&lt;/span&gt;credentials및&lt;span&gt;&amp;nbsp;&lt;/span&gt;config파일&lt;/li&gt;
&lt;li&gt;Amazon ECS 컨테이너 자격 증명&lt;/li&gt;
&lt;li&gt;Amazon EC2 인스턴스 IAM 역할 제공 자격 증명&lt;/li&gt;
&lt;li&gt;SDK가 위에 나열된 모든 단계를 거쳐도 필요한 구성 설정을 찾을 수 없는 경우, 다음과 유사한 출력과 함께 예외가 발생합니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문서 참고 : &lt;a href=&quot;https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/credentials-chain.html#credentials-default&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/credentials-chain.html#credentials-default&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1752566856200&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Default credentials provider chain in the AWS SDK for Java 2.x - AWS SDK for Java 2.x&quot; data-og-description=&quot;Default credentials provider chain in the AWS SDK for Java 2.x The default credentials provider chain in the AWS SDK for Java 2.x automatically searches for AWS credentials in a predefined sequence of locations, allowing applications to authenticate with A&quot; data-og-host=&quot;docs.aws.amazon.com&quot; data-og-source-url=&quot;https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/credentials-chain.html#credentials-default&quot; data-og-url=&quot;https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/credentials-chain.html#credentials-default&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/credentials-chain.html#credentials-default&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/credentials-chain.html#credentials-default&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Default credentials provider chain in the AWS SDK for Java 2.x - AWS SDK for Java 2.x&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Default credentials provider chain in the AWS SDK for Java 2.x The default credentials provider chain in the AWS SDK for Java 2.x automatically searches for AWS credentials in a predefined sequence of locations, allowing applications to authenticate with A&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;docs.aws.amazon.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실제로 root로 전환해서 확인해보니 ec2-user와 다른 자격증명이 설정되어 있는 것을 볼 수 있었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;심지어 .aws/credential 폴더와 파일조차도 없었음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기에서 Type이 iam-role이라고 설정되어 있었는데 이게 바로 ec2에 부착된 iam role을 의미하는 거였다.. (iam role에는 s3 관련 권한이 존재하지 않았음 -&amp;gt; 당연히 S3 접근도 안되고 오류가 날 수 밖에 없었던 것)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1254&quot; data-origin-height=&quot;314&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/boIpkB/btsPi0cPBte/ey12FJaHrqfeo5YZV2XpY1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/boIpkB/btsPi0cPBte/ey12FJaHrqfeo5YZV2XpY1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/boIpkB/btsPi0cPBte/ey12FJaHrqfeo5YZV2XpY1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FboIpkB%2FbtsPi0cPBte%2Fey12FJaHrqfeo5YZV2XpY1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1254&quot; height=&quot;314&quot; data-origin-width=&quot;1254&quot; data-origin-height=&quot;314&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ec2-user의 aws configure list에서 type 중 shared-credentials-file은 access key와 secret key를 의미하는 것이었다..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결론&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: credential 이슈가 난다면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. ~/.aws/credential 폴더에 [default]로 access key와 secret key가 있는지 확인&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. root와 ec2-user의 aws configure list 명령으로 어떤 credential 정보가 입력되어 있는지 확인&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 애플리케이션 실행할 때 root인지 ec2-user인지 확인하기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가장 좋은 방법은 ec2 iam role을 쓰는 거지만.. 어쩔 수 없이 access key를 써야한다면 꼭 확인해보자&lt;/p&gt;</description>
      <category>AWS</category>
      <category>Access Key</category>
      <category>AWS</category>
      <category>aws credential</category>
      <category>AWS IAM</category>
      <category>aws iam access key</category>
      <category>aws iam 자격증명</category>
      <category>awscredentialsproviderchain</category>
      <category>Credential</category>
      <category>secret key</category>
      <category>자격증명</category>
      <author>횲</author>
      <guid isPermaLink="true">https://engine.tistory.com/183</guid>
      <comments>https://engine.tistory.com/183#entry183comment</comments>
      <pubDate>Wed, 16 Jul 2025 10:39:28 +0900</pubDate>
    </item>
    <item>
      <title>Amazon Connect 콜백 번호 검증(Callback number validation)</title>
      <link>https://engine.tistory.com/182</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;요즘은 Amazon Connect를 하고 있는데 ... 그때 발견한 콜백 기능에 대해서 써보겠다..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;보통 전화 가능한 상담원이 다 차서 전화가 불가능할 때 &amp;lt;콜백&amp;gt;이라는 기능을 쓴다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 콜백은 홈쇼핑 해피콜 처럼 사용자가 전화번호를 남기면 상담원이 통화 가능할 때 전화를 하거나,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;굳이 상담원이 전화번호를 입력하여 전화하지 않고도 자동으로 전화가 가는 오토콜백이 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Amazon Connect는 오토콜백(auto-callback)을 지원하기 때문에 유익하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만, Amazon Connect가 외국 서비스이다보니, +82와 같은 국가번호가 붙지 않으면 전화가 되질 않는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한 flow의 &amp;lt;콜백 번호 설정(Set callback number)&amp;gt; 블록에서 +82가 붙어야만 검증이 가능하고, 콜백 기능이 유효하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만, 사람이 전화번호를 남길 때, 0101234~~ 이렇게 남기지 +82101234~~ 이렇게 남기진 않는단 말이다..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 이걸 해결할 수 있는 방안에 대해서 설명하겠다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(참고로 Lambda를 개발해서 쓰면 더 좋겠지만, Lambda 호출 비용과 제한 시간(8초)이 있으므로 이 방법은 배제하겠다)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;전체 플로우&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;콜백 플로우는 무조건 Customer queue(고객 대기열) 타입으로 설정해야한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1465&quot; data-origin-height=&quot;284&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/0AupY/btsOFr8TpRL/iE0q6S6mgnI8VKdvX3Ywtk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/0AupY/btsOFr8TpRL/iE0q6S6mgnI8VKdvX3Ywtk/img.png&quot; data-alt=&quot;잘 안 보이면 확대해서 보기&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/0AupY/btsOFr8TpRL/iE0q6S6mgnI8VKdvX3Ywtk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0AupY%2FbtsOFr8TpRL%2FiE0q6S6mgnI8VKdvX3Ywtk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1465&quot; height=&quot;284&quot; data-origin-width=&quot;1465&quot; data-origin-height=&quot;284&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;잘 안 보이면 확대해서 보기&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;세부 설정&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. Store Customer Input&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 입력할 번호의 최대 값을 지정해주기&lt;br /&gt;- Phone number로 하면 010~~으로 입력해도 값 자체가 +8210으로 자동 변환된다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;389&quot; data-origin-height=&quot;294&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bpmIKd/btsOF3sGPWA/UhZCyESkMgnp7L3SYB3QBk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bpmIKd/btsOF3sGPWA/UhZCyESkMgnp7L3SYB3QBk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bpmIKd/btsOF3sGPWA/UhZCyESkMgnp7L3SYB3QBk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbpmIKd%2FbtsOF3sGPWA%2FUhZCyESkMgnp7L3SYB3QBk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;389&quot; height=&quot;294&quot; data-origin-width=&quot;389&quot; data-origin-height=&quot;294&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. Get Customer Input&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- &lt;span style=&quot;background-color: #f6e199;&quot;&gt;$.StoredCustomerInput&lt;/span&gt;으로 1번 단계의 블록을 가져올 수 있다 (&lt;a href=&quot;https://docs.aws.amazon.com/connect/latest/adminguide/connect-attrib-list.html)&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://docs.aws.amazon.com/connect/latest/adminguide/connect-attrib-list.html)&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;394&quot; data-origin-height=&quot;419&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qC8bF/btsOEkv9JDl/jEAJ9V7EMH2y07AJIm7xF1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qC8bF/btsOEkv9JDl/jEAJ9V7EMH2y07AJIm7xF1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qC8bF/btsOEkv9JDl/jEAJ9V7EMH2y07AJIm7xF1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqC8bF%2FbtsOEkv9JDl%2FjEAJ9V7EMH2y07AJIm7xF1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;394&quot; height=&quot;419&quot; data-origin-width=&quot;394&quot; data-origin-height=&quot;419&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3. Set contact attributes&lt;/b&gt;&lt;br /&gt;- 콜백 번호 검증에 통과하기 위해 +82를 붙인 변수값이 필요하다.&lt;br /&gt;- 사용자 정의 변수로 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;+82$.StoredCustomerInput&lt;/span&gt;를 지정&lt;br /&gt;- &lt;i&gt;+82010&lt;/i&gt;, &lt;i&gt;+82042&lt;/i&gt;, &lt;i&gt;+82070&lt;/i&gt;이든 유효하게 사용 가능하다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;390&quot; data-origin-height=&quot;275&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bvYuhM/btsOD9gU4rY/sz3AZcmobXT2ImSPgIYC7k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bvYuhM/btsOD9gU4rY/sz3AZcmobXT2ImSPgIYC7k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bvYuhM/btsOD9gU4rY/sz3AZcmobXT2ImSPgIYC7k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbvYuhM%2FbtsOD9gU4rY%2Fsz3AZcmobXT2ImSPgIYC7k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;390&quot; height=&quot;275&quot; data-origin-width=&quot;390&quot; data-origin-height=&quot;275&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;4. Set callback number&lt;/b&gt;&lt;br /&gt;- 번호에 +82가 붙었기 때문에 유효성 검사가 통과한다.&lt;br /&gt;- 3번에서 선언한 변수를 사용할 변수로 지정해주면 된다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;415&quot; data-origin-height=&quot;150&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cPEYmu/btsOEAr2IgY/q1K34OjKB4hnTQ48nMNuoK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cPEYmu/btsOEAr2IgY/q1K34OjKB4hnTQ48nMNuoK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cPEYmu/btsOEAr2IgY/q1K34OjKB4hnTQ48nMNuoK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcPEYmu%2FbtsOEAr2IgY%2Fq1K34OjKB4hnTQ48nMNuoK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;415&quot; height=&quot;150&quot; data-origin-width=&quot;415&quot; data-origin-height=&quot;150&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 하면 CloudWatch Log group에서도 잘 동작했다는 로그를 확인할 수 있다.&lt;/p&gt;
&lt;pre id=&quot;code_1750146856381&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;{
    &quot;Results&quot;: &quot;Success&quot;,
    &quot;ContactId&quot;: &quot;CONTACT_ID&quot;,
    &quot;ContactFlowId&quot;: &quot;arn:aws:connect:ap-northeast-2:ACCOUNT:instance/INSTANCE_ID&quot;,
    &quot;ContactFlowName&quot;: &quot;3.callback_flow&quot;,
    &quot;ContactFlowModuleType&quot;: &quot;CreateCallback&quot;,
    &quot;Timestamp&quot;: &quot;2025-06-12T08:12:25.759Z&quot;,
    &quot;Parameters&quot;: {
        &quot;InitialDelaySeconds&quot;: &quot;10&quot;,
        &quot;CustomerPhoneNumber&quot;: &quot;+8210612345678&quot;,
        &quot;MaxRetryAttempts&quot;: &quot;1&quot;,
        &quot;RetryDelaySeconds&quot;: &quot;600&quot;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉 해석하자면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사용자가 01012345678# 이라고 번호를 입력해도, 변수 설정 블록 덕분에 +8201012345678 이라고 번호가 저장되는 것이며 이는 콜백 번호 검증에 통과되는 번호여서 콜백이 동작한다는 의미이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이는 서울리전(ap-northeast-2) 한정으로만 동작하며 다른 리전(내가 테스트한 건 도쿄리전 뿐이지만)에선 동작하지 않았다..&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;번호 형태&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;서울 리전 지원 여부&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;서울 리전 외 지원 여부&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;+82010&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;O&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;X&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;+8210&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;O&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;O&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;+82070&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;O&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;X&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;+8202&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;O&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;X&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;꼭 알아두기...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럼 이만 !&lt;/p&gt;</description>
      <category>AWS/PROJECT</category>
      <category>Amazon connect</category>
      <category>amazon connect callback</category>
      <category>amazon connect callback flow</category>
      <category>amazon connect callback number</category>
      <category>amazon connect callback number validation</category>
      <category>amazon connect set callback number</category>
      <category>amazon connect 콜백</category>
      <category>amazon connect 콜백 번호 설정</category>
      <author>횲</author>
      <guid isPermaLink="true">https://engine.tistory.com/182</guid>
      <comments>https://engine.tistory.com/182#entry182comment</comments>
      <pubDate>Tue, 17 Jun 2025 17:15:20 +0900</pubDate>
    </item>
    <item>
      <title>AWS IoT SiteWise Portal 삭제 이슈 해결방법</title>
      <link>https://engine.tistory.com/181</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;AWS IoT SiteWise엔 데이터를 대시보드화 하기 쉽도록 Portal 기능이 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 기능을 이용하면 그래프를 통해 SiteWise에 저장/전달된 데이터를 쉽게 시각화 할 수 있다는 장점이 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://docs.aws.amazon.com/iot-sitewise/latest/userguide/monitor-getting-started.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://docs.aws.amazon.com/iot-sitewise/latest/userguide/monitor-getting-started.html&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1744879835109&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Get started with AWS IoT SiteWise Monitor (Classic) - AWS IoT SiteWise&quot; data-og-description=&quot;When adding users or administrators to the portal, avoid creating AWS Identity and Access Management (IAM) policies that restrict user permissions, such as limited IP. Any attached policies with restricted permissions will not be able to connect to the AWS&quot; data-og-host=&quot;docs.aws.amazon.com&quot; data-og-source-url=&quot;https://docs.aws.amazon.com/iot-sitewise/latest/userguide/monitor-getting-started.html&quot; data-og-url=&quot;https://docs.aws.amazon.com/iot-sitewise/latest/userguide/monitor-getting-started.html&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://docs.aws.amazon.com/iot-sitewise/latest/userguide/monitor-getting-started.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://docs.aws.amazon.com/iot-sitewise/latest/userguide/monitor-getting-started.html&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Get started with AWS IoT SiteWise Monitor (Classic) - AWS IoT SiteWise&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;When adding users or administrators to the portal, avoid creating AWS Identity and Access Management (IAM) policies that restrict user permissions, such as limited IP. Any attached policies with restricted permissions will not be able to connect to the AWS&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;docs.aws.amazon.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만.. 이 portal은 외부 페이지로 디렉션되는 구조라 권한이나 사용자별 관리나 제어가 필요하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 과정에서 .. 어떤 이슈로 인해 Portal이 삭제되지 않았는데 .. 그 이슈와 해결방안에 대해 풀어보고자 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;이슈 상황&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AWS IoT SiteWise의 Portal 페이지에서 [삭제]를 선택했는데 다음 오류가 나타났다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2426&quot; data-origin-height=&quot;358&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vjtcb/btsNnpZmc05/X3hwDsGE5kFWzSltBwUie0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vjtcb/btsNnpZmc05/X3hwDsGE5kFWzSltBwUie0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vjtcb/btsNnpZmc05/X3hwDsGE5kFWzSltBwUie0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fvjtcb%2FbtsNnpZmc05%2FX3hwDsGE5kFWzSltBwUie0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2426&quot; height=&quot;358&quot; data-origin-width=&quot;2426&quot; data-origin-height=&quot;358&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;띠로리&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;756&quot; data-origin-height=&quot;195&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/LYSRb/btsNqgUkbzQ/DbIiZs0oMoec50s4C0OKA1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/LYSRb/btsNqgUkbzQ/DbIiZs0oMoec50s4C0OKA1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/LYSRb/btsNqgUkbzQ/DbIiZs0oMoec50s4C0OKA1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLYSRb%2FbtsNqgUkbzQ%2FDbIiZs0oMoec50s4C0OKA1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;756&quot; height=&quot;195&quot; data-origin-width=&quot;756&quot; data-origin-height=&quot;195&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;에러를 확인하면 portal에 연결된 policies와 projects가 있어서 삭제가 불가능하다고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Projects 삭제&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로젝트를 삭제하려면 프로젝트 내에 설정된 &lt;b&gt;프로젝트 뷰어&lt;/b&gt;와 &lt;b&gt;프로젝트 소유자&lt;/b&gt;를 &lt;b&gt;제거&lt;/b&gt;해야만 한다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음 링크를 참고해서 삭제하면 된다! &lt;a href=&quot;https://docs.aws.amazon.com/iot-sitewise/latest/appguide/delete-projects.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://docs.aws.amazon.com/iot-sitewise/latest/appguide/delete-projects.html&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1744880336905&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Delete projects in AWS IoT SiteWise Monitor - AWS IoT SiteWise Monitor&quot; data-og-description=&quot;Delete projects in AWS IoT SiteWise Monitor As a portal administrator, you can delete any project that you don't need. To delete a project, you must first delete or remove all dashboards, associated assets, project owners, and project viewers. To delete a &quot; data-og-host=&quot;docs.aws.amazon.com&quot; data-og-source-url=&quot;https://docs.aws.amazon.com/iot-sitewise/latest/appguide/delete-projects.html&quot; data-og-url=&quot;https://docs.aws.amazon.com/iot-sitewise/latest/appguide/delete-projects.html&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cr7Li5/hyYFGutGRS/sI86Ju7PF6fwQQRryusj81/img.png?width=1185&amp;amp;height=352&amp;amp;face=0_0_1185_352&quot;&gt;&lt;a href=&quot;https://docs.aws.amazon.com/iot-sitewise/latest/appguide/delete-projects.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://docs.aws.amazon.com/iot-sitewise/latest/appguide/delete-projects.html&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cr7Li5/hyYFGutGRS/sI86Ju7PF6fwQQRryusj81/img.png?width=1185&amp;amp;height=352&amp;amp;face=0_0_1185_352');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Delete projects in AWS IoT SiteWise Monitor - AWS IoT SiteWise Monitor&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Delete projects in AWS IoT SiteWise Monitor As a portal administrator, you can delete any project that you don't need. To delete a project, you must first delete or remove all dashboards, associated assets, project owners, and project viewers. To delete a&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;docs.aws.amazon.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Policies 삭제&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;Access Policy는 IAM identity Center User / Group 또는 IAM 사용자에게 지정된 AWS IoT SiteWise Monitor Portal이나 Project 리소스에 대한 액세스 권한을 부여하도록 정책을 만든다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;policies는 어디에서 삭제하는 건지.. 도저히 모르겠어서 AWS re:post에 도움을 요청했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;친절한 AWS 사람이 cli로 해보라고 해서 도저언.!&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1404&quot; data-origin-height=&quot;846&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/YZvvp/btsNpAl346D/PzJSEk8FVP5z7Q459KIt2K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/YZvvp/btsNpAl346D/PzJSEk8FVP5z7Q459KIt2K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/YZvvp/btsNpAl346D/PzJSEk8FVP5z7Q459KIt2K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FYZvvp%2FbtsNpAl346D%2FPzJSEk8FVP5z7Q459KIt2K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1404&quot; height=&quot;846&quot; data-origin-width=&quot;1404&quot; data-origin-height=&quot;846&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. Cloudshell에 접속한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. Portal ID를 확인하기 위해 다음 cli를 입력한다.&lt;/p&gt;
&lt;pre id=&quot;code_1744880633727&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;aws iotsitewise list-portals&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러면 다음 형태의 출력이 나타난다. 여기에서 id 부분을 따로 메모해두자.&lt;/p&gt;
&lt;pre id=&quot;code_1744880680817&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;{
    &quot;portalSummaries&quot;: [
        {
            &quot;id&quot;: &quot;a1b2c3d4-5678-90ab-cdef-EXAMPLE11111&quot;,
            &quot;name&quot;: &quot;MySiteWisePortal&quot;,
            &quot;description&quot;: &quot;Example portal&quot;,
            ...
        }
    ]
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. list-access-policies CLI로 어떤 정책이 있는지 확인해보자.&lt;/p&gt;
&lt;pre id=&quot;code_1744882058254&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;aws iotsitewise list-access-policies --resource-type PORTAL \
	--resource-id a1b2c3d4-5678-90ab-cdef-EXAMPLE11111&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러면 다음과 같은 access policy가 나타난다. (이런 걸 설정하지 않았음에도 있는 거 보면 사용자 제어 하다가 자동으로 생긴 것 같다 ..)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1676&quot; data-origin-height=&quot;776&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bA2uuh/btsNprbS5LT/Ru1Ipn3bIJItIgR9yEUBh1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bA2uuh/btsNprbS5LT/Ru1Ipn3bIJItIgR9yEUBh1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bA2uuh/btsNprbS5LT/Ru1Ipn3bIJItIgR9yEUBh1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbA2uuh%2FbtsNprbS5LT%2FRu1Ipn3bIJItIgR9yEUBh1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1676&quot; height=&quot;776&quot; data-origin-width=&quot;1676&quot; data-origin-height=&quot;776&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 이제 access policy를 지우면 된다!&lt;/p&gt;
&lt;pre id=&quot;code_1744882276139&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;aws iotsitewise delete-access-policy --access-policy-id ACCESS-POLICY-ID-aaaaa-YYYYYY&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아무 출력이 없으면 삭제가 완료된 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5. 마지막으로 SiteWise portal 페이지에서 다시 [삭제]를 누르면 완전히 삭제된다&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2330&quot; data-origin-height=&quot;970&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bYe2QJ/btsNpFUWEMN/NUkFP9k3C7eZMJlQukAMNK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bYe2QJ/btsNpFUWEMN/NUkFP9k3C7eZMJlQukAMNK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bYe2QJ/btsNpFUWEMN/NUkFP9k3C7eZMJlQukAMNK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbYe2QJ%2FbtsNpFUWEMN%2FNUkFP9k3C7eZMJlQukAMNK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2330&quot; height=&quot;970&quot; data-origin-width=&quot;2330&quot; data-origin-height=&quot;970&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;access policy가 예전엔 없었는데 생긴 걸 보면 삭제하는 과정에서 뭐가 꼬여서 설정이 누락되었거나, 또는 업데이트 되는 과정에서 자동으로 삭제되지 않아서 그런 것 같다 ..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;IoT SiteWise Portal은 사용자 당 비용 과금이여서 사용자가 없으면 상관 없을테지만 혹시모를 비용을 위해 언제나 리소스 삭제하는 건 꼭 필요하다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참고 문서&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;list-access-policies : &lt;a href=&quot;https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iotsitewise/list-access-policies.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iotsitewise/list-access-policies.html&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1744882714121&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;list-access-policies &amp;mdash; AWS CLI 2.26.3 Command Reference&quot; data-og-description=&quot;The total number of items to return in the command&amp;rsquo;s output. If the total number of items available is more than the value specified, a NextToken is provided in the command&amp;rsquo;s output. To resume pagination, provide the NextToken value in the starting-tok&quot; data-og-host=&quot;awscli.amazonaws.com&quot; data-og-source-url=&quot;https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iotsitewise/list-access-policies.html&quot; data-og-url=&quot;https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iotsitewise/list-access-policies.html&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iotsitewise/list-access-policies.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iotsitewise/list-access-policies.html&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;list-access-policies &amp;mdash; AWS CLI 2.26.3 Command Reference&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;The total number of items to return in the command&amp;rsquo;s output. If the total number of items available is more than the value specified, a NextToken is provided in the command&amp;rsquo;s output. To resume pagination, provide the NextToken value in the starting-tok&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;awscli.amazonaws.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;delete-access-policy :&amp;nbsp;&lt;a href=&quot;https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iotsitewise/delete-access-policy.html&quot;&gt;https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iotsitewise/delete-access-policy.html&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1744882783560&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;delete-access-policy &amp;mdash; AWS CLI 2.26.3 Command Reference&quot; data-og-description=&quot;Note To use the following examples, you must have the AWS CLI installed and configured. See the Getting started guide in the AWS CLI User Guide for more information. Unless otherwise stated, all examples have unix-like quotation rules. These examples will &quot; data-og-host=&quot;awscli.amazonaws.com&quot; data-og-source-url=&quot;https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iotsitewise/delete-access-policy.html&quot; data-og-url=&quot;https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iotsitewise/delete-access-policy.html&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iotsitewise/delete-access-policy.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iotsitewise/delete-access-policy.html&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;delete-access-policy &amp;mdash; AWS CLI 2.26.3 Command Reference&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Note To use the following examples, you must have the AWS CLI installed and configured. See the Getting started guide in the AWS CLI User Guide for more information. Unless otherwise stated, all examples have unix-like quotation rules. These examples will&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;awscli.amazonaws.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럼 끗&lt;/p&gt;</description>
      <category>AWS</category>
      <category>aws iot sitewise</category>
      <category>aws iot sitewise portal delete</category>
      <category>delete sitewise portal</category>
      <category>iot sitewise</category>
      <category>iot sitewise cli</category>
      <category>iot sitewise portal 삭제</category>
      <category>sitewise access policy</category>
      <category>sitewise cli</category>
      <category>sitewise portal</category>
      <category>sitewise portal access policy 삭제</category>
      <author>횲</author>
      <guid isPermaLink="true">https://engine.tistory.com/181</guid>
      <comments>https://engine.tistory.com/181#entry181comment</comments>
      <pubDate>Thu, 17 Apr 2025 18:39:53 +0900</pubDate>
    </item>
  </channel>
</rss>