VPC S3 엔드포인트를 사용하여 프라이빗 서브넷에서 S3에 연결
6059 단어 CloudFormationvpcS3AWS
전제
참고
VPC 만들기
VPC와 서브넷(퍼블릭, 프라이빗)을 만듭니다.
번거롭기 때문에 CloudFormation을 사용합니다.
MyStack.json{
"AWSTemplateFormatVersion" : "2010-09-09",
"Description" : "A simple stack that launches an instance.",
"Resources" : {
"VPC" : {
"Type" : "AWS::EC2::VPC",
"Properties" : {
"CidrBlock" : "10.1.0.0/16",
"EnableDnsHostnames" : "true"
}
},
"PublicSubnetAZa" : {
"Type" : "AWS::EC2::Subnet",
"Properties" : {
"AvailabilityZone" : "ap-northeast-1a",
"CidrBlock" : "10.1.11.0/24",
"VpcId" : { "Ref" : "VPC" }
}
},
"PrivateSubnetAZa" : {
"Type" : "AWS::EC2::Subnet",
"Properties" : {
"AvailabilityZone" : "ap-northeast-1a",
"CidrBlock" : "10.1.15.0/24",
"VpcId" : { "Ref" : "VPC" }
}
},
"InternetGateway" : {
"Type" : "AWS::EC2::InternetGateway"
},
"InternetGatewayAttach" : {
"Type" : "AWS::EC2::VPCGatewayAttachment",
"Properties" : {
"VpcId" : { "Ref" : "VPC" },
"InternetGatewayId" : { "Ref" : "InternetGateway" }
}
},
"DHCPOptions" : {
"Type" : "AWS::EC2::DHCPOptions",
"Properties" : {
"DomainName" : "ap-northeast-1.compute.internal",
"DomainNameServers" : [ "AmazonProvidedDNS" ]
}
},
"VPCDHCPOptionsAssociation" : {
"Type" : "AWS::EC2::VPCDHCPOptionsAssociation",
"Properties" : {
"VpcId" : { "Ref" : "VPC" },
"DhcpOptionsId" : { "Ref" : "DHCPOptions" }
}
},
"RouteTable" : {
"Type" : "AWS::EC2::RouteTable",
"Properties" : {
"VpcId" : { "Ref" : "VPC" }
}
},
"Route1" : {
"Type" : "AWS::EC2::Route",
"Properties" : {
"DestinationCidrBlock" : "0.0.0.0/0",
"RouteTableId" : { "Ref" : "RouteTable" },
"GatewayId" : { "Ref" : "InternetGateway" }
},
"DependsOn" : "InternetGatewayAttach"
},
"SubnetRoute1" : {
"Type" : "AWS::EC2::SubnetRouteTableAssociation",
"Properties" : {
"RouteTableId" : { "Ref" : "RouteTable" },
"SubnetId" : { "Ref" : "PublicSubnetAZa" }
}
}
}
}
위 파일을 로컬로 만든 후 다음 명령을 실행합니다.
$aws cloudformation create-stack --template-body file://Mystack.json --stack-name MyFirstStack
S3 엔드포인트 생성
현재 CloudFormation에서 S3 엔드포인트를 만들 수 없었기 때문에 별도의 관리 콘솔에서 실시합니다.
{
"AWSTemplateFormatVersion" : "2010-09-09",
"Description" : "A simple stack that launches an instance.",
"Resources" : {
"VPC" : {
"Type" : "AWS::EC2::VPC",
"Properties" : {
"CidrBlock" : "10.1.0.0/16",
"EnableDnsHostnames" : "true"
}
},
"PublicSubnetAZa" : {
"Type" : "AWS::EC2::Subnet",
"Properties" : {
"AvailabilityZone" : "ap-northeast-1a",
"CidrBlock" : "10.1.11.0/24",
"VpcId" : { "Ref" : "VPC" }
}
},
"PrivateSubnetAZa" : {
"Type" : "AWS::EC2::Subnet",
"Properties" : {
"AvailabilityZone" : "ap-northeast-1a",
"CidrBlock" : "10.1.15.0/24",
"VpcId" : { "Ref" : "VPC" }
}
},
"InternetGateway" : {
"Type" : "AWS::EC2::InternetGateway"
},
"InternetGatewayAttach" : {
"Type" : "AWS::EC2::VPCGatewayAttachment",
"Properties" : {
"VpcId" : { "Ref" : "VPC" },
"InternetGatewayId" : { "Ref" : "InternetGateway" }
}
},
"DHCPOptions" : {
"Type" : "AWS::EC2::DHCPOptions",
"Properties" : {
"DomainName" : "ap-northeast-1.compute.internal",
"DomainNameServers" : [ "AmazonProvidedDNS" ]
}
},
"VPCDHCPOptionsAssociation" : {
"Type" : "AWS::EC2::VPCDHCPOptionsAssociation",
"Properties" : {
"VpcId" : { "Ref" : "VPC" },
"DhcpOptionsId" : { "Ref" : "DHCPOptions" }
}
},
"RouteTable" : {
"Type" : "AWS::EC2::RouteTable",
"Properties" : {
"VpcId" : { "Ref" : "VPC" }
}
},
"Route1" : {
"Type" : "AWS::EC2::Route",
"Properties" : {
"DestinationCidrBlock" : "0.0.0.0/0",
"RouteTableId" : { "Ref" : "RouteTable" },
"GatewayId" : { "Ref" : "InternetGateway" }
},
"DependsOn" : "InternetGatewayAttach"
},
"SubnetRoute1" : {
"Type" : "AWS::EC2::SubnetRouteTableAssociation",
"Properties" : {
"RouteTableId" : { "Ref" : "RouteTable" },
"SubnetId" : { "Ref" : "PublicSubnetAZa" }
}
}
}
}
$aws cloudformation create-stack --template-body file://Mystack.json --stack-name MyFirstStack
현재 CloudFormation에서 S3 엔드포인트를 만들 수 없었기 때문에 별도의 관리 콘솔에서 실시합니다.
첫 번째 화면에서는 CIDR이 "10.1.0.0/16"인 이전에 만든 VPC를 설정합니다.
다음 화면에서는 프라이빗 서브넷을 선택합니다. 프라이빗 서브넷의 CIDR은 10.1.15.0/24인 것을 선택합니다.
이제 프라이빗 서브넷에 S3 엔드포인트를 만들 수 있습니다.
EC2 만들기
확인을 위해 프라이빗 서브넷에 EC2를 설치하여 인터넷에 연결할 수 없는 상태에서 S3에 액세스할 수 있는지 확인합니다.
관리 콘솔 등에서 퍼블릭 서브넷(프라이빗 서브넷에 SSH 연결용)과 프라이빗 서브넷에 EC2를 각각 1대씩 세웁니다. 이번 예에서는 AmazonLinux를 이용했습니다. 또한, 기동하는 EC2에는 S3에 액세스 가능한 IAM 롤을 부여해 두어 주세요.
부팅 후 퍼블릭 서브넷의 퍼블릭 IP와 프라이빗 서브넷에 대한 프라이빗 IP를 확인합니다.
자신의 시스템에서 프라이빗 서브넷의 EC2에 액세스하기 위해 sshconfig 설정을 변경합니다. 52.69.163.180은 퍼블릭 서브넷의 EC2의 퍼블릭 IP, 10.1.15.140은 프라이빗 서브넷의 EC2의 프라이빗 IP, ~/.ssh/hogefuga.pem은 설정한 SSH 인증 키를 자신의 환경에 맞추어 변경합니다. 제발.
~/.ssh/confHost FumidaiServer
HostName 52.69.163.180
User ec2-user
Port 22
IdentityFile ~/.ssh/hogefuga.pem
Host TargetServer
HostName 10.1.15.140
User ec2-user
port 22
IdentityFile ~/.ssh/hogefuga.pem
ProxyCommand ssh -W %h:%p FumidaiServer
위의 설정을 통해 자신의 컴퓨터에서 다음 명령을 사용하여 프라이빗 서브넷 EC2에 로그인할 수 있습니다.
$ssh TargetServer
시험에 인터넷에 연결되는지 시도합니다.
$wget -T 10 http://google.co.jp
--2015-06-30 01:35:23-- http://google.co.jp/
google.co.jp (google.co.jp) をDNSに問いあわせています... 173.194.117.159, 173.194.117.143, 173.194.117.151, ...
google.co.jp (google.co.jp)|173.194.117.159|:80 に接続しています... 失敗しました: 接続がタイムアウトしました.
프라이빗 서브넷에서 NAT 설정 등도 하지 않으므로 인터넷에 액세스할 수 없습니다.
프라이빗 서브넷에서 S3에 액세스
사전에 IAM 역할로 S3에 대한 액세스 권한을 부여하고 있기 때문에 계정 설정은 실시하지 않고, S3에의 액세스를 실시해 보겠습니다.
$aws s3 --region ap-northeast-1 ls
2015-05-29 07:58:18 toshihiro-elb-test
2015-05-31 13:09:57 toshihirock-cloudtrail
2015-06-04 23:39:22 toshihirock-cognito
위와 같이 프라이빗 서브넷에서도 S3에 액세스할 수 있었습니다!
Reference
이 문제에 관하여(VPC S3 엔드포인트를 사용하여 프라이빗 서브넷에서 S3에 연결), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/toshihirock/items/2ba42aed00a3331b8e7d
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Host FumidaiServer
HostName 52.69.163.180
User ec2-user
Port 22
IdentityFile ~/.ssh/hogefuga.pem
Host TargetServer
HostName 10.1.15.140
User ec2-user
port 22
IdentityFile ~/.ssh/hogefuga.pem
ProxyCommand ssh -W %h:%p FumidaiServer
$ssh TargetServer
$wget -T 10 http://google.co.jp
--2015-06-30 01:35:23-- http://google.co.jp/
google.co.jp (google.co.jp) をDNSに問いあわせています... 173.194.117.159, 173.194.117.143, 173.194.117.151, ...
google.co.jp (google.co.jp)|173.194.117.159|:80 に接続しています... 失敗しました: 接続がタイムアウトしました.
사전에 IAM 역할로 S3에 대한 액세스 권한을 부여하고 있기 때문에 계정 설정은 실시하지 않고, S3에의 액세스를 실시해 보겠습니다.
$aws s3 --region ap-northeast-1 ls
2015-05-29 07:58:18 toshihiro-elb-test
2015-05-31 13:09:57 toshihirock-cloudtrail
2015-06-04 23:39:22 toshihirock-cognito
위와 같이 프라이빗 서브넷에서도 S3에 액세스할 수 있었습니다!
Reference
이 문제에 관하여(VPC S3 엔드포인트를 사용하여 프라이빗 서브넷에서 S3에 연결), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/toshihirock/items/2ba42aed00a3331b8e7d텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)