2.7.3. 외부 시크릿 저장소에서 CSI 볼륨으로 보안 마운트


Secrets Store CSI Driver Operator를 설치한 후 다음 외부 보안 저장소 중 하나에서 CSI 볼륨에 시크릿을 마운트할 수 있습니다.

2.7.3.1. AWS Secrets Manager에서 보안 마운트

Secrets Store CSI Driver Operator를 사용하여 AWS Secrets Manager의 시크릿을 OpenShift Container Platform의 CSI 볼륨에 마운트할 수 있습니다. AWS Secrets Manager의 시크릿을 마운트하려면 AWS에 클러스터를 설치하고 AWS STS(보안 토큰 서비스)를 사용해야 합니다.

사전 요구 사항

  • 클러스터가 AWS에 설치되어 있으며 AWS STS(보안 토큰 서비스)를 사용합니다.
  • Secrets Store CSI Driver Operator가 설치되어 있습니다. 자세한 내용은 Secrets Store CSI 드라이버 설치를 참조하십시오.
  • 필요한 보안을 저장하도록 AWS Secrets Manager를 구성했습니다.
  • ccoctl 바이너리를 추출하여 준비했습니다.
  • jq CLI 툴을 설치했습니다.
  • cluster-admin 역할의 사용자로 클러스터에 액세스할 수 있어야 합니다.

