검색

18.13. 튜토리얼: AWS 서비스와 통합

download PDF

OSToy 애플리케이션이 독립적으로 작동하지만 많은 실제 애플리케이션에는 데이터베이스, 개체 저장소 또는 메시징 서비스와 같은 외부 서비스가 필요합니다.

목표

  • OSToy 애플리케이션을 다른 AWS(Amazon Web Services) 서비스, 특히 AWS S3 Storage와 통합하는 방법을 알아보십시오. 이 섹션이 끝나면 애플리케이션은 AWS S3 Storage에서 오브젝트를 안전하게 생성하고 읽습니다.
  • Kubernetes(ACK)용 Amazon Controller를 사용하여 Kubernetes에서 직접 애플리케이션에 필요한 서비스를 생성합니다.
  • 서비스 계정에서 액세스 및 인증을 관리하려면 IAM(Identity and Access Management) 역할을 사용합니다.
  • OSToy를 사용하여 기본 텍스트 파일을 생성하여 S3 버킷에 저장합니다.
  • 파일이 성공적으로 추가되었으며 버킷에서 읽을 수 있는지 확인합니다.

18.13.1. Amazon Controller for Kubernetes (ACK)

ACK 를 사용하여 Kubernetes에서 직접 AWS 서비스를 생성하고 사용합니다. 친숙한 구조를 사용하여 S3 버킷 또는 RDS(Database Service) 데이터베이스와 같은 AWS 서비스를 선언적으로 정의하고 생성하는 방식으로 Kubernetes 프레임워크에 애플리케이션을 직접 배포할 수 있습니다.

ACK를 사용하면 S3 버킷을 만들고 OSToy 애플리케이션과 통합하고 파일을 업로드한 후 애플리케이션에서 파일을 볼 수 있습니다.

18.13.2. 서비스 계정의 IAM 역할

서비스 계정에 IAM 역할을 사용하여 Kubernetes 서비스 계정에 직접 IAM 역할을 할당할 수 있습니다. 이를 사용하여 AWS 계정에 서비스를 배포하기 위해 ACK 컨트롤러 자격 증명을 부여할 수 있습니다. 서비스 계정에 IAM 역할을 사용하여 임시 인증 정보의 관리 및 순환을 자동화합니다.

Pod는 유효한 OpenID Connect(OIDC) JSON 웹 토큰(JWT)을 수신하고 이를 AWS STS AssumeRoleWithWebIdentity API 작업에 전달하여 IAM 임시 역할 인증 정보를 수신합니다. 이 프로세스는 AWS IAM 액세스가 필요한 Pod를 수정하는 EKS Pod ID 변경 Webhook를 사용합니다.

서비스 계정의 IAM 역할은 다음과 같은 모범 사례를 따릅니다.

  • 최소 권한 원칙: 제한된 액세스만 허용하는 AWS 역할에 대한 IAM 권한을 생성할 수 있습니다. 이러한 권한은 역할과 연결된 서비스 계정으로 제한되며 해당 서비스 계정을 사용하는 Pod만 액세스할 수 있습니다.
  • 인증 정보 격리: Pod는 Pod가 사용 중인 서비스 계정과 연결된 IAM 역할에 대한 인증 정보만 검색할 수 있습니다.
  • 감사: 모든 AWS 리소스 액세스는 CloudTrail에서 볼 수 있습니다.

추가 리소스

18.13.3. ACK 컨트롤러 설치

버킷에 Kubernetes 사용자 지정 리소스를 사용하여 S3 서비스에서 버킷을 생성하고 삭제하려면 ACK 컨트롤러를 설치합니다. 컨트롤러를 설치하면 필요한 네임스페이스 및 서비스 계정도 생성됩니다.

