AWS IAM Roles Anywhere 및 Private CA를 사용한 Salesforce와 AWS 통합

발행: (2026년 1월 20일 오전 05:07 GMT+9)
7 min read
원문: Dev.to

Source: Dev.to

개요

구성 요소목적
Salesforce Certificate & Key ManagementAWS에 업로드할 자체 서명 인증서를 생성합니다.
AWS Certificate Manager Private CA개인 루트 CA가 서명한 인증서를 발급합니다.
IAM Roles Anywhere개인 CA를 신뢰하도록 설정하고, 신뢰 앵커, 프로파일, 그리고 Salesforce가 사용할 수 있는 역할을 생성합니다.
Salesforce External Credential & Named Credential위에서 만든 역할을 사용하여 AWS Signature V4 인증을 구성합니다.

단계별 지침

1️⃣ Salesforce에서 자체 서명 인증서 만들기

  1. Setup에서 Certificate & Key Management를 검색합니다.
  2. Create Self‑Signed Certificate를 클릭합니다.
  3. Label과 고유한 Name을 입력한 뒤 Save합니다.
  4. 생성된 인증서를 cert.pem 파일로 Download하고 안전하게 보관합니다.

2️⃣ AWS ACM‑PCA에서 개인 루트 CA 설정하기

  1. AWS Certificate Manager (ACM) Private CA 콘솔을 엽니다.
  2. Create CAMode: General‑PurposeCA Type: Root를 선택합니다.
  3. 필수 정보를 입력하고 키 알고리즘으로 RSA 2048을 선택합니다.
  4. 설정을 검토한 뒤 Create CA를 클릭합니다.

생성 후Actions 아래에서 Install CA certificate를 선택해 CA를 활성화합니다.
CA 상태가 Pending CertificateActive로 변경되는지 확인합니다.

3️⃣ 개인 루트 CA로 서명된 인증서 발급하기

# 인증서 발급 (플레이스홀더 교체)
aws acm-pca issue-certificate \
    --certificate-authority-arn "" \
    --csr fileb://crt.pem \
    --signing-algorithm "SHA256WITHRSA" \
    --validity Value=365,Type="DAYS" \
    --region "us-east-1"
  1. 명령 출력에서 CertificateArn을 복사합니다.
  2. 서명된 인증서를 가져옵니다:
aws acm-pca get-certificate \
    --certificate-authority-arn "" \
    --certificate-arn ""
  1. 반환된 PEM 내용을 cert.crt 파일에 저장합니다.
    • 헤더/푸터를 제외한 각 줄은 정확히 64자가 되도록 합니다.
    • -----BEGIN CERTIFICATE----------END CERTIFICATE----- 라인을 포함합니다.

4️⃣ 서명된 인증서를 Salesforce에 업로드하기

  1. Setup → Certificate & Key Management에서 Upload Certificate를 클릭합니다.
  2. 이전 단계에서 만든 cert.crt 파일을 선택하고 Save합니다.

5️⃣ IAM Roles Anywhere에서 트러스트 앵커 만들기

  1. AWS 콘솔에서 IAM Roles Anywhere를 엽니다.
  2. Create Trust Anchor를 클릭합니다.
  3. 이름을 입력하고 2단계에서 만든 Private CA를 선택한 뒤 Create Trust Anchor를 클릭합니다.

6️⃣ 트러스트 정책을 포함한 IAM 역할 만들기

트러스트 정책 (JSON)

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "rolesanywhere.amazonaws.com"
      },
      "Action": [
        "sts:AssumeRole",
        "sts:TagSession",
        "sts:SetSourceIdentity"
      ]
    }
  ]
}
  1. IAM 콘솔에서 새 역할을 만들고 위 트러스트 정책을 붙여넣습니다.
  2. AmazonConnect_FullAccess 정책(또는 필요한 권한을 가진 사용자 정의 정책)을 연결합니다.

7️⃣ IAM Roles Anywhere에서 프로파일 만들기

  1. IAM Roles Anywhere에서 Create Profile을 클릭합니다.
  2. 프로파일 이름을 입력하고 6단계에서 만든 역할을 연결한 뒤 Create Profile를 클릭합니다.

8️⃣ Salesforce 외부 자격 증명 구성하기

  1. Setup → Named Credentials → External Credentials → New
