개요 : AWS 계정에서 다른 리전간의 Endpoint 공유 방법


일반적으로 AWS 서비스 엔드포인트(공인IP) 를 사용하면 문제없이 사용 가능하다. 하지만 내부 엔드포인트 인터페이스를 통해서만 엔드포인트를 사용 하고 싶은 경우에는 설정이 필요하다.

 

방법 : VPC 피어링을 통해 VPC 간 데이터를 공유할 수 있도록 설정 한 다음 Route53 에서 피어링된 VPC 두개를 대상으로 잡고 DNS 를 엔드포인트 DNS 를 사용하면 내부망에 있는 엔드포인트를 사용하여 서비스를 운영할 수 있다.


개념 설명 : Route53 은 글로벌 서비스로 지정한 VPC 에 대해서 DNS 서비스를 제공해준다.

따라서 VPC 피어링을 통해 VPC 간 연결을 생성한 다음 Route53 서비스 영역(VPC) 로 피어링을 맺은 두개의 VPC 를 지정하면, 지정된 두개의 VPC 에서는 Route53 을통해 DNS 조회가 가능하다


예를들어 서울리전과, 도쿄리전에서 엔드포인트를 공유 하고자 하는 경우로 설명 하겠다.

ex) 서울리전(ap-northeast-2) 에서 도쿄리전(ap-northeast-1) 의 엔드포인트를 사용 하고자 할 경우

-> 서울리전에 있는 EC2 에서 도쿄리전에 있는 리소스 조회를 위해 됴쿄리전에 있는 ec2 엔드포인트가 필요하다고 가정


방법

1. VPC 피어링을 통해 서울리전과 됴쿄리전을 연결

2. Route53 에서 대상 VPC 에 1번에서 피어링을 맺은 서울리전과 도쿄리전을 모두 지정

3. 됴쿄리전에 ec2 엔드포인트를 생성 (주의사항 : 퍼블릭 DNS 기능 제거)

4. Route53 에서 ec2 엔드포인트 주소인 ec2.ap-northeast-1.amazonaws.com 을 호스팅으로 지정

5. ec2.ap-northeast-1.amazonaws.com 에 레코드에서 별칭사용 -> 됴쿄리전 VPC 종단점 -> ec2 엔드포인트 지정

6. 서울리전 ec2 에서 https://ec2.ap-northeast-1.amazonaws.com 을  지정하면 사용 가능

 

참고자료 : https://docs.aws.amazon.com/ko_kr/whitepapers/latest/building-scalable-secure-multi-vpc-network-infrastructure/centralized-access-to-vpc-private-endpoints.html#cross-region-endpoint-access

'AWS' 카테고리의 다른 글

AWS EKS SVC 로 NLB 사용 시 Time out 발생 현상  (1) 2023.07.09
EKS Config Update  (0) 2023.07.08
AWS EKS efs-csi-driver install  (0) 2023.06.07
AWS Multi Region Network 구성  (0) 2023.06.07
ECR Multi Region Replication  (0) 2023.06.04

개요 : AWS EKS 에서 볼륨을 사용하기 위해서는 ebs-csi-driver / efs-csi-driver 가 필요합니다

ebs-csi-driver 의 경우 Add-on 형식으로 생성이 가능해져서 어렵지 않개 생성이 가능합니다.

다만, efs-csi-driver 의 경우 Add-on 형식으로 제공이 불가능 하기에 수동으로 설치를 해야 합니다.

 


설치방법

1. IAM 자격증명 공급자 생성

2. IAM Role / Policy 생성

3. EKS 에 install yaml 배포

 


1. IAM 자격 증명 공급자 생성

  • IAM -> 자격증명 공급자 -> 공급자 추가
  • 공급자 URL 에 EKS 개요 탭에 있는 'OpenID Connect 공급자 URL' 복사하여 입력 -> 지문 가져오기
  • 대상에 sts.amazonaws.com 입력 후 생성

2. IAM Role / Policy 생성

  • Policy 정책 생성 (정책 이름은 상관 없음)
  • Role 생성(아래 신뢰관계로 생성) 후 생성한 Policy 추가

Policy

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "elasticfilesystem:DescribeAccessPoints",
        "elasticfilesystem:DescribeFileSystems",
        "elasticfilesystem:DescribeMountTargets",
        "ec2:DescribeAvailabilityZones"
      ],
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": [
        "elasticfilesystem:CreateAccessPoint"
      ],
      "Resource": "*",
      "Condition": {
        "StringLike": {
          "aws:RequestTag/efs.csi.aws.com/cluster": "true"
        }
      }
    },
    {
      "Effect": "Allow",
      "Action": [
        "elasticfilesystem:TagResource"
      ],
      "Resource": "*",
      "Condition": {
        "StringLike": {
          "aws:ResourceTag/efs.csi.aws.com/cluster": "true"
        }
      }
    },
    {
      "Effect": "Allow",
      "Action": "elasticfilesystem:DeleteAccessPoint",
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "aws:ResourceTag/efs.csi.aws.com/cluster": "true"
        }
      }
    }
  ]
}

