통합 구축
요청 수명 주기 이해
통합을 구축하기 전에, 생성부터 완료까지 위임 요청이 어떻게 진행되는지 이해하는 것이 중요합니다.
요청 상태
위임 요청은 다음 상태로 진행됩니다.
| State | 설명 |
|---|---|
| 할당되지 않음 | 요청이 생성되었지만 아직 고객 계정 및 IAM 위탁자와 연결되지 않았습니다. 요청이 대상 계정을 지정하지 않거나 대상 계정 ID로 생성되었지만 계정 소유자가 아직 요청하지 않았을 수 있습니다. |
| 할당됨 | 요청이 고객 계정과 연결되고 검토 대기 중입니다. |
| 승인 보류 중 | 고객이 승인을 위해 관리자에게 요청을 전달했습니다. |
| 수락됨 | 고객이 요청을 승인했지만 교환 토큰이 아직 릴리스되지 않았습니다. |
| 완료됨 | 교환 토큰이 제품 제공업체에 릴리스되었습니다. 위임 기간(교환 토큰 유효성)은 요청이 완료 상태에 도달하면 시작됩니다. |
| 거부됨 | 고객이 요청을 거부함 |
| 만료됨 | 비활성 또는 제한 시간으로 인해 요청이 만료되었습니다. |
상태 전환
정상 흐름(승인 경로)
할당되지 않음 → 할당됨: 고객이 요청을 자신의 계정과 연결
할당됨 → 수락됨 또는 할당됨 → 승인 대기 중: 고객이 요청을 직접 승인하거나 검토를 위해 관리자에게 전달
승인 보류 중 → 수락됨: 관리자가 요청을 승인
수락됨 → 완료됨: 고객이 교환 토큰을 릴리스
거부 경로
할당됨 → 거부됨: 고객이 요청을 거부
승인 보류 중 → 거부됨: 관리자가 요청을 거부
수락됨 → 거부됨: 고객이 토큰을 릴리스하기 전에 승인을 취소
만료 경로
지정된 기간 내에 조치를 취하지 않으면 요청이 자동으로 만료됩니다.
할당되지 않음 → 만료됨(1일)
할당됨 → 만료됨(7일)
승인 대기 중 → 만료됨(7일)
수락됨 → 만료됨(7일)
거부됨 → 만료됨(7일)
완료됨 → 만료됨(7일)
터미널 상태
다음은 최종 상태입니다(추가 전환 없음).
완료됨: 교환 토큰 전송됨
거부됨: 요청이 거부됨
만료됨: 요청 시간 초과 또는 위임 기간 종료
만료된 요청은 보존 기간 이후에 시스템에서 최종 삭제됩니다.
애플리케이션에서 위임 요청 상태 관리
파트너는 시스템에서 위임 요청 상태를 추적하고 고객에게 표시해야 합니다. 상태 변경에 대한 SNS 알림을 받으면 이러한 업데이트를 백엔드에 저장하고 고객용 UI에 반영합니다. 대기 중 승인 상태에 특히 주의하세요. 고객이 검토를 위해 관리자에게 요청을 전달하면 AWS가 대기 중 승인 알림을 보냅니다. 요청은 관리자 작업을 기다리는 동안 최대 7일 동안이 상태를 유지할 수 있습니다. 이 시간 동안 고객의 요청이 애플리케이션에서 관리자 승인 대기 중임을 고객에게 보여줍니다. 고객이 요청 상태를 확인하거나 관리자에게 후속 조치를 취할 수 있는 AWS Console에 대한 딥 링크를 제공하는 것이 좋습니다. 백엔드에서 상태 시스템을 올바르게 처리하고 각 단계에서 고객에게 올바른 상태 정보를 표시하는 것이 우수한 통합 경험을 위해 중요합니다.
알림 구성
IAM은 Amazon Simple Notification Service(SNS)를 사용하여 위임 요청 상태 변경 사항을 사용자에게 전달합니다. 위임 요청을 생성할 때 등록된 AWS 계정의 SNS 주제 ARN을 제공해야 합니다. IAM은 고객이 요청을 승인 또는 거부할 때와 교환 토큰이 준비될 때를 포함하여 중요한 이벤트에 대한 메시지를 이 주제에 게시합니다.
참고
SNS 주제는 옵트인 AWS 리전에 있을 수 없습니다. SNS 주제는 기본적으로 활성화된 AWS 리전에 있어야 합니다. 옵트인 리전 목록은 AWS 계정 관리 가이드의 AWS 리전 관리를 참조하세요.
SNS 주제 구성
위임 요청 알림을 받으려면 메시지를 게시할 수 있는 IAM 권한을 부여하도록 SNS 주제를 구성해야 합니다. SNS 주제 정책에 다음 정책 문을 추가합니다.
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowIAMServiceToPublish", "Effect": "Allow", "Principal": { "Service": "iam.amazonaws.com" }, "Action": "SNS:Publish", "Resource": "arn:aws:sns:REGION:ACCOUNT-ID:TOPIC-NAME" } ] }
중요
SNS 주제는 등록된 AWS 계정 중 하나에 있어야 합니다. IAM은 다른 계정의 SNS 주제를 수락하지 않습니다. 주제 정책이 올바르게 구성되지 않은 경우 상태 변경 알림 또는 교환 토큰이 수신되지 않습니다.
알림 유형
IAM은 두 가지 유형의 알림을 보냅니다.
StateChange 알림
위임 요청이 새 상태(할당됨, 승인 보류 중, 수락됨, 완료됨, 거부됨, 만료됨)로 전환될 때 전송됩니다.
ExchangeToken 알림
고객이 위임 토큰을 릴리스하면 전송됩니다(완료됨 상태). 이 알림에는 자격 증명을 얻는 데 필요한 교환 토큰이 포함되어 있습니다.
알림 상태
다음 위임 요청 상태에 대한 알림을 받게 됩니다.
| State | 알림 유형 | 설명 |
|---|---|---|
| 할당됨 | StateChange | 요청이 고객 계정과 연결되었습니다. |
| 승인 보류 중 | StateChange | 고객이 승인을 위해 관리자에게 요청을 전달했습니다. |
| 수락됨 | StateChange | 고객이 요청을 승인했지만 아직 토큰을 릴리스하지 않았습니다. |
| 완료됨 | StateChange | 고객이 교환 토큰을 릴리스했습니다. |
| 완료됨 | ExchangeToken | 이 알림에는 Exchange 토큰이 포함되어 있습니다. |
| REJECTED | StateChange | 고객이 요청을 거부함 |
| EXPIRED | StateChange | 완료 전에 요청이 만료됨 |
알림 메시지 형식
IAM은 표준 SNS 알림을 게시합니다. 위임 요청 정보는 메시지 필드에 JSON 문자열로 포함됩니다.
공통 필드(모든 알림)
| Field | Type | 설명 |
|---|---|---|
| Type | 문자열 | ‘StateChange’ 또는 ‘ExchangeToken’ |
| RequestId | 문자열 | IAM 위임 요청 ID |
| RequestorWorkflowId | 문자열 | 요청을 생성할 때 제공한 워크플로 ID |
| State | 문자열 | 요청의 현재 상태 |
| OwnerAccountId | 문자열 | 고객의 AWS 계정 ID |
| UpdatedAt | 문자열 | 상태 변경 시점의 타임스탬프(ISO 8601 형식) |
추가 필드(ExchangeToken 알림만 해당)
| Field | Type | 설명 |
|---|---|---|
| ExchangeToken | 문자열 | AWS STS GetDelegatedAccessToken API를 사용하여 자격 증명과 교환할 토큰 |
| ExpiresAt | 문자열 | 위임된 액세스가 만료되는 경우(ISO 8601 형식) |
알림 예제
StateChange 알림
{ "Type": "Notification", "MessageId": "61ee8ad4-6eec-56b5-8f3d-eba57556aa13", "TopicArn": "arn:aws:sns:us-east-1:123456789012:partner-notifications", "Message": "{\"RequestorWorkflowId\":\"workflow-12345\",\"Type\":\"StateChange\",\"RequestId\":\"dr-abc123\",\"State\":\"ACCEPTED\",\"OwnerAccountId\":\"111122223333\",\"UpdatedAt\":\"2025-01-15T10:30:00.123Z\"}", "Timestamp": "2025-01-15T10:30:00.456Z", "SignatureVersion": "1", "Signature": "...", "SigningCertURL": "...", "UnsubscribeURL": "..." }
ExchangeToken 알림
{ "Type": "Notification", "MessageId": "e44e5435-c72c-5333-aba3-354406782f5b", "TopicArn": "arn:aws:sns:us-east-1:123456789012:partner-notifications", "Message": "{\"RequestId\":\"dr-abc123\",\"RequestorWorkflowId\":\"workflow-12345\",\"State\":\"FINALIZED\",\"OwnerAccountId\":\"111122223333\",\"ExchangeToken\":\"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...\",\"ExpiresAt\":\"2025-01-15T18:30:00.123Z\",\"UpdatedAt\":\"2025-01-15T10:30:00.456Z\",\"Type\":\"ExchangeToken\"}", "Timestamp": "2025-01-15T10:30:00.789Z", "SignatureVersion": "1", "Signature": "...", "SigningCertURL": "...", "UnsubscribeURL": "..." }
교환 토큰
고객이 위임 요청을 수락하고 완료하면 IAM에서 교환 토큰 또는 거래 토큰이 발급됩니다. 제품 제공업체는 이 교환 또는 거래 토큰을 사용하여 AWS AWS STS GetDelegatedAccessToken API를 직접 호출함으로써 고객이 승인한 권한으로 임시 AWS 자격 증명을 얻습니다. 교환 토큰 자체는 AWS 리소스에 대한 액세스 권한을 부여하지 않으므로 AWS STS를 통해 실제 자격 증명으로 교환해야 합니다.
교환 토큰은 위임 요청을 생성한 제품 제공업체 계정에서만 사용할 수 있습니다. 요청 계정은 토큰에 포함되어 있으므로 승인된 제품 제공업체만 고객 계정에 액세스할 수 있는 자격 증명을 얻을 수 있습니다.
액세스 기간
위임 기간은 고객이 교환 토큰을 릴리스할 때 시작되며 제품 제공업체가 교환 토큰을 사용할 때가 아닙니다. 고객이 토큰을 릴리스하면:
제품 제공업체가 SNS 알림을 통해 토큰을 수신합니다.
자격 증명으로 즉시 교환할 수 있습니다.
자격 증명 만료 시점: 릴리스 시간 + 승인 기간
제품 제공업체는 만료 전에 토큰을 여러 번 교환하여 필요한 경우 새 자격 증명을 얻을 수 있습니다.
다중 재시도
제품 제공업체는 유효 기간 동안 토큰을 여러 번 교환하여 새 자격 증명을 얻을 수 있습니다. 하지만 동일한 교환 토큰에서 얻은 모든 자격 증명은 토큰을 릴리스한 시기에 따라 동시에 만료됩니다.
예: 2시간 위임 요청을 승인하고 오전 10시에 토큰을 릴리스하는 경우:
| 토큰 릴리스 시간 | 토큰 교환 시간 | 자격 증명 만료 | 사용 가능한 시간 |
|---|---|---|---|
| 오전 10시 00분 | 오전 10시 00분 | 오후 12시 | 2시간 |
| 오전 10시 00분 | 오전 10시 20분 | 오후 12시 | 1시간 40분 |
| 오전 10시 00분 | 오전 11시 40분 | 오후 12시 | 20분 |
| 오전 10시 00분 | 오후 12:10 | 실패(토큰 만료됨) | 0분 |
표에 나와 있듯이 유효 기간 후반에 토큰을 교환하면 제품 제공업체의 사용 시간이 줄어듭니다.