Operator를 사용하여 쉽게 수행할 수 있습니다. Operator 설치에서는 ack-system 네임스페이스와 서비스 계정 ack-s3-controller 도 생성합니다.

  1. 클러스터 콘솔에 로그인합니다.
  2. 왼쪽 메뉴에서 Operator를 클릭한 다음 OperatorHub 를 클릭합니다.
  3. 필터 상자에 "S3"를 입력하고 AWS Controller for Kubernetes - Amazon S3 를 선택합니다.

    cloud experts deploying integrating ack operator

  4. 커뮤니티 운영자에 대한 팝업이 표시되면 Continue 를 클릭합니다.
  5. 설치를 클릭합니다.
  6. "설치 모드" 에서 클러스터의 모든 네임스페이스를 선택합니다.
  7. "설치된 네임스페이스"에서 ack-system 을 선택합니다.
  8. "업데이트 승인"에서 수동 을 선택합니다.

    중요

    수동 모드가 선택되어 있는지 확인하므로 서비스 계정에 대한 변경 사항이 자동 운영자 업데이트로 덮어쓰지 않습니다.

  9. 설치를 클릭합니다.

    설정은 아래 이미지와 같아야 합니다.

    cloud experts deployment integrating ack install

  10. 승인 을 클릭합니다.
  11. ACK 컨트롤러에 대한 IAM 역할 및 정책을 생성할 때까지 설치가 시작되지만 완료되지 않습니다.

18.13.4. ACK 컨트롤러에 대한 IAM 역할 및 정책 생성

  1. 다음 스크립트 중 하나를 실행하여 ACK 컨트롤러에 대한 AWS IAM 역할을 생성하고 S3 정책을 할당합니다.

    • 자동으로 setup-s3-ack-controller.sh 스크립트를 다운로드하여 사용자를 위한 프로세스를 자동화합니다.
    • CLI(명령줄 인터페이스)에서 다음 스크립트를 실행합니다.

      $ curl https://raw.githubusercontent.com/openshift-cs/rosaworkshop/master/rosa-workshop/ostoy/resources/setup-s3-ack-controller.sh | bash
  2. 스크립트가 완료되면 서비스 계정 환경 변수에 대한 IAM 역할로 서비스 컨트롤러 Pod를 업데이트하는 배포를 재시작합니다.
  3. 다음 명령을 실행하여 환경 변수가 설정되었는지 확인합니다.

    $ oc describe pod ack-s3-controller -n ack-system | grep "^\s*AWS_"

    출력 예

    AWS_ROLE_ARN:                 arn:aws:iam::000000000000:role/ack-s3-controller
    AWS_WEB_IDENTITY_TOKEN_FILE:  /var/run/secrets/eks.amazonaws.com/serviceaccount/token

  4. Operator 및 설치된 Operator를 클릭하여 웹 콘솔에서 ACK 컨트롤러의 설치를 성공적으로 확인합니다.

    cloud experts deployment installing ack oper installed

  5. Operator 설치 및 환경 변수가 표시되지 않는 경우 다음 명령을 실행하여 배포를 수동으로 다시 시작합니다.

    $ oc rollout restart deployment ack-s3-controller -n ack-system

18.13.5. 애플리케이션에 대한 액세스 설정

OSToy가 S3 버킷에 오브젝트를 읽고 쓸 수 있도록 AWS IAM 역할 및 서비스 계정을 생성할 수 있습니다.

  1. 다음 명령을 실행하여 OSToy에 대한 새 고유 프로젝트를 생성합니다.

    $ oc new-project ostoy-$(uuidgen | cut -d - -f 2 | tr '[:upper:]' '[:lower:]')
  2. 다음 명령을 실행하여 네임스페이스 및 프로젝트의 이름을 환경 변수에 저장합니다.

    $ export OSTOY_NAMESPACE=$(oc config view --minify -o 'jsonpath={..namespace}')