Role 신뢰 관계

  • Statement.Federated 에서 OIDC 정보 수정(1번에서 생성한 OIDC 정보에 있음)
  • Conditon.StringEquals 에서 OIDC 정보 수정(1번에서 생성한 OIDC 정보에 있음)
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Federated": "arn:aws:iam::111122223333:oidc-provider/oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE"
      },
      "Action": "sts:AssumeRoleWithWebIdentity",
      "Condition": {
        "StringEquals": {
          "oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE:sub": "system:serviceaccount:kube-system:efs-csi-controller-sa"
        }
      }
    }
  ]
}

 

3. EKS 에 install yaml 배포

---
apiVersion: v1
kind: ServiceAccount
metadata:
  labels:
    app.kubernetes.io/name: aws-efs-csi-driver
  name: efs-csi-controller-sa
  namespace: kube-system
  annotations:
    eks.amazonaws.com/role-arn: arn:aws:iam::111122223333:role/AmazonEKS_EFS_CSI_DriverRole

https://github.com/kubernetes-sigs/aws-efs-csi-driver/tree/master/deploy/kubernetes/base

 

GitHub - kubernetes-sigs/aws-efs-csi-driver: CSI Driver for Amazon EFS https://aws.amazon.com/efs/

CSI Driver for Amazon EFS https://aws.amazon.com/efs/ - GitHub - kubernetes-sigs/aws-efs-csi-driver: CSI Driver for Amazon EFS https://aws.amazon.com/efs/

github.com

 

참고 문서 : https://docs.aws.amazon.com/ko_kr/eks/latest/userguide/efs-csi.html

 

Amazon EFS CSI 드라이버 - Amazon EKS

spec.capacity는 Amazon EFS가 Elastic 파일 시스템이므로 Amazon EFS CSI 드라이버에서는 작동하지 않습니다. 영구 볼륨 및 영구 볼륨 클레임의 실제 스토리지 용량 값은 파일 시스템을 생성할 때는 사용되

docs.aws.amazon.com

 

'AWS' 카테고리의 다른 글

EKS Config Update  (0) 2023.07.08
Multi Region Endpoint Sharing  (0) 2023.06.15
AWS Multi Region Network 구성  (0) 2023.06.07
ECR Multi Region Replication  (0) 2023.06.04
EKS 최초 생성 권한 문제  (0) 2023.04.16

개요 : AWS Network 구성시 동일 리전에서만 사용 한다면 특별히 고려할 사항없이 구성 할 수 있다.

VPC 가 여러개인 경우 TGW 연결을 진행 할 수 있고, VPC 가 2개인경우 1:1로 VPC Peering 구성을 진행 할 수도 있다.

 

TGW 연결을 진행 할때 RAM 을 통해 TGW를 공유하여 TGW ATTECHMENT 를 사용하여 연결 이 가능하다.

단, Multi Region 을 구성 하고자 할때는 RAM 사용이 불가능하다. 사유로는 RAM 은 리전에 종속 되기 때문에 동일한 리전에서만 공유가 가능하다. 이때 고려해야할 부분이 TGW Peering 연결이다.

 

TGW Peering 방식은 TGW ATTECHMENT 를 Peering 방식으로 한개 생성 후 계정 두개와 공유를 진행 하고 VPC TGW ATTECHMENT 를 생성하여 라우팅을 잡아 주면 된다.

 

https://docs.aws.amazon.com/ko_kr/vpc/latest/tgw/tgw-peering.html

'AWS' 카테고리의 다른 글

Multi Region Endpoint Sharing  (0) 2023.06.15
AWS EKS efs-csi-driver install  (0) 2023.06.07
ECR Multi Region Replication  (0) 2023.06.04
EKS 최초 생성 권한 문제  (0) 2023.04.16
AWS LB Annotations  (0) 2023.01.23

개요 : ECR 멀리리전 이미지 복제를 위해서는 Private Registry 의 Permissions 설정과, Replication 설정이 필요 함

 

고려사항 : 복제 정책을 설정 한다고 해도, 기존에 있는 이미지는 복제가 되지 않는다. 새로 Push 되는 이미지에 대해서만 복제가 발생함

 

적용 시나리오 : A 계정의 서울리전 ECR 에서 A 계정의 도쿄리전의 ECR 로 이미지 복제 

1. 서울 리전 Permisstions 에서 명령문 생성을 클릭

  • 명령문 ID 는 아무 문자를 넣어도 상관 없음
  • 계정의 경우 현재 시나리오 에서는 동일 계정의 다른 리전을 대상으로 하므로, 테스트할 계정의 Account number 기재

