AliCloud 인증 방식
AliCloud 인증 방식
alicloud 인증 방식은 AliCloud 엔티티에 대한 Vault 토큰을 검색하는 자동화 메커니즘을 제공해요. 대부분의 Vault 인증 방식과 달리, 이 방식은 운영자가 보안에 민감한 크레덴셜(토큰, 사용자 이름/비밀번호, 클라이언트 인증서 등)을 수동으로 먼저 배포하거나 프로비저닝할 필요가 없어요. AliCloud를 신뢰할 수 있는 제3자(Trusted Third Party)로 취급하고 개인 크레덴셜로 서명된 특수 AliCloud 요청을 사용해요. 요청을 구성하는 데 다양한 크레덴셜을 사용할 수 있지만, AliCloud는 이 목적에 이상적인 인스턴스 메타데이터를 제공해요. 역할로 인스턴스를 실행하면, 인스턴스 메타데이터 아래의 역할의 STS 크레덴셜을 사용해 요청을 안전하게 구성할 수 있어요.
출처: 문서
본문
인증 워크플로 (Authentication workflow)
AliCloud STS API에는 클라이언트의 신원을 검증할 수 있는 sts:GetCallerIdentity 메서드가 포함돼 있어요. 클라이언트는 AliCloud 서명 알고리즘을 사용해 GetCallerIdentity 쿼리에 서명해요. 그런 다음 유효한 서명된 요청을 재구성하기 위해 Vault 서버에 두 가지 정보(요청 URL과 요청 헤더)를 제출해요. Vault 서버는 쿼리를 재구성해 AliCloud STS 서비스로 전달하고 결과를 다시 검증해요.
중요한 것은 GetCallerIdentity 요청에 서명하는 데 사용되는 크레덴셜이 ECS 인스턴스의 ECS 인스턴스 메타데이터 서비스에서 올 수 있어, 운영자가 어떤 종류의 신원 자료를 먼저 수동으로 프로비저닝할 필요가 없게 해요. 그러나 원칙적으로 크레덴셜은 AliCloud가 제공한 위치뿐 아니라 어디서든 올 수 있어요.
각 서명된 AliCloud 요청은 재생 공격의 위험을 완화하기 위해 현재 타임스탬프와 nonce를 포함해요.
또한 AliCloud는 GetCallerIdentity 호출에 어떤 종류의 인가도 포함하지 않는다는 점을 기억하는 것이 중요해요. 예를 들어 크레덴셜에 모든 접근에 MFA 인증을 요구하는 RAM 정책이 있어도, MFA 인증되지 않은 크레덴셜은 여전히 이 방식을 사용해 Vault에 인증할 수 있어요. Vault에 인증하는 동안 RAM 프린시펄이 MFA 인증되도록 시행하는 것은 가능하지 않은 것처럼 보여요.
인가 워크플로 (Authorization workflow)
기본 작동 메커니즘은 역할(role)별이에요.
역할은 AliCloud에 미리 생성된 역할 ARN과 연결돼요. AliCloud 콘솔은 각 역할의 ARN을 표시해요. Vault의 역할은 AliCloud의 역할과 1:1 관계를 가지며, 같은 이름을 가져야 해요.
클라이언트가 그 역할을 맡아(assume) GetCallerIdentity 요청을 Vault로 보내면, Vault는 맡은 역할의 arn을 Vault에 미리 생성된 역할의 arn과 매칭해요. 그런 다음 역할에 연결된 정책을 확인하고 그에 따라 토큰을 부여해요.
인증 (Authentication)
CLI를 통해
Vault에서 AliCloud 인증을 활성화합니다.
$ vault auth enable alicloud
역할에 정책을 구성합니다.
$ vault write auth/alicloud/role/dev-role arn='acs:ram::5138828231865461:role/dev-role'
로그인 작업을 수행합니다.
$ vault write auth/alicloud/login \
role=dev-role \
identity_request_url=$IDENTITY_REQUEST_URL_BASE_64 \
identity_request_headers=$IDENTITY_REQUEST_HEADERS_BASE_64
RAM 인증 방식의 경우 서명된 요청 생성은 비표준 작업이에요. Vault CLI가 이를 대신 생성하는 것을 지원해요.
$ vault login -method=alicloud access_key=... secret_key=... security_token=... region=...
이는 다음 호출로 ECS 인스턴스에서 찾을 수 있는 AliCloud 크레덴셜이 있다고 가정해요.
curl 'http://100.100.100.200/latest/meta-data/ram/security-credentials/$ROLE_NAME'
위 $ROLE_NAME은 대소문자를 구분하며 인스턴스에 반영된 방식과 일치해야 한다는 점을 기억하세요.
login 메서드에 필요한 요청 값을 생성하는 예시는 Vault CLI 소스 코드에서 찾을 수 있어요.
API
AliCloud 인증 방식은 완전한 HTTP API를 제공해요. 자세한 내용은 AliCloud Auth API 문서를 참고해 주세요.
Terraform
Vault Terraform 프로바이더로 AliCloud 인증 리소스를 프로그래밍 방식으로 관리할 수 있어요. 자세한 내용은 Terraform Registry 문서를 참고하세요.
더 알아보기 (Learn more)
- AliCloud 인증 방식 전체 API는 AliCloud Auth API 문서를 참고하세요.
- AliCloud에서 역할 기반 STS 크레덴셜에 대한 자세한 내용은 AliCloud 문서를 참고하세요.