AWS 인증 커넥터로 안전하게 연결 | Mendix

메인 컨텐츠로 가기

AWS 인증 커넥터로 안전하게 연결

Mendix AWS 인증 커넥터를 출시하여 개발자가 AWS에 대해 인증을 받고 다양한 서비스를 사용할 수 있게 되었습니다.

보안은 물론 필수적입니다. 특히 AWS와 같은 종량제 서비스를 사용할 때 더욱 그렇습니다. 따라서 AWS 서비스와 통합할 때 모범 사례를 따르는 것이 중요합니다. 이를 위해 AWS 인증 커넥터에는 다양한 인증 수단이 있습니다. 가장 안전한 방법은 세션 자격 증명을 사용하는 것입니다. 이를 통해 앱은 정의된 기간(일반적으로 약 1시간) 동안 IAM 사용자 역할을 채택할 수 있습니다. 최근 출시된 IAM Roles Anywhere 기능.

콘텐츠가 포함된 이미지: AWS 서비스와 안전하게 통합하기 위한 모범 사례. 세션 기반 자격 증명. Amazon DynamoDB 커넥터는 GetSessionCredentials 작업을 사용하여 AWS 인증 커넥터에서 Credentials 객체를 요청합니다. AWS 인증 커넥터는 Roles Anywhere를 통해 AWS STS를 사용하여 임시 세션 토큰을 요청합니다. 반환된 임시 토큰은 DynamoDB 커넥터를 사용하여 DynamoDB에 대한 요청에 서명하는 데 사용됩니다. 세션에 올바른 역할과 구성이 있으면 작업이 허용되고, 그렇지 않으면 AccessDenied 예외가 throw됩니다.

인증

이 인증 방법은 인증서를 사용하여 AWS에서 애플리케이션을 인증합니다. 이를 사용하려면 클라이언트 인증서를 얻어야 합니다. 자체 인증 기관(CA)에 액세스할 수 없다면 이는 쉬운 일이 아닙니다.

자체 서명 인증서를 만들려면 암호화 목적을 위한 오픈 소스 명령줄 도구인 openSSL을 사용하려고 합니다. 여기에 openssl을 설치하세요또는 당신은 할 수 Git 설치와 함께 제공되는 openssl을 활용하세요.

인증서를 생성하는 다른 방법도 있습니다. 다음을 사용할 수 있습니다. AWS 개인 인증 기관 서비스 또는 공개 인증서 서비스. 우리는 openssl을 두 가지 이유로 사용합니다.

  1. 비용 – 이것은 무료 명령줄 도구이며 비용 부담이 없고 개발 및 테스트에 적합합니다.
  2. 보안 – 공개 CA를 신뢰 앵커로 사용하면 해당 CA에서 생성된 모든 인증서가 신뢰되는 반면 정책 제약 조건으로 제한할 수 있습니다. 이것은 권장되지 않습니다.

트렌치코트를 입은 남자가 "아, 하나 더"라고 말하는 밈

이러한 명령은 Windows 및 Linux에서 테스트되었습니다(Mac 사용자 여러분, 죄송합니다. 저는 둘이 동일하다고 믿습니다). Windows를 사용하고 실행하려는 경우 Mendix 클라우드의 경우 openSSL 버전 3.X가 설치되어 있는지 확인하세요.

면책 조항: 자체 서명된 인증서를 만들려면 세부 사항에 세심한 주의가 필요하며 귀하의 사용 사례에 적합하지 않을 수 있습니다. 관련 위험을 이해했는지 확인하세요 귀하의 CA와 키는 항상 안전하게 비밀로 유지됩니다.

자체 서명 인증서

루트 생성

가장 먼저 해야 할 일은 CA와 신뢰 앵커 역할을 할 루트 인증서를 만드는 것입니다. 이것은 모든 추가 인증서에 서명하는 데 사용되며 다음과 같은 요구 사항이 있습니다.

  • PEM 형식이어야 합니다.
  • 버전 3이어야 합니다
  • 기본 제약 조건에는 CA: TRUE가 포함되어야 합니다.

이렇게 하려면 openssl.cnf 파일을 업데이트해야 합니다. 이것은 openssl의 구성 파일이며 openssl을 bin 폴더에 설치한 위치에 있습니다. v3_ca 섹션을 찾아 아래와 같이 업데이트하세요.