18.13.6. AWS IAM 역할 생성

  1. 다음 명령을 실행하여 AWS 계정 ID를 가져옵니다.

    $ export AWS_ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text)
  2. 다음 명령을 실행하여 OIDC 공급자를 가져와서 < cluster-name >을 클러스터 이름으로 교체합니다.

    $ export OIDC_PROVIDER=$(rosa describe cluster -c <cluster-name> -o yaml | awk '/oidc_endpoint_url/ {print $2}' | cut -d '/' -f 3,4)
  3. 다음 명령을 실행하여 신뢰 정책 파일을 생성합니다.

    $ cat <<EOF > ./ostoy-sa-trust.json
    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Principal": {
            "Federated": "arn:aws:iam::${AWS_ACCOUNT_ID}:oidc-provider/${OIDC_PROVIDER}"
          },
          "Action": "sts:AssumeRoleWithWebIdentity",
          "Condition": {
            "StringEquals": {
              "${OIDC_PROVIDER}:sub": "system:serviceaccount:${OSTOY_NAMESPACE}:ostoy-sa"
            }
          }
        }
      ]
    }
    EOF
  4. 다음 명령을 실행하여 서비스 계정과 함께 사용할 AWS IAM 역할을 생성합니다.

    $ aws iam create-role --role-name "ostoy-sa-role" --assume-role-policy-document file://ostoy-sa-trust.json

18.13.7. IAM 역할에 S3 정책 연결

  1. 다음 명령을 실행하여 S3 전체 액세스 정책 ARN을 가져옵니다.

    $ export POLICY_ARN=$(aws iam list-policies --query 'Policies[?PolicyName==`AmazonS3FullAccess`].Arn' --output text)
  2. 다음 명령을 실행하여 AWS IAM 역할에 정책을 연결합니다.

    $ aws iam attach-role-policy --role-name "ostoy-sa-role" --policy-arn "${POLICY_ARN}"

18.13.8. Pod의 서비스 계정 생성

  1. 다음 명령을 실행하여 서비스 계정을 생성할 때 주석으로 포함되도록 생성한 AWS IAM 역할에 대한 ARN을 가져옵니다.

    $ export APP_IAM_ROLE_ARN=$(aws iam get-role --role-name=ostoy-sa-role --query Role.Arn --output text)
  2. 다음 명령을 실행하여 서비스 계정을 생성합니다.

    $ cat <<EOF | oc apply -f -
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: ostoy-sa
      namespace: ${OSTOY_NAMESPACE}
      annotations:
        eks.amazonaws.com/role-arn: "$APP_IAM_ROLE_ARN"
    EOF
    중요

    서비스 계정의 이름을 "ostoy-sa"에서 변경하지 마십시오. 그렇지 않으면 AWS IAM 역할에 대한 신뢰 관계를 변경해야 합니다.

  3. 다음 명령을 실행하여 서비스 계정에 restricted 역할을 부여합니다.

    $ oc adm policy add-scc-to-user restricted system:serviceaccount:${OSTOY_NAMESPACE}:ostoy-sa
  4. 다음 명령을 실행하여 주석이 성공했는지 확인합니다.

    $ oc describe serviceaccount ostoy-sa -n ${OSTOY_NAMESPACE}

    출력 예

    Name:                ostoy-sa
    Namespace:           ostoy
    Labels:              <none>
    Annotations:         eks.amazonaws.com/role-arn: arn:aws:iam::000000000000:role/ostoy-sa-role
    Image pull secrets:  ostoy-sa-dockercfg-b2l94
    Mountable secrets:   ostoy-sa-dockercfg-b2l94
    Tokens:              ostoy-sa-token-jlc6d
    Events:              <none>

18.13.9. S3 버킷 생성

  1. 다음 명령을 실행하여 매니페스트 파일을 사용하여 S3 버킷을 생성합니다.

    $ cat <<EOF | oc apply -f -
    apiVersion: s3.services.k8s.aws/v1alpha1
    kind: Bucket
    metadata:
      name: ${OSTOY_NAMESPACE}-bucket
      namespace: ${OSTOY_NAMESPACE}
    spec:
      name: ${OSTOY_NAMESPACE}-bucket
    EOF
    중요

    OSToy 애플리케이션은 < namespace>-bucket이라는 버킷을 찾을 것으로 예상합니다. OSToy 프로젝트의 네임스페이스 이외의 항목을 사용하는 경우 이 기능이 작동하지 않습니다. 예를 들어, 프로젝트가 "ostoy"인 경우 name 값은 ostoy-bucket 이어야 합니다.

  2. 다음 명령을 실행하여 버킷이 생성되었는지 확인합니다.

    $ aws s3 ls | grep ${OSTOY_NAMESPACE}-bucket

