AWS STS 스프링 클라우드 돔

AWS STS 및 스프링 클라우드 돔
이전 게시물에서는 Spring Cloud Vault와 통합된 보안 관리 모드를 언급했습니다.이외에 나는 내가 연구하고 있는 문제 중 하나가 사용에 관한 것이라고 강조했다AWS STS for S_pring Cloud Vault_.spring cloud 2020.0.2 지금 이 기능을 제공합니다!!!
<dependency>
 <groupId>org.springframework.cloud</groupId>
 <artifactId>spring-cloud-dependencies</artifactId>
 <version>2020.0.2</version>
 <type>pom</type>
 <scope>import</scope>
</dependency>
Release Train versioning명명약정에 주의하세요!

AWS 보안 토큰 서비스(AWS STS)


AWS 보안 토큰 서비스(AWS STS)는 AWS ID 및 액세스 관리(IAM) 사용자 또는 인증된 사용자(공동 사용자)에게 임시 권한 증명서를 요청할 수 있는 웹 서비스입니다.AWS STS의 주요 목적은 사용자나 응용 프로그램이 역할을 수행하고 AWS 서비스나 자원에 대한 접근을 허용하는 것이다.자세한 내용은 IAM 사용 설명서Temporary Security Credentials를 참조하십시오.
STS를 통한 IAM 사용자
응용 프로그램에 있어서 이것은 다를 것이 없다. 우리는 응용 프로그램에 역할을 맡기고, AWS 자원 (예: EC2, S3 등) 에 임시 증빙서류를 요청할 수 있다. 이것이 바로 Spring Cloud Vault와Vault의 AWS Secrets 백엔드가 결합된 곳이며, Spring Boot 응용 프로그램에 동적 증빙서류를 사용하는 능력을 제공한다.

Vault AWS 비밀 백엔드