[ v3_ca ]
    basicConstraints        =critical, CA:TRUE
    subjectKeyIdentifier    =hash
    authorityKeyIdentifier  =keyid:always, issuer:always
    keyUsage                =critical, cRLSign, digitalSignature, keyCertSign

그 후, 개인 키를 생성하고 CA PEM 파일을 만들어야 합니다. RSA 또는 EC 알고리즘을 사용하여 키를 생성합니다..

openssl genrsa -out PrivateCA.key 4096
    openssl req -new -x509 -days 3650 -key PrivateCA.key -out PrivateCA.pem -extensions v3_ca

여기에 인증서에 대한 식별 정보를 제공할 수 있습니다.

openssl x509 -in PrivateCA.pem -text -noout

실제로 v3 인증서를 생성했는지 확인하는 것도 좋습니다.

V3 인증서 검증을 위한 c-path를 보여주는 이미지

클라이언트 인증서

이제 CA가 있으므로 AWS에서 자격 증명을 얻는 데 사용할 클라이언트 인증서를 생성할 수 있습니다. AWS는 사용하는 클라이언트 인증서에 대해 다음과 같은 요구 사항을 가지고 있습니다.

  • 버전 3(X.509v3)이어야 합니다.
  • 기본 제약 조건에는 CA: FALSE가 포함되어야 합니다.
  • 주요 사용에는 디지털 서명이 포함되어야 합니다.
  • 서명 알고리즘에는 SHA256 이상이 포함되어야 합니다.

이러한 요구 사항을 충족하려면 먼저 인증서를 생성할 때 호출할 확장 파일을 만들어야 합니다. 루트 인증서와 같은 디렉토리에 다음 내용이 있는 v3.ext라는 파일을 넣습니다.

authorityKeyIdentifier=keyid,issuer
    basicConstraints=CA:FALSE
    keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment

이제 인증서에 대해 먼저 키를 생성합니다.

openssl genrsa -out client.key 4096

그런 다음 새로운 인증서를 만듭니다.

openssl req -new -key client.key -out client.csr

마지막으로 루트 CA로 서명합니다.

openssl x509 -req -in client.csr -CA PrivateCA.pem -CAkey PrivateCA.key -set_serial 01 -out client.pem -days 3650 -sha256 -extfile v3.ext

이 작업이 완료되면 인증서 폴더에 다음 파일이 있어야 합니다.

인증서 폴더에 v3.ext를 보여주는 이미지

우리의 인증서를 사용하기 위해서는 한 단계 더 필요합니다. Mendix 응용 프로그램: 클라이언트 인증서를 내보내야 합니다. 우리 앱에 업로드할 수 있는 pfx 형식.

openssl pkcs12 -export -in client.pem -inkey client.key -certpbe PBE-SHA1-3DES -keypbe PBE-SHA1-3DES -macalg sha1 -out client.pfx

나중에 사용할 비밀번호를 지정해야 합니다.

이제 이러한 인증서를 사용하여 연결할 수 있습니다. Mendix AWS 서비스에 대한 응용 프로그램입니다.

AWS

다음 단계는 루트 인증서를 IAM Roles Anywhere에 전달하고 사용하려는 IAM 역할에 연결하는 것입니다.

AWS 콘솔을 열고 IAM Roles Anywhere를 검색합니다.

IAM Roles Anywhere를 특징으로 하는 AWS 콘솔 이미지

루트 CA에 연결된 Trust Anchor를 만드는 것으로 시작하겠습니다. Trust Anchor에 이름을 지정하고 PrivateCA.pem의 콘텐츠를 붙여넣기 전에 External certificate bundle에서 External certificate bundle을 선택합니다.

신뢰 앵커 편집 창을 보여주는 이미지

Trust Anchor가 사용하려는 서비스와 동일한 지역에 있는지 확인하세요.

Trust Anchor가 있으면 가정할 IAM 역할이 필요합니다. 새 IAM 역할을 만들고 사용자 지정 Trust Policy를 추가합니다.

  {
      "Version":"2012-10-17",
      "Statement":[
        {
          "Effect":"Allow",
          "Principal":{
          "Service":"rolesanywhere.amazonaws.com"
        },
        "Action":[
            "sts:AssumeRole",
            "sts:SetSourceIdentity",
            "sts:TagSession"
          ]
        }
      ]
    }