2. Replication 생성 -> 규칙추가 -> 대상리전 선택 까지하고나면 아래와 같은화면이 나옴

  • 여기서 필터를 추가하지 않고 저장하게 되면, push 가 일어나는 모든 레포지 토리의 이미지가복제됨
  • 필터를 추가하게 되면 필터에 걸린 이미지만 복제가 생성됨

 

3. 받는쪽 리전의 Permissions 설정을 1번과 같이 설정하면 끝

 

'AWS' 카테고리의 다른 글

AWS EKS efs-csi-driver install  (0) 2023.06.07
AWS Multi Region Network 구성  (0) 2023.06.07
EKS 최초 생성 권한 문제  (0) 2023.04.16
AWS LB Annotations  (0) 2023.01.23
EventBridge 를 사용한 알람 발송  (0) 2023.01.20

개요 : EKS는 최초 생성한 사람만이 master 권한을 가지고 있으며, 이 사람을 제외한 사용자는 접근 할 수없다

방법 : EKS 생성 후 생성한 사람의 권한으로 접속하여 다른 사용자/Role 에게 권한을 주어야 한다


1. EKS 생성

 - AWS 콘솔에서 EKS 를 생성

 

2. EC2에 kubectl 명령어 설치 및 EKS config update

 

- kubectl 설치

https://docs.aws.amazon.com/ko_kr/eks/latest/userguide/install-kubectl.html

 

kubectl 설치 또는 업데이트 - Amazon EKS

Amazon EKS 클러스터 제어 영역과 마이너 버전이 하나 다른 kubectl 버전을 사용해야 합니다. 예를 들어 1.24 kubectl 클라이언트는 Kubernetes 1.23, 1.24, 1.25 클러스터와 함께 작동합니다.

docs.aws.amazon.com

- kubectl config upgrade

aws eks update-kubeconfig --region region-code --name my-cluster

https://docs.aws.amazon.com/ko_kr/eks/latest/userguide/create-cluster.html

 

Amazon EKS 클러스터 생성 - Amazon EKS

AWS Management Console을 사용하여 클러스터를 배포한 경우 이 단계를 건너뛸 수 있습니다. AWS Management Console은 기본적으로 Amazon VPC CNI plugin for Kubernetes, CoreDNS 및 kube-proxy Amazon EKS 추가 기능을 배포합

docs.aws.amazon.com

 

3. kubectl 명령어 확인

 

4. aws-auth configmap 확인

    ※ EKS Cluster 만 있을 때에는 aws-auth 가 생성 되지 않는 것으로 보입니다.

        따라서, 노드그룹을 생성 해야 aws-auth configmap 이 생성 됩니다.

 

5. 아래와 같이 Configmap 수정 

 - 초록색 부분이 기본적으로 설정 되어 있는 부분 입니다.

 - role 로 매핑할 경우 아래와 같이 mapRoles 부분에 원하는 Role 을 추가 하면 됩니다

    -> 새로 추가하는 groups 의 username 은 아무거나 입력해도 됩니다

 - 2번 항목에서 EC2 에서 사용하는 IAM 역할이 바로 위 항목에서 입력한 Role 과 동일해야 EC2 에서 EKS 를 사용 할 수 있습니다.

 

 

 - user 권한을 추가할 경우 아래 문서 참고 하여 추가

 - user ID 를사용할 경우 EC2 에 해당 user Credential 이 있어야 합니다.

 - 참고 : aws sts get-caller-identity

    https://docs.aws.amazon.com/ko_kr/eks/latest/userguide/add-user-role.html

 

클러스터에 대한 IAM 보안 주체 액세스 사용 - Amazon EKS

역할 ARN에는 role/my-team/developers/my-role과 같은 경로가 포함될 수 없습니다. ARN 형식은 arn:aws:iam::111122223333:role/my-role이어야 합니다. 이 예에서는 my-team/developers/를 제거해야 합니다.

docs.aws.amazon.com

 

 

참고자료

[system:masters] 에 생성자 user 가 매핑 되는 것을 EKS log 로 확인 가능