프로세스

  1. AWS Secrets Manager 공급자를 설치합니다.

    1. 공급자 리소스에 대한 다음 구성을 사용하여 YAML 파일을 생성합니다.

      중요

      Secrets Store CSI 드라이버의 AWS Secrets Manager 공급자는 업스트림 공급자입니다.

      이 구성은 OpenShift Container Platform과 제대로 작동하도록 업스트림 AWS 설명서에 제공된 구성에서 수정됩니다. 이 구성을 변경하면 기능에 영향을 미칠 수 있습니다.

      aws-provider.yaml 파일의 예

      apiVersion: v1
      kind: ServiceAccount
      metadata:
        name: csi-secrets-store-provider-aws
        namespace: openshift-cluster-csi-drivers
      ---
      apiVersion: rbac.authorization.k8s.io/v1
      kind: ClusterRole
      metadata:
        name: csi-secrets-store-provider-aws-cluster-role
      rules:
      - apiGroups: [""]
        resources: ["serviceaccounts/token"]
        verbs: ["create"]
      - apiGroups: [""]
        resources: ["serviceaccounts"]
        verbs: ["get"]
      - apiGroups: [""]
        resources: ["pods"]
        verbs: ["get"]
      - apiGroups: [""]
        resources: ["nodes"]
        verbs: ["get"]
      ---
      apiVersion: rbac.authorization.k8s.io/v1
      kind: ClusterRoleBinding
      metadata:
        name: csi-secrets-store-provider-aws-cluster-rolebinding
      roleRef:
        apiGroup: rbac.authorization.k8s.io
        kind: ClusterRole
        name: csi-secrets-store-provider-aws-cluster-role
      subjects:
      - kind: ServiceAccount
        name: csi-secrets-store-provider-aws
        namespace: openshift-cluster-csi-drivers
      ---
      apiVersion: apps/v1
      kind: DaemonSet
      metadata:
        namespace: openshift-cluster-csi-drivers
        name: csi-secrets-store-provider-aws
        labels:
          app: csi-secrets-store-provider-aws
      spec:
        updateStrategy:
          type: RollingUpdate
        selector:
          matchLabels:
            app: csi-secrets-store-provider-aws
        template:
          metadata:
            labels:
              app: csi-secrets-store-provider-aws
          spec:
            serviceAccountName: csi-secrets-store-provider-aws
            hostNetwork: false
            containers:
              - name: provider-aws-installer
                image: public.ecr.aws/aws-secrets-manager/secrets-store-csi-driver-provider-aws:1.0.r2-50-g5b4aca1-2023.06.09.21.19
                imagePullPolicy: Always
                args:
                    - --provider-volume=/etc/kubernetes/secrets-store-csi-providers
                resources:
                  requests:
                    cpu: 50m
                    memory: 100Mi
                  limits:
                    cpu: 50m
                    memory: 100Mi
                securityContext:
                  privileged: true
                volumeMounts:
                  - mountPath: "/etc/kubernetes/secrets-store-csi-providers"
                    name: providervol
                  - name: mountpoint-dir
                    mountPath: /var/lib/kubelet/pods
                    mountPropagation: HostToContainer
            tolerations:
            - operator: Exists
            volumes:
              - name: providervol
                hostPath:
                  path: "/etc/kubernetes/secrets-store-csi-providers"
              - name: mountpoint-dir
                hostPath:
                  path: /var/lib/kubelet/pods
                  type: DirectoryOrCreate
            nodeSelector:
              kubernetes.io/os: linux

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

      $ oc adm policy add-scc-to-user privileged -z csi-secrets-store-provider-aws -n openshift-cluster-csi-drivers
    3. 다음 명령을 실행하여 공급자 리소스를 생성합니다.

      $ oc apply -f aws-provider.yaml
  2. 서비스 계정에서 AWS 시크릿 오브젝트를 읽을 수 있는 권한을 부여합니다.

    1. 다음 명령을 실행하여 인증 정보 요청을 포함할 디렉터리를 생성합니다.

      $ mkdir credentialsrequest-dir-aws
    2. 인증 정보 요청에 대해 다음 구성을 사용하여 YAML 파일을 생성합니다.

      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: "arn:*:secretsmanager:*:*:secret:testSecret-??????"
        secretRef:
          name: aws-creds
          namespace: my-namespace
        serviceAccountNames:
        - aws-provider

    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. 다음 명령을 실행하여 서비스 계정을 ARN 역할과 바인딩합니다.

      $ oc annotate -n my-namespace sa/aws-provider eks.amazonaws.com/role-arn="<aws_role_arn>"
  3. 시크릿 공급자 클래스를 생성하여 시크릿 저장소 공급자를 정의합니다.

    1. SecretProviderClass 오브젝트를 정의하는 YAML 파일을 생성합니다.

      secret-provider-class-aws.yaml의 예

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

      1 1
      시크릿 공급자 클래스의 이름을 지정합니다.
      2
      시크릿 공급자 클래스의 네임스페이스를 지정합니다.
      3
      공급자를 aws 로 지정합니다.
      4
      공급자별 구성 매개변수를 지정합니다.
    2. 다음 명령을 실행하여 SecretProviderClass 오브젝트를 생성합니다.

      $ oc create -f secret-provider-class-aws.yaml
  4. 이 시크릿 공급자 클래스를 사용할 배포를 생성합니다.

    1. Deployment 오브젝트를 정의하는 YAML 파일을 생성합니다.

      deployment.yaml의 예

      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: my-aws-deployment                              
      1
      
        namespace: my-namespace                              
      2
      
      spec:
        replicas: 1
        selector:
          matchLabels:
            app: my-storage
        template:
          metadata:
            labels:
              app: my-storage
          spec:
            containers:
            - name: busybox
              image: k8s.gcr.io/e2e-test-images/busybox:1.29
              command:
                - "/bin/sleep"
                - "10000"
              volumeMounts:
              - name: secrets-store-inline
                mountPath: "/mnt/secrets-store"
                readOnly: true
            volumes:
              - name: secrets-store-inline
                csi:
                  driver: secrets-store.csi.k8s.io
                  readOnly: true
                  volumeAttributes:
                    secretProviderClass: "my-aws-provider" 
      3

      1
      배포 이름을 지정합니다.
      2
      배포의 네임스페이스를 지정합니다. 이는 시크릿 공급자 클래스와 동일한 네임스페이스여야 합니다.
      3
      시크릿 공급자 클래스의 이름을 지정합니다.
    2. 다음 명령을 실행하여 Deployment 오브젝트를 생성합니다.

      $ oc create -f deployment.yaml

검증

  • Pod 볼륨 마운트의 AWS Secrets Manager에서 시크릿에 액세스할 수 있는지 확인합니다.

    1. Pod 마운트의 보안을 나열합니다.

      $ oc exec busybox-<hash> -n my-namespace -- ls /mnt/secrets-store/

      출력 예

      testSecret

    2. Pod 마운트에서 보안을 확인합니다.

      $ oc exec busybox-<hash> -n my-namespace -- cat /mnt/secrets-store/testSecret

      출력 예

      <secret_value>

Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 소개

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

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

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

Red Hat 문서 정보

Legal Notice

Theme

© 2026 Red Hat
맨 위로 이동