OCI 인증 방식
OCI 인증 방식
Vault용 OCI 인증 방식은 OCI Identity 크레덴셜을 사용한 인증과 인가를 가능하게 해요.
이 플러그인은 https://github.com/hashicorp/vault-plugin-auth-oci에서 별도의 GitHub 저장소로 개발되지만 Vault 릴리스에 자동으로 번들됩니다. OCI 플러그인 특정 기능 요청, 버그, 풀 리퀘스트는 그 저장소 아래에 제출해 주세요.
출처: 문서
본문
OCI 역할 (OCI roles)
OCI 인증 방식은 여기 보이는 것처럼 역할을 사용해 인가해요.
위에서 보이는 여러 항목 사이에는 다대다(many-to-many) 관계가 있어요.
- 사용자는 많은 신원 그룹에 속할 수 있어요.
- 신원 그룹은 많은 사용자를 포함할 수 있어요.
- 컴퓨트 인스턴스는 많은 동적 그룹에 속할 수 있어요.
- 동적 그룹은 많은 컴퓨트 인스턴스를 포함할 수 있어요.
- Vault에 정의된 역할은 많은 그룹과 동적 그룹에 매핑될 수 있어요.
- 단일 역할은 그룹과 동적 그룹 둘 다에 매핑될 수 있어요.
- Vault 정책은 다른 역할에서 매핑될 수 있어요.
역할의 ocid_list 필드는 Group 또는 Dynamic Group OCID 목록이에요. 이 Group 또는 Dynamic Group의 구성원만 이 역할을 취할 수 있어요.
구성 (Configuration)
Vault를 실행할 OCI tenancy 구성하기
OCI 인증 방식은 OCI Identity API를 호출할 인스턴스 프린시펄(instance principal) 크레덴셜을 요구하며, 따라서 Vault 서버는 OCI 컴퓨트 인스턴스 안에서 실행되어야 해요.
Vault 서버가 실행 중인 OCI 컴퓨트 인스턴스가 특정 OCI Identity API를 호출하도록 허용하는 정책을 tenancy에 추가하려면 아래 단계를 따르세요.
- tenancy에서 Vault 서버를 실행할 컴퓨트 인스턴스를 시작하세요. 컴퓨트 인스턴스를 시작하는 VCN에는 서비스 게이트웨이가 추가되어 있어야 해요.
- Vault를 실행하는 컴퓨트 인스턴스의 Oracle Cloud Identifier(OCID)를 기록해 두세요.
- tenancy에서 컴퓨터 인스턴스를 포함할 VaultDynamicGroup 이름의 동적 그룹을 생성하세요.
- 컴퓨트 인스턴스의 OCID를 동적 그룹에 추가하세요.
- tenancy의 루트 컴파트먼트에 동적 그룹이 특정 Identity API를 호출하도록 허용하는 다음 정책을 추가하세요.
allow dynamic-group VaultDynamicGroup to {AUTHENTICATION_INSPECT} in tenancy
allow dynamic-group VaultDynamicGroup to {GROUP_MEMBERSHIP_INSPECT} in tenancy
OCI 인증 방식 구성하기
먼저 OCI 인증 방식을 활성화하세요.
$ vault auth enable oci
그런 다음 Vault에 홈 tenancy를 구성해, 사용자 또는 인스턴스가 OCI 인증 방식을 통해 Vault에 로그인하는 것을 허용하세요.
- tenancy OCID로 아래 내용의
hometenancyid.json파일을 만드세요. tenancy OCID를 찾으려면 Oracle Cloud IDs 문서를 참고하세요.
{ "home_tenancy_id": "your tenancy ocid here" }
- Vault에서
home_tenancy_id파라미터를 구성하세요.
$ curl --header "X-Vault-Token: $roottoken" --request POST \
--data @hometenancyid.json \
http://127.0.0.1:8200/v1/auth/oci/config
계속해서 OCI 인증 방식에 Vault 관리자 역할을 만드세요. vaultadminrole은 Vault 관리자가 Vault에 로그인할 수 있게 하고 정책에 허용된 권한을 부여해요.
- 아래 내용의
vaultadminrole.json파일을 만드세요.ocid_list를 Vault 관리자 역할을 취하길 원하는 사용자 또는 인스턴스가 있는 tenancy의 Group 또는 Dynamic Group OCID로 교체하세요.- dev 모드 테스트에는 앞서 만든 동적 그룹의 OCID를 추가할 수 있어요.
- 프로덕션에서는 Vault에서 관리자 역할을 취할 수 있는 그룹과 동적 그룹의 OCID만 추가하세요.
{
"token_policies": "vaultadminpolicy",
"token_ttl": "1800",
"ocid_list": "ocid1.group.oc1..aaaaaaaaiqnblimpvmegkqh3bxilrdvjobr7qd223g275idcqhexamplefq,ocid1.dynamicgroup.oc1..aaaaaaaa5hmfyrdaxvmt52ekju5n7ffamn2pdvxaq6esb2vzzoduexamplea"
}
- Vault 관리자 역할을 만드세요.
$ curl --header "X-Vault-Token: $roottoken" --request POST \
--data @vaultadminrole.json \
http://127.0.0.1:8200/v1/auth/oci/role/vaultadminrole
OCI 인증으로 Vault에 로그인하기
아래 설명된 두 방법 모두의 결과로, 앞서 추가한 정책을 포함한 토큰이 있는 응답을 받게 돼요.
받은 토큰으로 시크릿을 읽거나 쓰고, /docs/secrets/kv/kv-v1의 지침에 따라 역할을 추가할 수 있어요.
두 방법 모두 작동하려면:
- 앞서 이 페이지에 표시된 것처럼 VAULT_ADDR export가 지정되어야 해요. Vault가 실행 중인 같은 컴퓨트 인스턴스에서 dev 모드로 테스트할 때는 http://127.0.0.1:8200입니다.
인스턴스 프린시펄로 로그인하기
$ vault login -method=oci auth_type=instance role=vaultadminrole
이것은 로그인하는 컴퓨트 인스턴스가 Vault 관리자 역할에 추가된 동적 그룹의 일부여야 한다고 가정해요. Vault가 실행 중인 것과 다른 컴퓨트 인스턴스에서 로그인한다면, 그 컴퓨트는 VAULT_ADDR에 지정된 엔드포인트에 연결할 수 있어야 해요.
API 키로 로그인하기
$ vault login -method=oci auth_type=apikey role=vaultadminrole
이것은 OCI API 키가 있다고 가정해요. API 키가 없다면:
- 콘솔에서 사용자에 대해 API 키를 추가하세요. 이 사용자는 이전에 Vault 관리자 역할에 추가된 그룹의 일부여야 해요.
- https://docs.cloud.oracle.com/iaas/Content/API/Concepts/sdkconfig.htm에 자세히 설명된 대로 사용자의 크레덴셜로
~/.oci/config구성 파일을 만드세요. - 구성의 region이 Vault를 실행하는 컴퓨트 인스턴스의 region과 일치하는지 확인하세요.
OCI 인증 방식에서 역할 관리하기
- Vault 관리자 역할 만들기와 유사하게, 다른 정책에 매핑된 다른 역할을 만드세요. 다음 내용으로 devrole.json 파일을 만드세요. ocid_list를 tenancy의 Groups 또는 Dynamic Groups로 교체하세요.
{
"token_policies": "devpolicy",
"token_ttl": "1500",
"ocid_list": "ocid1.group.oc1..aaaaaaaaiqnblimpvmgrouplrdvjobr7qd223g275idcqhexamplefq,ocid1.dynamicgroup.oc1..aaaaaaaa5hmfyrdaxvmdg2u5n7ffamn2pdvxaq6esb2vzzoduexamplea"
}
- 역할을 추가하세요.
$ curl --header "X-Vault-Token: $token" --request POST \
--data @devrole.json \
http://127.0.0.1:8200/v1/auth/oci/role/devrole
- devrole을 가정해 Vault에 로그인하세요.
$ vault login -method=oci auth_type=instance role=devrole
인증 (Authentication)
Vault CLI로 또는 API에 직접 통신해 인증할 수 있어요.
CLI를 통해
컴퓨트 인스턴스 크레덴셜 사용:
$ vault login -method=oci auth_type=instance role=devrole
사용자 크레덴셜(SDK 구성) 사용:
$ vault login -method=oci auth_type=apikey role=devrole
API를 통해
- OCI 크레덴셜로 다음 요청에 서명하고 서명 문자열과 authorization 헤더를 얻으세요. URL의 엔드포인트, 스킴(http 또는 https), 역할을 Vault 구성에 해당하는 값으로 교체하세요. 서명에 대한 자세한 내용은 요청 서명을 참고하세요. http://127.0.0.1/v1/auth/oci/login/devrole
- 위 요청에 서명하면 다음 헤더를 얻을 수 있어요.
서명 문자열(가독성을 위해 (request-target) 헤더에 줄바꿈이 삽입됨):
date: Fri, 22 Aug 2019 21:02:19 GMT
(request-target): get /v1/auth/oci/login/devrole
host: 127.0.0.1
Authorization 헤더:
Signature version="1",headers="date (request-target) host",keyId="ocid1.t
enancy.oc1..aaaaaaaaba3pv6wkcr4jqae5f15p2b2m2yt2j6rx32uzr4h25vqstifsfdsq/
ocid1.user.oc1..aaaaaaaat5nvwcna5j6aqzjcaty5eqbb6qt2jvpkanghtgdaqedqw3ryn
jq/73:61:a2:21:67:e0:df:be:7e:4b:93:1e:15:98:a5:b7",algorithm="rsa-sha256
",signature="GBas7grhyrhSKHP6AVIj/h5/Vp8bd/peM79H9Wv8kjoaCivujVXlpbKLjMPe
DUhxkFIWtTtLBj3sUzaFj34XE6YZAHc9r2DmE4pMwOAy/kiITcZxa1oHPOeRheC0jP2dqbTll
8fmTZVwKZOKHYPtrLJIJQHJjNvxFWeHQjMaR7M="
- 서명된 헤더를 "request_headers" 필드에 추가하고 Vault에 실제 요청을 하세요. 예를 들어:
POST http://127.0.0.1/v1/auth/oci/login/devrole
"request_headers": {
"date": ["Fri, 22 Aug 2019 21:02:19 GMT"],
"(request-target)": ["get /v1/auth/oci/login/devrole"],
"host": ["127.0.0.1"],
"content-type": ["application/json"],
"authorization": ["Signature algorithm=\"rsa-sha256\",headers=\"date (request-target) host\",keyId=\"ocid1.tenancy.oc1..aaaaaaaaba3pv6wkcr4jqae5f15p2b2m2yt2j6rx32uzr4h25vqstifsfdsq/ocid1.user.oc1..aaaaaaaat5nvwcna5j6aqzjcaty5eqbb6qt2jvpkanghtgdaqedqw3rynjq/73:61:a2:21:67:e0:df:be:7e:4b:93:1e:15:98:a5:b7\",signature=\"GBas7grhyrhSKHP6AVIj/h5/Vp8bd/peM79H9Wv8kjoaCivujVXlpbKLjMPeDUhxkFIWtTtLBj3sUzaFj34XE6YZAHc9r2DmE4pMwOAy/kiITcZxa1oHPOeRheC0jP2dqbTll8fmTZVwKZOKHYPtrLJIJQHJjNvxFWeHQjMaR7M=\",version=\"1\""]
}
API
OCI 인증 방식은 완전한 HTTP API를 제공해요. 자세한 내용은 API 문서를 참고해 주세요.
Terraform
Vault Terraform 프로바이더로 OCI 인증 리소스를 프로그래밍 방식으로 관리할 수 있어요. 자세한 내용은 Terraform Registry 문서를 참고하세요.
더 알아보기 (Learn more)
- OCI 인증 방식 전체 API는 OCI API 문서를 참고하세요.
- OCI Identity에 대한 자세한 내용은 OCI Identity 문서를 참고하세요.