2.3. GitOps를 사용하여 OpenShift에서 AWS Secrets Manager 구성
이 가이드에서는 CSI(Secrets Store Container Storage Interface) Driver Operator와 함께 GitOps 워크플로우를 사용하여 AWS Secrets Manager의 시크릿을 OpenShift Container Platform의 CSI 볼륨에 마운트하는 데 도움이 되는 예제를 제공합니다.
예를 들어 SSCSI Driver Operator가 있는 시크릿 저장소 공급자로 AWS Secrets Manager를 사용하는 것이 좋습니다. 다음 예제에서는 AWS Secrets Manager의 시크릿을 사용할 준비가 된 GitOps 리포지토리의 디렉터리 구조를 보여줍니다.
GitOps 리포지토리의 디렉터리 구조 예
- 2
aws-provider.yaml
파일을 저장하는 디렉터리입니다.- 3
- AWS Secrets Manager 공급자를 설치하고 해당 공급자를 위한 리소스를 배포하는 구성 파일입니다.
- 1
- 애플리케이션을 생성하고 AWS Secrets Manager용 리소스를 배포하는 구성 파일입니다.
- 4
- 배포 Pod 및 인증 정보 요청을 저장하는 디렉터리입니다.
- 5
SecretProviderClass
리소스를 저장하여 시크릿 저장소 공급자를 정의하는 디렉터리입니다.- 6
credentialsrequest.yaml
파일을 저장하는 폴더입니다. 이 파일에는 배포 Pod에 보안을 마운트하기 위한 인증 정보 요청 구성이 포함되어 있습니다.
2.3.1. GitOps 리포지토리에 AWS Secrets Manager 리소스 저장 링크 복사링크가 클립보드에 복사되었습니다!
선언적 및 버전 제어 보안 관리를 위해 AWS Secrets Manager 구성을 GitOps 리포지토리에 저장할 수 있습니다.
SSCSI Driver Operator를 AWS Secrets Manager와 함께 사용하는 것은 호스트된 컨트롤 플레인 클러스터에서 지원되지 않습니다.
사전 요구 사항
-
cluster-admin
권한이 있는 클러스터에 액세스할 수 있습니다. - OpenShift Container Platform 웹 콘솔에 액세스할 수 있습니다.
-
ccoctl
바이너리를 추출하여 준비했습니다. -
jq
CLI 툴을 설치했습니다. - 클러스터가 AWS에 설치되어 있으며 AWS STS(보안 토큰 서비스)를 사용합니다.
- 필요한 보안을 저장하도록 AWS Secrets Manager를 구성했습니다.
- SSCSI Driver Operator가 클러스터에 설치되어 있습니다.
- Red Hat OpenShift GitOps Operator가 클러스터에 설치되어 있습니다.
- secrets를 사용할 수 있는 GitOps 리포지토리가 있습니다.
- Argo CD 관리자 계정을 사용하여 Argo CD 인스턴스에 로그인했습니다.
프로세스
AWS Secrets Manager 공급자를 설치하고 리소스를 추가합니다.
GitOps 리포지토리에서 디렉터리를 생성하고 다음 구성으로
aws-provider.yaml
파일을 추가하여 AWS Secrets Manager 공급자에 대한 리소스를 배포합니다.중요SSCSI 드라이버의 AWS Secrets Manager 공급자는 업스트림 공급자입니다.
이 구성은 OpenShift Container Platform과 제대로 작동하도록 업스트림 AWS 설명서에 제공된 구성에서 수정됩니다. 이 구성을 변경하면 기능에 영향을 미칠 수 있습니다.
aws-provider.yaml
파일의 예Copy to Clipboard Copied! Toggle word wrap Toggle overflow GitOps 리포지토리에
secret-provider-app.yaml
파일을 추가하여 애플리케이션을 생성하고 AWS Secrets Manager의 리소스를 배포합니다.secret-provider-app.yaml
파일 예Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- GitOps 리포지토리를 가리키도록
repoURL
필드의 값을 업데이트합니다.
리소스를 기본 Argo CD 인스턴스와 동기화하여 클러스터에 배포합니다.
openshift-gitops
네임스페이스의 Argo CD 인스턴스에서 관리할 수 있도록 애플리케이션이 배포된openshift-cluster-csi-drivers
네임스페이스에 레이블을 추가합니다.oc label namespace openshift-cluster-csi-drivers argocd.argoproj.io/managed-by=openshift-gitops
$ oc label namespace openshift-cluster-csi-drivers argocd.argoproj.io/managed-by=openshift-gitops
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 방금 내보낸
aws-provider.yaml
파일을 포함하여 GitOps 리포지토리의 리소스를 클러스터에 적용합니다.출력 예
application.argoproj.io/argo-app created application.argoproj.io/secret-provider-app created ...
application.argoproj.io/argo-app created application.argoproj.io/secret-provider-app created ...
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Argo CD UI에서 csi-secrets-store-provider-aws
데몬 세트에서 리소스를 계속 동기화하는지 확인할 수 있습니다. 이 문제를 해결하려면 AWS Secrets Manager에서 시크릿을 마운트하도록 SSCSI 드라이버를 구성해야 합니다.
2.3.2. AWS Secrets Manager에서 시크릿을 마운트하도록 SSCSI 드라이버 구성 링크 복사링크가 클립보드에 복사되었습니다!
보안을 안전하게 저장하고 관리하려면 GitOps 워크플로우를 사용하고 Secrets Store Container Storage Interface (SSCSI) Driver Operator를 구성하여 AWS Secrets Manager의 시크릿을 OpenShift Container Platform의 CSI 볼륨에 마운트합니다. 예를 들어 /environments/dev/
디렉터리에 있는 dev
네임스페이스 아래의 배포 Pod에 시크릿을 마운트하려고 합니다.
사전 요구 사항
- AWS Secrets Manager 리소스가 GitOps 리포지토리에 저장되어 있습니다.
프로세스
다음 명령을 실행하여
csi-secrets-store-provider-aws
서비스 계정에 대한 권한 권한을 부여합니다.oc adm policy add-scc-to-user privileged -z csi-secrets-store-provider-aws -n openshift-cluster-csi-drivers
$ oc adm policy add-scc-to-user privileged -z csi-secrets-store-provider-aws -n openshift-cluster-csi-drivers
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 출력 예
clusterrole.rbac.authorization.k8s.io/system:openshift:scc:privileged added: "csi-secrets-store-provider-aws"
clusterrole.rbac.authorization.k8s.io/system:openshift:scc:privileged added: "csi-secrets-store-provider-aws"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 서비스 계정에서 AWS 시크릿 오브젝트를 읽을 수 있는 권한을 부여합니다.
인증 정보 요청이 네임스페이스 범위이므로 GitOps 리포지토리의 네임스페이스 범위 디렉터리에
credentialsrequest-dir-aws
폴더를 생성합니다. 예를 들어 다음 명령을 실행하여/environments/dev/
디렉터리에 있는dev
네임스페이스에credentialsrequest-dir-aws
폴더를 생성합니다.mkdir credentialsrequest-dir-aws
$ mkdir credentialsrequest-dir-aws
Copy to Clipboard Copied! Toggle word wrap Toggle overflow /environments/dev/credentialsrequest-dir-aws/
경로에서 인증 정보 요청에 대한 다음 구성으로 YAML 파일을 생성하여dev
네임스페이스의 배포 Pod에 보안을 마운트합니다.credentialsrequest.yaml
파일 예Copy to Clipboard Copied! Toggle word wrap Toggle overflow 작은 정보클러스터 리전을 찾으려면 다음 명령을 실행합니다.
oc get infrastructure cluster -o jsonpath='{.status.platformStatus.aws.region}'
$ oc get infrastructure cluster -o jsonpath='{.status.platformStatus.aws.region}'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 출력 예
us-west-2
us-west-2
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여 OIDC 공급자를 검색합니다.
oc get --raw=/.well-known/openid-configuration | jq -r '.issuer'
$ oc get --raw=/.well-known/openid-configuration | jq -r '.issuer'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 출력 예
https://<oidc_provider_name>
https://<oidc_provider_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 단계에서 사용할 출력에서 OIDC
공급자 이름 <oidc_provider_name
>을 복사합니다.ccoctl
툴을 사용하여 다음 명령을 실행하여 인증 정보 요청을 처리합니다.ccoctl aws create-iam-roles \ --name my-role --region=<aws_region> \ --credentials-requests-dir=credentialsrequest-dir-aws \ --identity-provider-arn arn:aws:iam::<aws_account>:oidc-provider/<oidc_provider_name> --output-dir=credrequests-ccoctl-output
$ ccoctl aws create-iam-roles \ --name my-role --region=<aws_region> \ --credentials-requests-dir=credentialsrequest-dir-aws \ --identity-provider-arn arn:aws:iam::<aws_account>:oidc-provider/<oidc_provider_name> --output-dir=credrequests-ccoctl-output
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 출력 예
2023/05/15 18:10:34 Role arn:aws:iam::<aws_account_id>:role/my-role-my-namespace-aws-creds created 2023/05/15 18:10:34 Saved credentials configuration to: credrequests-ccoctl-output/manifests/my-namespace-aws-creds-credentials.yaml 2023/05/15 18:10:35 Updated Role policy for Role my-role-my-namespace-aws-creds
2023/05/15 18:10:34 Role arn:aws:iam::<aws_account_id>:role/my-role-my-namespace-aws-creds created 2023/05/15 18:10:34 Saved credentials configuration to: credrequests-ccoctl-output/manifests/my-namespace-aws-creds-credentials.yaml 2023/05/15 18:10:35 Updated Role policy for Role my-role-my-namespace-aws-creds
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 단계에서 사용할 출력에서 <
aws_role_arn
>을 복사합니다. 예를 들어arn:aws:iam::<aws_account_id>:role/my-role-my-namespace-aws-creds
.AWS의 역할 정책을 확인하여 역할 정책의 <
aws_region
>의 <aws_region>이 클러스터 리전과 일치하는지 확인합니다.역할 정책 예
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여 서비스 계정을 ARN 역할과 바인딩합니다.
oc annotate -n <namespace> sa/<app_service_account> eks.amazonaws.com/role-arn="<aws_role_arn>"
$ oc annotate -n <namespace> sa/<app_service_account> eks.amazonaws.com/role-arn="<aws_role_arn>"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 명령 예
oc annotate -n dev sa/default eks.amazonaws.com/role-arn="<aws_role_arn>"
$ oc annotate -n dev sa/default eks.amazonaws.com/role-arn="<aws_role_arn>"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 출력 예
serviceaccount/default annotated
serviceaccount/default annotated
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
네임스페이스 범위의
SecretProviderClass
리소스를 생성하여 시크릿 저장소 공급자를 정의합니다. 예를 들어 GitOps 리포지토리의/environments/dev/apps/app-taxi/services/taxi/base/config
디렉터리에SecretProviderClass
리소스를 생성합니다.대상 배포가 GitOps 리포지토리에 있는 동일한 디렉터리에
secret-provider-class-aws.yaml
파일을 생성합니다.secret-provider-class-aws.yaml
의 예Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이 YAML 파일을 GitOps 리포지토리로 내보낸 후 Argo CD UI의 대상 애플리케이션 페이지에 네임스페이스 범위의
SecretProviderClass
리소스가 채워져 있는지 확인합니다.참고애플리케이션의 동기화 정책이
Auto
로 설정되지 않은 경우 Argo CD UI에서 동기화를 클릭하여SecretProviderClass
리소스를 수동으로 동기화 할 수 있습니다.
2.3.3. 마운트된 보안을 사용하도록 GitOps 관리 리소스 구성 링크 복사링크가 클립보드에 복사되었습니다!
배포에 볼륨 마운트 구성을 추가하고 마운트된 보안을 사용하도록 컨테이너 Pod를 구성하여 GitOps 관리 리소스를 구성해야 합니다.
사전 요구 사항
- AWS Secrets Manager 리소스가 GitOps 리포지토리에 저장되어 있습니다.
- AWS Secrets Manager에서 보안을 마운트하도록 SSCSI(Secrets Store Container Storage Interface) 드라이버가 구성되어 있습니다.
프로세스
GitOps 관리 리소스를 구성합니다. 예를 들어
app-taxi
애플리케이션 배포에 볼륨 마운트 구성을 추가하고100-deployment.yaml
파일은/environments/dev/apps/app-taxi/services/config/
디렉터리에 있다고 가정합니다.- Argo CD UI에서 대상 애플리케이션 페이지에서 REFRESH 를 클릭하여 업데이트된 배포 매니페스트를 적용합니다.
- 모든 리소스가 대상 애플리케이션 페이지에서 성공적으로 동기화되었는지 확인합니다.
Pod 볼륨 마운트의 AWS Secrets 관리자에서 시크릿에 액세스할 수 있는지 확인합니다.
Pod 마운트의 보안을 나열합니다.
oc exec <deployment_name>-<hash> -n <namespace> -- ls /mnt/secrets-store/
$ oc exec <deployment_name>-<hash> -n <namespace> -- ls /mnt/secrets-store/
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 명령 예
oc exec taxi-5959644f9-t847m -n dev -- ls /mnt/secrets-store/
$ oc exec taxi-5959644f9-t847m -n dev -- ls /mnt/secrets-store/
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 출력 예
<secret_name>
<secret_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Pod 마운트에서 보안을 확인합니다.
oc exec <deployment_name>-<hash> -n <namespace> -- cat /mnt/secrets-store/<secret_name>
$ oc exec <deployment_name>-<hash> -n <namespace> -- cat /mnt/secrets-store/<secret_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 명령 예
oc exec taxi-5959644f9-t847m -n dev -- cat /mnt/secrets-store/testSecret
$ oc exec taxi-5959644f9-t847m -n dev -- cat /mnt/secrets-store/testSecret
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 출력 예
<secret_value>
<secret_value>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow