18.13. 튜토리얼: AWS 서비스와 통합
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
도 생성합니다.
- 클러스터 콘솔에 로그인합니다.
- 왼쪽 메뉴에서 Operator를 클릭한 다음 OperatorHub 를 클릭합니다.
필터 상자에 "S3"를 입력하고 AWS Controller for Kubernetes - Amazon S3 를 선택합니다.
- 커뮤니티 운영자에 대한 팝업이 표시되면 Continue 를 클릭합니다.
- 설치를 클릭합니다.
- "설치 모드" 에서 클러스터의 모든 네임스페이스를 선택합니다.
- "설치된 네임스페이스"에서 ack-system 을 선택합니다.
"업데이트 승인"에서 수동 을 선택합니다.
중요수동 모드가 선택되어 있는지 확인하므로 서비스 계정에 대한 변경 사항이 자동 운영자 업데이트로 덮어쓰지 않습니다.
설치를 클릭합니다.
설정은 아래 이미지와 같아야 합니다.
- 승인 을 클릭합니다.
- ACK 컨트롤러에 대한 IAM 역할 및 정책을 생성할 때까지 설치가 시작되지만 완료되지 않습니다.
18.13.4. ACK 컨트롤러에 대한 IAM 역할 및 정책 생성 링크 복사링크가 클립보드에 복사되었습니다!
다음 스크립트 중 하나를 실행하여 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
$ curl https://raw.githubusercontent.com/openshift-cs/rosaworkshop/master/rosa-workshop/ostoy/resources/setup-s3-ack-controller.sh | bash
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
- 스크립트가 완료되면 서비스 계정 환경 변수에 대한 IAM 역할로 서비스 컨트롤러 Pod를 업데이트하는 배포를 재시작합니다.
다음 명령을 실행하여 환경 변수가 설정되었는지 확인합니다.
oc describe pod ack-s3-controller -n ack-system | grep "^\s*AWS_"
$ oc describe pod ack-s3-controller -n ack-system | grep "^\s*AWS_"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 출력 예
AWS_ROLE_ARN: arn:aws:iam::000000000000:role/ack-s3-controller AWS_WEB_IDENTITY_TOKEN_FILE: /var/run/secrets/eks.amazonaws.com/serviceaccount/token
AWS_ROLE_ARN: arn:aws:iam::000000000000:role/ack-s3-controller AWS_WEB_IDENTITY_TOKEN_FILE: /var/run/secrets/eks.amazonaws.com/serviceaccount/token
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Operator 및 설치된 Operator를 클릭하여 웹 콘솔에서 ACK 컨트롤러의 설치를 성공적으로 확인합니다.
Operator 설치 및 환경 변수가 표시되지 않는 경우 다음 명령을 실행하여 배포를 수동으로 다시 시작합니다.
oc rollout restart deployment ack-s3-controller -n ack-system
$ oc rollout restart deployment ack-s3-controller -n ack-system
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
18.13.5. 애플리케이션에 대한 액세스 설정 링크 복사링크가 클립보드에 복사되었습니다!
OSToy가 S3 버킷에 오브젝트를 읽고 쓸 수 있도록 AWS IAM 역할 및 서비스 계정을 생성할 수 있습니다.
다음 명령을 실행하여 OSToy에 대한 새 고유 프로젝트를 생성합니다.
oc new-project ostoy-$(uuidgen | cut -d - -f 2 | tr '[:upper:]' '[:lower:]')
$ oc new-project ostoy-$(uuidgen | cut -d - -f 2 | tr '[:upper:]' '[:lower:]')
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여 네임스페이스 및 프로젝트의 이름을 환경 변수에 저장합니다.
export OSTOY_NAMESPACE=$(oc config view --minify -o 'jsonpath={..namespace}')
$ export OSTOY_NAMESPACE=$(oc config view --minify -o 'jsonpath={..namespace}')
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
18.13.6. AWS IAM 역할 생성 링크 복사링크가 클립보드에 복사되었습니다!
다음 명령을 실행하여 AWS 계정 ID를 가져옵니다.
export AWS_ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text)
$ export AWS_ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여 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)
$ export OIDC_PROVIDER=$(rosa describe cluster -c <cluster-name> -o yaml | awk '/oidc_endpoint_url/ {print $2}' | cut -d '/' -f 3,4)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여 신뢰 정책 파일을 생성합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여 서비스 계정과 함께 사용할 AWS IAM 역할을 생성합니다.
aws iam create-role --role-name "ostoy-sa-role" --assume-role-policy-document file://ostoy-sa-trust.json
$ aws iam create-role --role-name "ostoy-sa-role" --assume-role-policy-document file://ostoy-sa-trust.json
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
18.13.7. IAM 역할에 S3 정책 연결 링크 복사링크가 클립보드에 복사되었습니다!
다음 명령을 실행하여 S3 전체 액세스 정책 ARN을 가져옵니다.
export POLICY_ARN=$(aws iam list-policies --query 'Policies[?PolicyName==`AmazonS3FullAccess`].Arn' --output text)
$ export POLICY_ARN=$(aws iam list-policies --query 'Policies[?PolicyName==`AmazonS3FullAccess`].Arn' --output text)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여 AWS IAM 역할에 정책을 연결합니다.
aws iam attach-role-policy --role-name "ostoy-sa-role" --policy-arn "${POLICY_ARN}"
$ aws iam attach-role-policy --role-name "ostoy-sa-role" --policy-arn "${POLICY_ARN}"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
18.13.8. Pod의 서비스 계정 생성 링크 복사링크가 클립보드에 복사되었습니다!
다음 명령을 실행하여 서비스 계정을 생성할 때 주석으로 포함되도록 생성한 AWS IAM 역할에 대한 ARN을 가져옵니다.
export APP_IAM_ROLE_ARN=$(aws iam get-role --role-name=ostoy-sa-role --query Role.Arn --output text)
$ export APP_IAM_ROLE_ARN=$(aws iam get-role --role-name=ostoy-sa-role --query Role.Arn --output text)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여 서비스 계정을 생성합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 중요서비스 계정의 이름을 "ostoy-sa"에서 변경하지 마십시오. 그렇지 않으면 AWS IAM 역할에 대한 신뢰 관계를 변경해야 합니다.
다음 명령을 실행하여 서비스 계정에
restricted
역할을 부여합니다.oc adm policy add-scc-to-user restricted system:serviceaccount:${OSTOY_NAMESPACE}:ostoy-sa
$ oc adm policy add-scc-to-user restricted system:serviceaccount:${OSTOY_NAMESPACE}:ostoy-sa
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여 주석이 성공했는지 확인합니다.
oc describe serviceaccount ostoy-sa -n ${OSTOY_NAMESPACE}
$ oc describe serviceaccount ostoy-sa -n ${OSTOY_NAMESPACE}
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 출력 예
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
18.13.9. S3 버킷 생성 링크 복사링크가 클립보드에 복사되었습니다!
다음 명령을 실행하여 매니페스트 파일을 사용하여 S3 버킷을 생성합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 중요OSToy 애플리케이션은 <
namespace>-bucket이라는 버킷을
찾을 것으로 예상합니다. OSToy 프로젝트의 네임스페이스 이외의 항목을 사용하는 경우 이 기능이 작동하지 않습니다. 예를 들어, 프로젝트가 "ostoy"인 경우name
값은ostoy-bucket
이어야 합니다.다음 명령을 실행하여 버킷이 생성되었는지 확인합니다.
aws s3 ls | grep ${OSTOY_NAMESPACE}-bucket
$ aws s3 ls | grep ${OSTOY_NAMESPACE}-bucket
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
18.13.10. 새 서비스 계정으로 OSToy 앱 재배포 링크 복사링크가 클립보드에 복사되었습니다!
- 생성한 서비스 계정으로 Pod를 실행합니다.
다음 명령을 실행하여 마이크로 서비스를 배포합니다.
- oc apply -f https://raw.githubusercontent.com/openshift-cs/rosaworkshop/master/rosa-workshop/ostoy/yaml/ostoy-microservice-deployment.yaml
$ - oc apply -f https://raw.githubusercontent.com/openshift-cs/rosaworkshop/master/rosa-workshop/ostoy/yaml/ostoy-microservice-deployment.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여
ostoy-frontend
를 배포합니다.- oc apply -f https://raw.githubusercontent.com/openshift-cs/rosaworkshop/master/rosa-workshop/ostoy/yaml/ostoy-frontend-deployment.yaml
$ - oc apply -f https://raw.githubusercontent.com/openshift-cs/rosaworkshop/master/rosa-workshop/ostoy/yaml/ostoy-frontend-deployment.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여
ostoy-frontend
배포를 패치합니다.oc patch deploy ostoy-frontend -n ${OSTOY_NAMESPACE} --type=merge --patch '{"spec": {"template": {"spec":{"serviceAccount":"ostoy-sa"}}}}'
$ oc patch deploy ostoy-frontend -n ${OSTOY_NAMESPACE} --type=merge --patch '{"spec": {"template": {"spec":{"serviceAccount":"ostoy-sa"}}}}'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 출력 예
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - Pod가 업데이트될 때까지 기다립니다.
18.13.11. 환경 변수 확인 링크 복사링크가 클립보드에 복사되었습니다!
다음 명령을 사용하여 Pod를 설명하고 애플리케이션에 대한
AWS_LOAD_IDENTITY_TOKEN_FILE
및AWS_ROLE_ARN
환경 변수가 있는지 확인합니다.oc describe pod ostoy-frontend -n ${OSTOY_NAMESPACE} | grep "^\s*AWS_"
$ oc describe pod ostoy-frontend -n ${OSTOY_NAMESPACE} | grep "^\s*AWS_"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 출력 예
AWS_ROLE_ARN: arn:aws:iam::000000000000:role/ostoy-sa AWS_WEB_IDENTITY_TOKEN_FILE: /var/run/secrets/eks.amazonaws.com/serviceaccount/token
AWS_ROLE_ARN: arn:aws:iam::000000000000:role/ostoy-sa AWS_WEB_IDENTITY_TOKEN_FILE: /var/run/secrets/eks.amazonaws.com/serviceaccount/token
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
18.13.12. OSToy를 통해 버킷 콘텐츠 보기 링크 복사링크가 클립보드에 복사되었습니다!
앱을 사용하여 S3 버킷의 콘텐츠를 봅니다.
다음 명령을 실행하여 새로 배포된 애플리케이션의 경로를 가져옵니다.
oc get route ostoy-route -n ${OSTOY_NAMESPACE} -o jsonpath='{.spec.host}{"\n"}'
$ oc get route ostoy-route -n ${OSTOY_NAMESPACE} -o jsonpath='{.spec.host}{"\n"}'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 새 브라우저 탭을 열고 이전 단계에서 가져온 경로를 입력합니다.
중요https://
가 아닌http://
를 사용해야 합니다.- OSToy의 왼쪽 메뉴에서 ACK S3 을 클릭합니다.
새 버킷이므로 버킷이 비어 있어야 합니다.
18.13.13. S3 버킷에 파일 생성 링크 복사링크가 클립보드에 복사되었습니다!
OStoy를 사용하여 파일을 생성하고 S3 버킷에 업로드합니다. S3는 모든 종류의 파일을 허용할 수 있지만 이 튜토리얼에서는 브라우저에서 내용을 쉽게 렌더링할 수 있도록 텍스트 파일을 사용합니다.
- OSToy의 왼쪽 메뉴에서 ACK S3 을 클릭합니다.
- 아래로 스크롤하여 텍스트 파일을 S3에 업로드 합니다.
- 파일의 파일 이름을 입력합니다.
- 파일에 대한 콘텐츠를 입력합니다.
파일 생성을 클릭합니다.
- 기존 파일의 맨 위 섹션으로 스크롤하여 방금 만든 파일이 있는지 확인합니다.
파일 이름을 클릭하여 파일을 확인합니다.
다음 명령을 실행하여 버킷의 콘텐츠를 나열하여 AWS CLI로 확인합니다.
aws s3 ls s3://${OSTOY_NAMESPACE}-bucket
$ aws s3 ls s3://${OSTOY_NAMESPACE}-bucket
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 출력 예
aws s3 ls s3://ostoy-bucket
$ aws s3 ls s3://ostoy-bucket 2023-05-04 22:20:51 51 OSToy.txt
Copy to Clipboard Copied! Toggle word wrap Toggle overflow