클라우드 신원으로 외부 리소스에 인증하기
클라우드 신원(Cloud identity)은 정적 인증 정보를 소스에 저장하는 대신 클라우드 제공자의 리소스에 인증할 때 사용하는 신원입니다. Control Panel에서 플랫폼 인스턴스 수준으로 관리하고, Data Connection의 개별 소스를 만들 때 가져와 사용합니다.
클라우드 신원 인증은 AWS, Microsoft Azure와 Google Cloud Platform의 리소스 접근에 사용할 수 있습니다. 이때 Foundry가 생성한 신원에 대상 클라우드 리소스의 접근 권한을 부여해야 합니다. 해당 연결이 지원한다면 정적 인증 정보보다 클라우드 신원 방식이 권장됩니다.
사용 조건
Control Panel의 Cloud identities 페이지는 다음 조건을 모두 충족할 때 표시됩니다.
- Foundry 플랫폼 인스턴스가 AWS에 호스팅되어 있습니다.
- 플랫폼 인스턴스가 Palantir의 Kubernetes 기반 인프라인 Rubix에서 실행됩니다.
AWS 클라우드 신원
AWS 리소스에 접근할 때 클라우드 신원은 Foundry가 호스팅된 AWS 계정에서 생성한 IAM 역할을 나타냅니다.
2024년 4월 기준으로 Control Panel에서 생성할 수 있는 한도는 플랫폼 인스턴스당 15개입니다. 더 많은 신원이 필요하면 지원 요청을 통해 해당 인스턴스에서 사용할 수 있는 방안을 확인합니다.
생성
- Control Panel의 Enrollment Settings → Cloud Identities로 이동합니다.
- Create Identity를 선택합니다.
- 생성된 클라우드 신원과 IAM 역할의 ARN을 확인합니다.
이 화면에는 Manage cloud identity configuration 작업 권한이 필요합니다. 기본적으로 Enrollment administrator와 Information security officer 역할에 부여됩니다.
생성한 클라우드 신원은 삭제할 수 없고 이름도 바꿀 수 없습니다. 여러 신원을 운용한다면 새 신원을 추가해야 하는 목적과 이름을 생성 전에 확인합니다.
ARN(Amazon Resource Name)은 AWS 리소스를 식별하는 이름입니다. 생성된 신원의 역할 ARN은 Copy to clipboard로 복사할 수 있습니다.
대상 AWS 계정의 역할과 정책
대상 AWS 계정에 별도의 데이터 접근용 IAM 역할을 만듭니다. 이 역할을 누가 맡을 수 있는지 정하는 신뢰 정책과, 역할에 허용할 작업을 정하는 권한 정책을 구성해야 합니다.
| 정책 | 결정하는 내용 |
|---|---|
| 신뢰 정책 | Foundry의 클라우드 신원 역할이 대상 계정의 역할을 맡을 수 있는지 |
| 권한 정책 | 대상 계정의 역할이 어떤 리소스에서 어떤 작업을 수행할 수 있는지 |
신뢰 정책
대상 AWS 계정의 IAM 역할에, Foundry에서 생성한 역할이 sts:AssumeRole을 수행할 수 있도록 신뢰 정책을 연결합니다.
다음은 Foundry 쪽의 가상 역할 ARN이 arn:aws:iam::111122223333:role/foundry-cloud-identity라고 가정한 예시입니다. 실제로는 Control Panel에서 복사한 전체 ARN으로 바꿉니다.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::111122223333:role/foundry-cloud-identity"
},
"Action": "sts:AssumeRole"
}
]
}
이 정책은 누가 대상 역할을 맡을 수 있는지 정합니다. 버킷에서 데이터를 읽는 권한은 별도의 권한 정책으로 부여합니다.
S3 접근 권한
가상의 example-foundry-source-data 버킷에서 파일 목록을 보고 객체를 읽는 경우에는 다음처럼 작업과 리소스 범위를 나눌 수 있습니다.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": ["s3:ListBucket"],
"Resource": ["arn:aws:s3:::example-foundry-source-data"]
},
{
"Effect": "Allow",
"Action": ["s3:GetObject"],
"Resource": ["arn:aws:s3:::example-foundry-source-data/*"]
}
]
}
ListBucket은 버킷 탐색에 사용하고 GetObject는 배치 동기화, 가상 테이블과 미디어 동기화에서 객체를 읽는 데 필요합니다.
쓰기나 삭제까지 수행하는 워크플로라면 대상 객체 ARN에 필요한 작업을 추가합니다.
| 작업 | S3 권한 |
|---|---|
| 객체 기록 | s3:PutObject |
| 객체 삭제 | s3:DeleteObject |
읽기만 필요한 계정에 쓰기와 삭제 권한을 함께 부여할 필요는 없습니다. 실제 수행할 작업에 맞추어 대상 IAM 역할의 권한 정책이나 버킷 정책을 구성합니다.
네트워크 접근 준비
Foundry의 Rubix IP가 대상 AWS 네트워크에 접근할 수 있도록 허용하고, 플랫폼 인스턴스에 필요한 외부 통신 정책을 추가해야 합니다.
인스턴스의 Rubix IP와 외부 통신 정책은 Control Panel의 Network egress에서 확인합니다.
같은 리전의 S3 버킷
S3 버킷이 Foundry와 같은 리전에 있으면 트래픽이 S3 연결용 Amazon VPCE를 거칠 수 있으므로 별도의 허용 구성이 필요합니다. 이 경우 Rubix IP만으로 접근을 허용하는 방식과 구분합니다.
기존 S3 bucket policies 방식에서는 Control Panel의 Network egress > S3 bucket policies에서 VPCE 식별자를 확인합니다. 새 Bucket endpoint 정책에서는 정책을 만든 뒤 상세 화면에서 출발 VPC endpoint를 확인합니다. S3 소스 구성에 따라 Data Connection에서도 표시될 수 있습니다. 두 정책 방식의 적용 조건은 S3 네트워크 구성을 따릅니다.
S3 소스에서 사용
클라우드 신원을 활성화한 뒤 Data Connection의 S3 소스 Connection details에서 인증 방식으로 Cloud identity를 선택합니다.
선택하면 클라우드 신원의 역할 ARN이 인증 정보 영역에 표시됩니다. 기본 신원이 미리 선택되며, 플랫폼 인스턴스에 여러 신원이 있으면 드롭다운으로 사용할 신원을 고를 수 있습니다.
이후 다음 연결을 완성합니다.
- 대상 AWS 계정에 데이터 접근용 IAM 역할을 준비합니다.
- 그 역할에 연결할 S3 버킷의 접근 권한을 부여합니다.
- S3 소스의 STS role 설정에 대상 계정의 IAM 역할을 지정합니다.
- 대상 역할의 신뢰 정책이 Foundry의 클라우드 신원 역할을 허용하는지 확인합니다.
Foundry 쪽 역할은 S3에 접근할 때 STS로 대상 계정의 역할을 맡아 사용합니다. 소스에 표시되는 클라우드 신원 역할 ARN과 STS role에 지정할 대상 역할 ARN을 서로 바꾸어 입력하지 않습니다.