18.13.10. 새 서비스 계정으로 OSToy 앱 재배포

  1. 생성한 서비스 계정으로 Pod를 실행합니다.
  2. 다음 명령을 실행하여 마이크로 서비스를 배포합니다.

    $ - oc apply -f https://raw.githubusercontent.com/openshift-cs/rosaworkshop/master/rosa-workshop/ostoy/yaml/ostoy-microservice-deployment.yaml
  3. 다음 명령을 실행하여 ostoy-frontend 를 배포합니다.

    $ - oc apply -f https://raw.githubusercontent.com/openshift-cs/rosaworkshop/master/rosa-workshop/ostoy/yaml/ostoy-frontend-deployment.yaml
  4. 다음 명령을 실행하여 ostoy-frontend 배포를 패치합니다.

    $ oc patch deploy ostoy-frontend -n ${OSTOY_NAMESPACE} --type=merge --patch '{"spec": {"template": {"spec":{"serviceAccount":"ostoy-sa"}}}}'

    출력 예

    spec:
      # Uncomment to use with ACK portion of the workshop
      # If you chose a different service account name please replace it.
      serviceAccount: ostoy-sa
      containers:
      - name: ostoy-frontend
        image: quay.io/ostoylab/ostoy-frontend:1.6.0
        imagePullPolicy: IfNotPresent
    [...]

  5. Pod가 업데이트될 때까지 기다립니다.

18.13.11. 환경 변수 확인

  • 다음 명령을 사용하여 Pod를 설명하고 애플리케이션에 대한 AWS_LOAD_IDENTITY_TOKEN_FILEAWS_ROLE_ARN 환경 변수가 있는지 확인합니다.

    $ oc describe pod ostoy-frontend -n ${OSTOY_NAMESPACE} | grep "^\s*AWS_"

    출력 예

    AWS_ROLE_ARN:                 arn:aws:iam::000000000000:role/ostoy-sa
    AWS_WEB_IDENTITY_TOKEN_FILE:  /var/run/secrets/eks.amazonaws.com/serviceaccount/token

18.13.12. OSToy를 통해 버킷 콘텐츠 보기

앱을 사용하여 S3 버킷의 콘텐츠를 봅니다.

  1. 다음 명령을 실행하여 새로 배포된 애플리케이션의 경로를 가져옵니다.

    $ oc get route ostoy-route -n ${OSTOY_NAMESPACE} -o jsonpath='{.spec.host}{"\n"}'
  2. 새 브라우저 탭을 열고 이전 단계에서 가져온 경로를 입력합니다.

    중요

    https:// 가 아닌 http:// 를 사용해야 합니다.

  3. OSToy의 왼쪽 메뉴에서 ACK S3 을 클릭합니다.
  4. 새 버킷이므로 버킷이 비어 있어야 합니다.

    cloud expert deploying integrating ack views3contents

18.13.13. S3 버킷에 파일 생성

OStoy를 사용하여 파일을 생성하고 S3 버킷에 업로드합니다. S3는 모든 종류의 파일을 허용할 수 있지만 이 튜토리얼에서는 브라우저에서 내용을 쉽게 렌더링할 수 있도록 텍스트 파일을 사용합니다.

  1. OSToy의 왼쪽 메뉴에서 ACK S3 을 클릭합니다.
  2. 아래로 스크롤하여 텍스트 파일을 S3에 업로드 합니다.
  3. 파일의 파일 이름을 입력합니다.
  4. 파일에 대한 콘텐츠를 입력합니다.
  5. 파일 생성을 클릭합니다.

    cloud expert deploying integrating ack creates3obj

  6. 기존 파일의 맨 위 섹션으로 스크롤하여 방금 만든 파일이 있는지 확인합니다.
  7. 파일 이름을 클릭하여 파일을 확인합니다.

    cloud experts deploying integrating ack viewobj

  8. 다음 명령을 실행하여 버킷의 콘텐츠를 나열하여 AWS CLI로 확인합니다.

    $ aws s3 ls s3://${OSTOY_NAMESPACE}-bucket

    출력 예

    $ aws s3 ls s3://ostoy-bucket
    2023-05-04 22:20:51         51 OSToy.txt

Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

© 2024 Red Hat, Inc.