그런 다음 IAM 정책을 추가해야 합니다. 역할에 필요한 최소한의 권한을 부여하는 것이 좋습니다. 여기서는 mendixdemo.com S3 버킷과 상호 작용할 수 있는 권한을 부여합니다.


     {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "s3:PutObject"
                ],
                "Resource": "arn:aws:s3:::mendixdemo.com/*"
            }
        ]
    }

다음으로 이 역할을 맡을 프로필이 필요하므로 IAM Roles Anywhere를 다시 검색하여 방금 만든 역할을 할당하는 프로필을 만듭니다.

IAM Roles Anywhere 역할을 맡을 프로필 생성을 보여주는 이미지

Mendix 지방의

이 시점에서 우리는 인증서와 AWS 역할을 사용하여 통합할 수 있습니다. Mendix 앱. 로컬 개발부터 시작하겠습니다. 시연을 위해 간단한 데모 프로젝트를 설정하고 마켓플레이스에서 AWS 인증 커넥터와 S3 커넥터를 다운로드했습니다.

AWS 커넥터를 구성하는 것으로 시작해 보겠습니다. 우리가 만든 항목의 ARN만 있으면 됩니다.

AWS 커넥터 구성을 보여주는 이미지

다음으로, 정책에서 정의한 S3 버킷에 업로드할 수 있도록 S3 커넥터를 추가하겠습니다.

S3 커넥터 추가를 보여주는 이미지

잠깐만요... 뭔가 잊은 게 있나요? 사용하지 않을 거라면 인증서 생성의 요점은 뭐였을까요? 앱에 인증서를 찾을 위치를 알려줘야 해요! 클라이언트 인증서 ID를 '1'로 설정해서 시작했어요. 이제 런타임 설정을 업데이트해야 해요 앱->설정->구성을 추가하고 두 개의 사용자 정의 런타임 구성:

  • ClientCertificatePasswords – pfx를 생성할 때 추가한 비밀번호입니다.
  • ClientCertificates – 로컬 컴퓨터에서 인증서의 위치입니다.

고객 런타임 구성 추가를 보여주는 이미지

지금 테스트해보면 S3 버킷에 업로드할 수 있는 걸 볼 수 있어요!

Mendix Cloud

로컬에서 할 수 있어서 좋지만, 이제 라이선스가 있는 환경이 필요한 클라우드에 배포할 수 있어야 합니다. 이 지침에서는 "Mendix 클라우드”이지만 원칙은 “Mendix 프라이빗 클라우드를 위해”.

첫 번째 변경 사항은 애플리케이션 상수 AWSAuthentication.ClientCertificateID를 인증서 ID 값으로 설정하는 구성 업데이트입니다. 인증서 ID는 환경에서 설정할 수 있습니다. 인증서가 여러 개일 경우 고유한 값을 사용해야 하므로 의미 있는 값을 생각해 보세요. 예를 들어 "AWS_Auth"와 같은 값을 사용할 수 있습니다.

그런 다음 클라이언트 인증서를 설정해야 합니다. Mendix 환경. 환경을 열고 네트워크로 이동하여 클라이언트 인증서를 추가합니다. client.pfx 파일을 업로드하고 파일을 만드는 데 사용한 비밀번호를 제공합니다.

그런 다음 인증서를 선택하고 작업 아래의 세 점에서 편집을 클릭합니다.

편집 화면에서 상수 AWSAuthentication.ClientCertificateID에 대해 구성한 값을 사용하여 새 'Pin' ID를 만듭니다. 예를 들어 "AWS_Auth"입니다.

그런 다음 응용 프로그램을 다시 시작하여 작동시켜 보세요.

 

결론

AWS 인증을 사용하여 AWS의 최신 IAM 솔루션을 활용하여 연결할 수 있는 방법을 살펴보았습니다. Mendix 가능한 가장 안전한 방법으로 AWS 리소스에 애플리케이션을 연결합니다.

이 프로세스를 더 간단하게 만들기 위해 자체 서명된 인증서를 생성하기 위해 두 개의 배치 파일을 만들었습니다. Windows 그리고 리눅스/맥.

인증 커넥터에 대해 자세히 알아보려면 다음 문서를 확인하세요. https://docs.mendix.com/appstore/connectors/aws/aws-authentication/

더 자세히 알아보려면 Mendix 그리고 AWS:

https://www.mendix.com/aws/

언어를 선택하세요