필드
LabelAWS IAM Anywhere Credential
NameAWS_IAM_Anywhere_Credential
Authentication ProtocolAWS Signature V4
Servicests (나중에 connect 로 변경)
Regionus-east-1
AWS Account ID(선택 사항)
Obtain Temporary IAM Credentials via STSRoles Anywhere
Trust Anchor ARN5단계에서 얻은 ARN
Profile ARN7단계에서 얻은 ARN
Signing Certificate4단계에서 업로드한 인증서와 동일한 파일
STS Duration (seconds)3600
  1. 외부 자격 증명을 위한 새 프린시플 생성
필드
Nameconnect_principal (예시)
ARN6단계에서 만든 IAM 역할의 ARN
Character set[a-zA-Z0-9_+=,.@-]*
  1. 외부 자격 증명을 Save합니다.

9️⃣ Named Credential 만들기

  1. Setup → Named Credentials → New Named Credential
필드
LabelConnect API Connection
NameConnect_A (계속 이어지는 이름을 입력하세요)
URLhttps://connect.amazonaws.com (예시)
Identity TypeNamed Principal
Authentication ProtocolAWS Signature V4
External Credential8단계에서 만든 외부 자격 증명 선택
Generate Authorization HeaderTrue
Allow Merge Fields in HTTP HeaderTrue
Allow Merge Fields in HTTP BodyTrue
  1. 모든 설정을 완료한 뒤 Save합니다.

Source:

항목
Named CredentialConnect_API_Connection
URLhttps://sts.us-east-1.amazonaws.com (추후 업데이트 예정)
External Credential위에서 만든 외부 자격 증명 선택
Generate Authorization Header체크됨

🔟 프린시플에 권한 부여

  1. Setup → Permission SetsNew.
  2. 라벨을 입력 (예: AWS_RolesAnywhere_Access).
  3. 권한 세트에서 External Credential Principal Access 로 이동한 뒤 connect_principalEnabled 열로 이동.
  4. 해당 권한 세트를 적절한 Salesforce 사용자에게 할당.

1️⃣1️⃣ 통합 테스트 (STS 호출)

Developer Console → Execute Anonymous 를 열고 다음 코드를 실행:

HttpRequest req = new HttpRequest();
req.setEndpoint('callout:Connect_API_Connection/?Action=GetCallerIdentity&Version=2011-06-15');
req.setMethod('GET');

Http http = new Http();
HTTPResponse res = http.send(req);
System.debug(res.getBody());

디버그 로그 확인: 200 상태 코드는 STS GetCallerIdentity 호출이 성공했음을 의미합니다.

1️⃣2️⃣ Named Credential을 Amazon Connect로 전환

  1. Named Credential (Connect_API_Connection)을 편집.
  2. Servicestsconnect 로 변경.
  3. URLhttps://connect.us-east-1.amazonaws.com 로 업데이트.

Connect 호출 테스트

HttpRequest req = new HttpRequest();
req.setEndpoint('callout:Connect_API_Connection/?Action=ListInstances&Version=2017-08-08');
req.setMethod('GET');

Http http = new Http();
HTTPResponse res = http.send(req);
System.debug(res.getBody());

성공적인 응답이 반환되면 Salesforce가 IAM Roles Anywhere를 사용해 Amazon Connect를 호출할 수 있게 된 것입니다.

🎉 All Done!

You now have a certificate‑based, key‑less integration between Salesforce and AWS, leveraging IAM Roles Anywhere and a private CA for secure, temporary credential issuance.

참고 자료

// APN_API_Connection is the name of the named credential 
HttpRequest req = new HttpRequest();
req.setEndpoint('callout:Connect_API_Connection/?Action=GetCallerIdentity&Version=2011-06-15');
req.setMethod('GET');

Http http = new Http();
HttpResponse res = http.send(req);
System.debug(res.getBody());

Note: 로그 파일을 열어 상태를 확인하십시오.
성공하면 로그에 200 상태 코드와 반환된 속성들이 표시되어 AWS에서 Amazon Connect API 호출이 성공했음을 나타냅니다.

Amazon Connect와 마찬가지로 HTTP 호출을 지원하는 모든 서비스에 대해 이 방식을 구성할 수 있습니다.

Back to Blog

관련 글

더 보기 »

내 포트폴리오가 변신했어요

이것은 Google AI가 주관하는 New Year, New You Portfolio Challenge에 제출한 작품입니다 https://dev.to/challenges/new-year-new-you-google-ai-2025-12-31. About...