AWS 기밀 엔진은 IAM 정책에 따라 AWS 액세스 자격 증명을 동적으로 생성합니다.AWS IAM 자격 증명은 시간에 따라 Vault 임대차 계약이 만료되면 자동으로 취소됩니다.
Vault는 AWS에서 세 가지 유형의 자격 증명을 검색할 수 있습니다.

  • iam_user:Vault는 모든 임대차 계약을 위한 IAM 사용자를 만들고 캐릭터에 지정된 위탁 관리와 내부 연결 IAM 정책을 이 사용자에게 추가합니다. 캐릭터에 permissions boundary가 지정되면 권한 경계도 추가됩니다.그런 다음 Vault는 IAM 사용자를 위한 액세스 키와 키를 생성하여 호출자에게 반환합니다.IAM 사용자는 세션 토큰이 없으므로 세션 토큰이 반환되지 않습니다.Vault는 TTL 만료 시점에 IAM 사용자를 삭제합니다.

  • assumed_role:Vault는 호출sts:AssumeRole을 하고 접근 키, 키와 세션 영패를 호출자에게 되돌려줍니다.

  • federation_token:Vault는 호출sts:GetFederationToken을 호출하여 제공된 AWS 정책 문서를 전송하고 접근 키, 키와 세션 영패를 호출자에게 되돌려줍니다.
  • 설정에 대한 자세한 내용은 AWS Secrets Engine를 참조하십시오.

    봄구름 돔


    AWS 비밀 엔진은spring cloud vault config AWS를 추가하여 사용 가능
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-vault-config-aws</artifactId>
            <version>3.0.2</version>
        </dependency>
    </dependencies>
    
    이제 AWS secret integration은 이전 버전과의 호환성을 위해 iam user를 기본으로 사용하는 자격 증명 유형 개념을 지원합니다.
    iam 사용자 구성 예:
    spring.cloud.vault:
      aws:
        enabled: true
        role: readonly
        backend: aws
        access-key-property: cloud.aws.credentials.accessKey
        secret-key-property: cloud.aws.credentials.secretKey
    
  • 이 값을 true로 설정하면 AWS 백엔드 구성 사용
  • 역할 설정 AWS 역할 정의
  • 의 역할 이름
  • 백엔드에서 사용할 AWS 마운트 경로 설정
  • 액세스 키 속성 설정 AWS 액세스 키를 저장하는 속성 이름
  • 키 속성 설정 AWS 키를 저장하는 속성 이름
  • AWS STS의 경우 자격 증명 유형에서 지원되는 값은\u 역할 또는 조인트\u 토큰으로 가정됩니다.
    역할 구성의 예:
    spring.cloud.vault:
      aws:
        enabled: true
          role: sts-vault-role
          backend: aws
          credential-type: assumed_role
          access-key-property: cloud.aws.credentials.accessKey
          secret-key-property: cloud.aws.credentials.secretKey
          session-token-key-property: cloud.aws.credentials.sessionToken
          ttl: 3600s
          role-arn: arn:aws:iam::${AWS_ACCOUNT}:role/sts-app-role
    
    새 STS 구성:
  • 세션 토큰키 속성 설정 AWS STS 보안 토큰의 속성 이름
  • 자격 증명 유형 이후의 AWS 자격 증명 유형을 설정합니다.기본값은 iam 사용자
  • ttl은 가정된 캐릭터나 연합 영패를 사용할 때 STS영패의ttl을 설정합니다.기본적으로 vault 역할에 지정된 TTL입니다.최소/최대값도 AWS의 STS 지원으로 제한됩니다.
  • 캐릭터arn이 가정한 캐릭터
  • 를 사용할 때vault캐릭터에 여러 IAM캐릭터를 설정하면 가정할 IAM캐릭터를 설정합니다
    이 통합에 대한 자세한 내용은 Spring Cloud Vault AWS Backend를 참조하십시오.

    임대 교대와 재산 원천


    STS 자격 증명은 기본적으로 60분 TTL입니다.필요에 따라 TTL을 조정할 수 있습니다.허용되는 최소/최대 TTL 값은 AWS STS에서 허용하는 구성과 일치합니다.
    가정한 캐릭터의 경우 최소 900초(15분)에서 캐릭터의 최대 세션 지속 시간 설정 사이로 설정할 수 있습니다. 이 설정은 3600초(1시간)에서 43200초(12시간) 사이입니다.federation token의 기본 만료 시간은 매우 길다(가정한 캐릭터에 비해 12시간이지 1시간이 아니다). 우리는 900초(15분)에서 129600초(36시간) 사이의 지속 시간을 지정할 수 있다.
    Spring Cloud Vault 호스팅 리스 계약은 갱신(갱신 가능한 경우)하거나 Vault 라이프 사이클 구성에 따라 번갈아 가며 할 수 있습니다.
    Vault 라이프 사이클의 예:
    vault:
      enabled: true
      host: 127.0.0.1
      port: 8200
      scheme: http
      uri: [http://127.0.0.1:8200/](http://127.0.0.1:8200/)
      config:
        lifecycle:
          min-renewal: 1m
          expiry-threshold: 5m
    
    minrenewal은 임대차 계약 갱신/교대 빈도가 높지 않고 적어도 설정 기한 내에 변하지 않도록 확보할 수 있습니다.만료 한도값은vault가 임대차 계약을 갱신/교대하는 임대차 계약이 만료되기 전에 설정한 지속 시간입니다.
    Spring Cloud Vault와 Lease Container는 임대차 계약이 만료될 때 새로운 증빙집을 사용하여 부동산 출처를 업데이트할 수 있도록 보장합니다.그러나 응용 프로그램은 속성 소스와 환경에서 업데이트된 모든 속성이 자격 증명을 사용하여 초기화된 Springbean을 통해 전파되도록 할 책임이 있습니다.
    다음과 같이 spring boot 응용 프로그램이 ConfigurationProperties 클래스를 통해 AWS creds를 관리한다고 가정합니다.

    AWSCOConfiguration 속성에 자동으로 연결된 의존 관계가 있는 또 다른 리셋 범위 bean이 존재한다고 가정합니다





    이 경우 SecretLeaseCreatedEvent를 감청하고 프로그램에 속성을 업데이트해야 할 수도 있습니다. (예: AWS 인증서) 의 설정 속성과 다른 갱신 범위의 bean은 매우 중요합니다.다음 단계에서 이 목표를 어떻게 달성할지 돌아봅시다





    • 에 표시된Vault AWS 설정은postConstruct() 기간에 임대 탐지기 등록
    • ConfigurationProperties Rebinder
    • 를 사용하여 모든 ConfigurationProperties(AWSCOConfiguration Properties)를 다시 바인딩합니다.
    • SecretLeaseCreated Event를 받은 후 ApplicationContext의 모든 갱신 범위의 bean(AWSCOConfiguration,basicaWSCredentials,amazonS3Client)을 갱신합니다.

    스프링 클라우드 aws를 직접 사용하지 않는 이유를 알고 싶습니다.만약 네가 옳다면, 너는 절대로 옳다!지금 이 순간, 봄의 구름.3.0 AWS 액세스 키 및 기밀만 지원됩니다.현재vault와lease 활동과 통합할 수 없습니다.저는 supporting STS Session Token에 문제를 기록했습니다. Spring Cloud AWS와 Spring Cloud Vault를 통합하여credential 관리자를 실현하는 것이 좋은 보충이 될 것입니다


    Graceful Shutdown


    응용 프로그램 컨테이너가 닫힐 때 Spring Cloud Vault는 모든 활동 임대 계약을 취소합니다.스프링 클라우드 vault에서 임대차 계약을 취소할 수 있도록sys/leages/revoke를 실행하려면vault 역할에 적당한 권한을 설정해야 합니다


    Spring Boot 2.4와legacy bootstrap에서 겪은 일은/actuator/refresh가 최종적으로 상하문을 닫았고 Lease Container의destroy () 를 터치하여 취소시켰다는 것입니다.남겨진 안내 아래 해결 방안은 없지만 설정 데이터 API로 바꾸는 것을 권장합니다.스프링 설정 가져오는 처리 순서가 이와 반대입니다.예를 들어vault와Consor(ACL 포함) 등 여러 원본을 사용하여 가져오고 vault 기밀을 먼저 해석하고 가져오려면



    spring:
      config:
        import: consul://,vault://
    

    는 STS와vault와 상관없이 spring boot issue 설정 데이터 API를 사용하여 질서정연한 의존 관계를 해결하기 위해 속성 원본을 업데이트해야 합니다(예를 들어vault Consor 백엔드의Consor ACL 영패)를 처리하기 전에 존중을 받을 수 있습니다


    Known Issues


    춘운v2020.0.2 알려진 문제 (java.lang.NoSuchMethodErrorVault core dependency resolution causing java.lang.NoSuchMethodError를 참조하십시오.이것은 후속 버전에서 수정될 것입니다. 그러나 이와 동시에springvault 핵심 버전을 대체하는 해결 방안을 실행할 수 있습니다. 예를 들어



    <dependency>
     <groupId>org.springframework.vault</groupId>
     <artifactId>spring-vault-core</artifactId>
     <version>2.3.2</version>
    </dependency>
    

    AWS STS의 임시 증명서를 사용하여 안전한 클라우드 응용 프로그램을 구축하는 데 도움을 줄 수 있는 이 글을 좋아하길 바랍니다


    감사합니다, 안전에 주의하세요


    감사Attila Vágó,Darragh GraceFrancislâiny Campos의 피드백



    좋은 웹페이지 즐겨찾기