EKS 최초 생성 시 생성자 계정이 system:master 에 매핑됨
Authenticator Version: "v0.5.15", "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
time="2023-04-16T04:27:27Z" level=info msg="starting mapper \"MountedFile\""
time="2023-04-16T04:27:27Z" level=info msg="starting mapper \"EKSConfigMap\""
time="2023-04-16T04:27:27Z" level=info msg="starting mapper \"DynamicFile\""
time="2023-04-16T04:27:27Z" level=info msg="mapping IAM role" groups="[]" role="arn:aws:iam::698743187964:role/AWSWesleyClusterManagerLambda-Add-AddonManagerRole-1xxxY" username="eks:addon-manager"
time="2023-04-16T04:27:27Z" level=info msg="mapping IAM role" groups="[]" role="arn:aws:iam::698743187964:role/AWSWesleyClusterManagerLambda-NodeManagerRole-SJxxxOT" username="eks:node-manager"
time="2023-04-16T04:27:27Z" level=info msg="mapping IAM role" groups="[]" role="arn:aws:iam::698743187964:role/AWSWesleyClusterManagerLambda-FargateManagerRole-XAxxx4T" username="eks:fargate-manager"
time="2023-04-16T04:27:27Z" level=info msg="mapping IAM user" groups="[system:masters]" user="arn:aws:iam::111111111111:user/xxxxxx@xxxxxxx.co.kr" username=kubernetes-admin
time="2023-04-16T04:27:27Z" level=error msg="Unable to re-establish watch: Get \"https://10.0.50.xxx:443/api/v1/namespaces/kube-system/configmaps?fieldSelector=metadata.name%3Daws-auth&watch=true\": dial tcp 10.0.50.219:xxx: connect: connection refused, sleeping for 5 seconds."
time="2023-04-16T04:27:30Z" level=info msg="Creating certificate with address" address=127.0.0.1
time="2023-04-16T04:27:30Z" level=info msg="generated a new private key and certificate" certBytes=xxx keyBytes=xxxx
time="2023-04-16T04:27:30Z" level=info msg="saving new key and certificate" certPath=/var/authenticator/xxxx.pem keyPath=/var/authenticator/xxx.pem
time="2023-04-16T04:27:30Z" level=info msg="loaded existing keypair" certPath=/var/authenticator/xxxx.pem keyPath=/var/authenticator/xxx.pem
time="2023-04-16T04:27:30Z" level=info msg="writing webhook kubeconfig file" kubeconfigPath=/etc/kubernetes/authenticator/apiserver-webhook-kubeconfig.yaml
time="2023-04-16T04:27:30Z" level=info msg="listening on 127.0.0.1:xxxxx"
time="2023-04-16T04:27:30Z" level=info msg="reconfigure your apiserver with `--authentication-token-webhook-config-file=/etc/kubernetes/authenticator/apiserver-webhook-kubeconfig.yaml` to enable (assuming default hostPath mounts)"
time="2023-04-16T04:27:30Z" level=info msg="Using assumed role for EC2 API" roleARN="arn:aws:iam::111111111111:role/xxxEKSClusterRole"
time="2023-04-16T04:27:30Z" level=info msg="Starting the h.ec2Provider.startEc2DescribeBatchProcessing "
time="2023-04-16T04:27:32Z" level=error msg="Unable to re-establish watch: Get \"https://10.0.50.xxx:443/api/v1/namespaces/kube-system/configmaps?fieldSelector=metadata.name%3Daws-auth&watch=true\": dial tcp 10.0.50.xxx:xxx: connect: connection refused, sleeping for 5 seconds."
time="2023-04-16T04:27:41Z" level=error msg="Unable to re-establish watch: unknown (get configmaps), sleeping for 5 seconds."
time="2023-04-16T04:27:46Z" level=error msg="Unable to re-establish watch: unknown (get configmaps), sleeping for 5 seconds."



노드그룹 생성
time="2023-04-16T04:50:06Z" level=info msg="Received aws-auth watch event"
time="2023-04-16T04:50:31Z" level=info msg="STS response" accesskeyid=xxxxxxxxxxxxxxx accountid=111111111111 arn="arn:aws:sts::111111111111:assumed-role/AmazonEKSNodeRole/i-0xxxxxxxxxe8" client="127.0.0.1:xxxxx" method=POST path=/authenticate session=i-0xxxxxxxe8 userid=xxxxxxx
time="2023-04-16T04:50:31Z" level=info msg="Calling ec2:DescribeInstances for the InstanceId = i-xxxxxx "
time="2023-04-16T04:50:32Z" level=info msg="access granted" arn="arn:aws:iam::111111111111:role/xxxxEKSNodeRole" client="127.0.0.1:xxxxx" groups="[system:bootstrappers system:nodes]" method=POST path=/authenticate uid="aws-iam-authenticator:111111111111:xxxxx" username="system:node:ip-172-xx-xx-xx.ap-northeast-2.compute.internal"

 

 

 

 

 

'AWS' 카테고리의 다른 글

AWS Multi Region Network 구성  (0) 2023.06.07
ECR Multi Region Replication  (0) 2023.06.04
AWS LB Annotations  (0) 2023.01.23
EventBridge 를 사용한 알람 발송  (0) 2023.01.20
AWS EKS nodegroup 생성 시 필요 조건  (0) 2023.01.20

+ Recent posts