AWS 계정 간 DAX 액세스
한 AWS 계정(계정 A)에서 DynamoDB Accelerator(DAX) 클러스터가 실행 중이고 다른 AWS 계정(계정 B)의 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스에서 DAX 클러스터에 액세스할 수 있어야 한다고 가정합니다. 이 자습서에서는 계정 B의 IAM 역할을 사용하여 계정 B에서 EC2 인스턴스를 시작한 다음, EC2 인스턴스의 임시 보안 자격 증명을 사용하여 계정 A의 IAM 역할을 수임합니다. 마지막으로 임시 보안 자격 증명을 사용해 계정 A의 IAM 역할을 수임하여 계정 A의 DAX 클러스터에 대한 피어링 연결을 통해 애플리케이션을 호출합니다. 이러한 작업을 수행하려면 두 AWS 계정 모두에서 관리 액세스 권한이 필요합니다.
중요
DAX 클러스터가 다른 계정에서 DynamoDB 테이블에 액세스하도록 할 수는 없습니다.
IAM 설정
-
다음 콘텐츠로 이름이
AssumeDaxRoleTrust.json
인 텍스트 파일을 만들어서 Amazon EC2가 사용자를 대신하여 작업하도록 허용합니다.{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "ec2.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
-
계정 B에서 인스턴스를 시작할 때 Amazon EC2가 사용할 수 있는 역할을 생성합니다.
aws iam create-role \ --role-name AssumeDaxRole \ --assume-role-policy-document file://AssumeDaxRoleTrust.json
-
다음 콘텐츠로 이름이
AssumeDaxRolePolicy.json
인 텍스트 파일을 만들어서 계정 B의 EC2 인스턴스에서 실행 중인 코드가 계정 A의 IAM 역할을 수임하도록 허용합니다.accountA
를 계정 A의 실제 ID로 바꿉니다.{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "arn:aws:iam::
accountA
:role/DaxCrossAccountRole" } ] } -
방금 생성한 역할에 해당 정책을 추가합니다.
aws iam put-role-policy \ --role-name AssumeDaxRole \ --policy-name AssumeDaxRolePolicy \ --policy-document file://AssumeDaxRolePolicy.json
-
인스턴스 프로파일을 생성하여 인스턴스가 역할을 사용하도록 허용합니다.
aws iam create-instance-profile \ --instance-profile-name AssumeDaxInstanceProfile
-
역할을 인스턴스 프로파일과 연결합니다.
aws iam add-role-to-instance-profile \ --instance-profile-name AssumeDaxInstanceProfile \ --role-name AssumeDaxRole
-
다음 콘텐츠로 이름이
DaxCrossAccountRoleTrust.json
인 텍스트 파일을 만들어서 계정 B가 사용자 A 역할을 수임하도록 허용합니다.accountB
를 계정 B의 실제 ID로 바꿉니다.{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::
accountB
:role/AssumeDaxRole" }, "Action": "sts:AssumeRole" } ] } -
계정 A에서 계정 B가 수임할 수 있는 역할을 생성합니다.
aws iam create-role \ --role-name DaxCrossAccountRole \ --assume-role-policy-document file://DaxCrossAccountRoleTrust.json
-
DAX 클러스터에 대한 액세스를 허용하는 이름
DaxCrossAccountPolicy.json
이 인 텍스트 파일을 생성합니다.dax-cluster-arn
을 DAX 클러스터의 올바른 Amazon 리소스 이름(ARN)으로 바꿉니다.{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "dax:GetItem", "dax:BatchGetItem", "dax:Query", "dax:Scan", "dax:PutItem", "dax:UpdateItem", "dax:DeleteItem", "dax:BatchWriteItem", "dax:ConditionCheckItem" ], "Resource": "
dax-cluster-arn
" } ] } -
계정 A에서 역할에 정책을 추가합니다.
aws iam put-role-policy \ --role-name DaxCrossAccountRole \ --policy-name DaxCrossAccountPolicy \ --policy-document file://DaxCrossAccountPolicy.json
VPC 설정
-
계정 A의 DAX 클러스터의 서브넷 그룹을 찾습니다.
cluster-name
을 계정 B가 액세스해야 하는 DAX 클러스터의 이름으로 바꿉니다.aws dax describe-clusters \ --cluster-name
cluster-name
--query 'Clusters[0].SubnetGroup' -
해당
subnet-group
을 사용하여 클러스터의 VPC를 찾습니다.aws dax describe-subnet-groups \ --subnet-group-name
subnet-group
\ --query 'SubnetGroups[0].VpcId' -
해당
vpc-id
를 사용하여 VPC의 CIDR을 찾습니다.aws ec2 describe-vpcs \ --vpc
vpc-id
\ --query 'Vpcs[0].CidrBlock' -
계정 B에서 이전 단계에서 찾은 것과 겹치지 않는 다른 CIDR을 사용하여 VPC를 생성합니다. 그런 다음 하나 이상의 서브넷을 생성합니다. VPC 생성 마법사는 AWS Management Console 또는 AWS CLI에서 사용할 수 있습니다.
-
계정 B에서 VPC 피어링 연결 생성 및 수락에 설명된 대로 계정 A VPC에 대한 피어링 연결을 요청합니다. 계정 A에서 연결을 수락합니다.
-
계정 B에서 새 VPC의 라우팅 테이블을 찾습니다.
vpc-id
를 계정 B에서 생성한 VPC의 ID로 바꿉니다.aws ec2 describe-route-tables \ --filters 'Name=vpc-id,Values=
vpc-id
' \ --query 'RouteTables[0].RouteTableId' -
계정 A의 CIDR로 향하는 트래픽을 VPC 피어링 연결로 보내는 라우팅을 추가합니다. 각
사용자 입력 자리 표시자
를 계정의 올바른 값으로 바꿉니다.aws ec2 create-route \ --route-table-id
accountB-route-table-id
\ --destination-cidraccountA-vpc-cidr
\ --vpc-peering-connection-idpeering-connection-id
-
계정 A에서 이전에 찾은
vpc-id
를 사용하여 DAX 클러스터의 라우팅 테이블을 찾습니다.aws ec2 describe-route-tables \ --filters 'Name=vpc-id, Values=
accountA-vpc-id
' \ --query 'RouteTables[0].RouteTableId' -
계정 A에서 계정 B의 CIDR로 향하는 트래픽을 VPC 피어링 연결로 보내는 라우팅을 추가합니다. 각
사용자 입력 자리 표시자
를 계정의 올바른 값으로 바꿉니다.aws ec2 create-route \ --route-table-id
accountA-route-table-id
\ --destination-cidraccountB-vpc-cidr
\ --vpc-peering-connection-idpeering-connection-id
-
계정 B에서 이전에 생성한 VPC에서 EC2 인스턴스를 시작합니다.
AssumeDaxInstanceProfile
을 지정합니다. Launch Wizard는 AWS Management Console 또는 AWS CLI에서 사용할 수 있습니다. 인스턴스의 보안 그룹을 기록해 둡니다. -
계정 A에서 DAX 클러스터가 사용하는 보안 그룹을 찾습니다.
cluster-name
을 DAX 클러스터의 이름으로 바꿉니다.aws dax describe-clusters \ --cluster-name
cluster-name
\ --query 'Clusters[0].SecurityGroups[0].SecurityGroupIdentifier' -
계정 B에서 생성한 EC2 인스턴스의 보안 그룹에서 오는 인바운드 트래픽을 허용하도록 DAX 클러스터의 보안 그룹을 업데이트합니다.
사용자 입력 자리 표시자
를 계정의 올바른 값으로 바꿉니다.aws ec2 authorize-security-group-ingress \ --group-id
accountA-security-group-id
\ --protocol tcp \ --port 8111 \ --source-groupaccountB-security-group-id
\ --group-owneraccountB-id
이때 계정 B의 EC2 인스턴스에 있는 애플리케이션은 인스턴스 프로파일을 사용하여 arn:aws:iam::
역할을 수임하고 DAX 클러스터를 사용할 수 있습니다.accountA-id
:role/DaxCrossAccountRole
크로스 계정 액세스를 허용하도록 DAX 클라이언트 수정
참고
AWS Security Token Service(AWS STS) 자격 증명은 임시 자격 증명입니다. 일부 클라이언트는 새로 고침을 자동으로 처리하는 반면 다른 클라이언트는 자격 증명을 새로 고치기 위해 추가 로직이 필요합니다. 적절한 설명서의 지침을 따르는 것이 좋습니다.