2.4. 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 리포지토리에 저장되어 있습니다.

프로세스

  1. 다음 명령을 실행하여 csi-secrets-store-provider-aws 서비스 계정에 대한 권한 권한을 부여합니다.

    $ oc adm policy add-scc-to-user privileged -z csi-secrets-store-provider-aws -n openshift-cluster-csi-drivers

    출력 예

    clusterrole.rbac.authorization.k8s.io/system:openshift:scc:privileged added: "csi-secrets-store-provider-aws"

  2. 서비스 계정에서 AWS 시크릿 오브젝트를 읽을 수 있는 권한을 부여합니다.

    1. 인증 정보 요청이 네임스페이스 범위이므로 GitOps 리포지토리의 네임스페이스 범위 디렉터리에 credentialsrequest-dir-aws 폴더를 생성합니다. 예를 들어 다음 명령을 실행하여 /environments/dev/ 디렉터리에 있는 dev 네임스페이스에 credentialsrequest-dir-aws 폴더를 생성합니다.

      $ mkdir credentialsrequest-dir-aws
    2. /environments/dev/credentialsrequest-dir-aws/ 경로에서 인증 정보 요청에 대한 다음 구성으로 YAML 파일을 생성하여 dev 네임스페이스의 배포 Pod에 보안을 마운트합니다.

      credentialsrequest.yaml 파일 예

      apiVersion: cloudcredential.openshift.io/v1
      kind: CredentialsRequest
      metadata:
        name: aws-provider-test
        namespace: openshift-cloud-credential-operator
      spec:
        providerSpec:
          apiVersion: cloudcredential.openshift.io/v1
          kind: AWSProviderSpec
          statementEntries:
          - action:
            - "secretsmanager:GetSecretValue"
            - "secretsmanager:DescribeSecret"
            effect: Allow
            resource: "<aws_secret_arn>" 1
      secretRef:
        name: aws-creds
        namespace: dev 2
      serviceAccountNames:
        - default

      2
      시크릿 참조의 네임스페이스입니다. 프로젝트 배포 설정에 따라 이 네임스페이스 필드의 값을 업데이트합니다.
      1
      클러스터가 있는 리전의 시크릿 ARN입니다. &lt ;aws_ secret_arn>의 <aws_ region>은 클러스터 리전과 일치해야 합니다. 일치하지 않는 경우 클러스터가 있는 리전에 시크릿 복제를 생성합니다.
      작은 정보

      클러스터 리전을 찾으려면 다음 명령을 실행합니다.

      $ oc get infrastructure cluster -o jsonpath='{.status.platformStatus.aws.region}'

      출력 예

      us-west-2

    3. 다음 명령을 실행하여 OIDC 공급자를 검색합니다.

      $ oc get --raw=/.well-known/openid-configuration | jq -r '.issuer'

      출력 예

      https://<oidc_provider_name>

      다음 단계에서 사용할 출력에서 OIDC 공급자 이름 <oidc_provider_name >을 복사합니다.

    4. 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

      출력 예

      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

      다음 단계에서 사용할 출력에서 < aws_role_arn >을 복사합니다. 예를 들어 arn:aws:iam::<aws_account_id>:role/my-role-my-namespace-aws-creds.

    5. AWS의 역할 정책을 확인하여 역할 정책의 < aws_region >의 <aws_region>이 클러스터 리전과 일치하는지 확인합니다.

      역할 정책 예

      {
      	"Version": "2012-10-17",
      	"Statement": [
      		{
      			"Effect": "Allow",
      			"Action": [
      				"secretsmanager:GetSecretValue",
      				"secretsmanager:DescribeSecret"
      			],
      			"Resource": "arn:aws:secretsmanager:<aws_region>:<aws_account_id>:secret:my-secret-xxxxxx"
      		}
      	]
      }

    6. 다음 명령을 실행하여 서비스 계정을 ARN 역할과 바인딩합니다.

      $ oc annotate -n <namespace> sa/<app_service_account> eks.amazonaws.com/role-arn="<aws_role_arn>"

      명령 예

      $ oc annotate -n dev sa/default eks.amazonaws.com/role-arn="<aws_role_arn>"

      출력 예

      serviceaccount/default annotated

  3. 네임스페이스 범위의 SecretProviderClass 리소스를 생성하여 시크릿 저장소 공급자를 정의합니다. 예를 들어 GitOps 리포지토리의 /environments/dev/apps/app-taxi/services/taxi/base/config 디렉터리에 SecretProviderClass 리소스를 생성합니다.

    1. 대상 배포가 GitOps 리포지토리에 있는 동일한 디렉터리에 secret-provider-class-aws.yaml 파일을 생성합니다.

      secret-provider-class-aws.yaml의 예

      apiVersion: secrets-store.csi.x-k8s.io/v1
      kind: SecretProviderClass
      metadata:
        name: my-aws-provider 1
        namespace: dev 2
      spec:
        provider: aws 3
        parameters: 4
          objects: |
            - objectName: "testSecret" 5
              objectType: "secretsmanager"

      1
      시크릿 공급자 클래스의 이름입니다.
      2
      시크릿 공급자 클래스의 네임스페이스입니다. 네임스페이스는 보안을 사용할 리소스의 네임스페이스와 일치해야 합니다.
      3
      시크릿 저장소 공급자의 이름입니다.
      4
      공급자별 구성 매개변수를 지정합니다.
      5
      AWS에서 생성한 시크릿 이름입니다.
    2. 이 YAML 파일을 GitOps 리포지토리로 내보낸 후 Argo CD UI의 대상 애플리케이션 페이지에 네임스페이스 범위의 SecretProviderClass 리소스가 채워져 있는지 확인합니다.

      참고

      애플리케이션의 동기화 정책이 Auto 로 설정되지 않은 경우 Argo CD UI에서 동기화를 클릭하여 SecretProviderClass 리소스를 수동으로 동기화 할 수 있습니다.

Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

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

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

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

Red Hat 소개

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

© 2024 Red Hat, Inc.