AliCloud 시크릿 엔진
AliCloud 시크릿 엔진 (AliCloud secrets engine)
RAM 정책 기반의 AliCloud 액세스 토큰 또는 RAM 역할 기반의 STS 자격 증명을 동적으로 생성하는 시크릿 엔진을 다룹니다.
출처: 문서
본문
AliCloud 시크릿 엔진은 RAM 정책 또는 RAM 역할을 기반으로 AliCloud 액세스 토큰이나 AWS STS 자격 증명을 동적으로 생성해요. 이는 웹 UI를 클릭하는 것이 없어서 일반적으로 AliCloud 작업을 더 쉽게 만들어 줍니다. AliCloud 액세스 토큰은 시간 기반이며 Vault 리스가 만료되면 자동으로 폐기됩니다. STS 자격 증명은 수명이 짧고 갱신할 수 없으며 자체적으로 만료됩니다.
설정 (Setup)
대부분의 시크릿 엔진은 제 기능을 하기 전에 미리 구성해야 해요. 이 단계는 보통 운영자나 구성 관리 도구가 수행합니다.
- AliCloud 시크릿 엔진을 활성화해요.
$ vault secrets enable alicloud
Success! Enabled the alicloud secrets engine at: alicloud/
기본적으로 시크릿 엔진은 엔진 이름으로 마운트돼요. 다른 경로에 활성화하려면 -path 인자를 사용하면 됩니다.
-
Vault에 줄 액세스 키에 사용할 AliCloud에서 커스텀 정책을 만듭니다. "Example RAM Policy for Vault"를 참고하세요.
-
"hashicorp-vault" 같은 이름의 AliCloud에서 사용자를 만들고, "User Authorization Policies" 섹션에서 그 사용자에게 새 커스텀 정책을 직접 적용해요.
-
AliCloud에서 그 사용자의 액세스 키를 만들어요. 이는 AliCloud UI의 사용자 페이지에서 할 수 있는 작업이에요.
-
그 액세스 키를 Vault가 AliCloud와 통신해 자격 증명을 생성할 때 사용할 자격 증명으로 구성해요.
$ vault write alicloud/config \
access_key=0wNEpMMlzy7szvai \
secret_key=PupkTg8jdmau1cXxYacgE736PJj4cA
또는 AliCloud 시크릿 엔진은 환경 변수로 설정된 자격 증명이나 인스턴스 메타데이터로 사용할 수 있는 자격 증명을 가져올 수도 있어요. 모든 API 호출에서 현재 자격 증명을 확인하므로, 자격 증명의 변경은 Vault 재시작 없이 거의 즉시 반영됩니다.
가능하면 이 자격 증명에는 인스턴스 메타데이터를 권장하는데, 가장 안전한 옵션이기 때문이에요. 그러려면 Vault가 실행되는 인스턴스가 충분한 권한을 갖도록 보장하고 config를 추가하지 않으면 됩니다.
- 자격 증명이 어떻게 부여될지 설명하는 역할을 구성해요.
AliCloud에 이미 만들어진 정책만 사용해 액세스 토큰을 생성하려면:
$ vault write alicloud/role/policy-based \
remote_policies='name:AliyunOSSReadOnlyAccess,type:System' \
remote_policies='name:AliyunRDSReadOnlyAccess,type:System'
AliCloud에서 Vault가 동적으로 만들 정책만 사용해 액세스 토큰을 생성하려면:
$ vault write alicloud/role/policy-based \
inline_policies=<<EOF
<POLICY_JSON>
EOF
inline_policies와 remote_policies는 함께 사용할 수 있어요. 그러나 둘 다 STS 자격 증명을 생성하도록 구성하는 데는 사용할 수 없어요. 다음과 같이:
$ vault write alibaba/role/role-based \
role_arn='acs:ram::5138828231865461:role/hastrustedactors'
지정된 role_arn은 생성될 때 "trusted actors"가 추가되었어야 해요. 이들은 역할 생성 시에만 추가할 수 있습니다. Trusted actors는 역할을 맡을 수 있는 엔티티입니다. 역할을 맡아 자격 증명을 얻을 것이므로, config의 access_key와 secret_key는 trusted actor 자격을 갖추어야 해요.
유용한 링크
Vault용 예제 RAM 정책
AliCloud 자격 증명은 환경 변수, alicloud/config의 명시적 설정, 인스턴스 메타데이터로 제공될 수 있지만, 결과 자격 증명은 시크릿을 발급할 충분한 권한이 필요해요. 필요한 권한은 역할이 구성된 방식에 따라 달라집니다.
어떤 유형의 역할로든 자격 증명을 만들 수 있게 해 주는 예제 RAM 정책은 다음과 같아요.
{
"Statement": [
{
"Action": [
"ram:CreateAccessKey",
"ram:DeleteAccessKey",
"ram:CreatePolicy",
"ram:DeletePolicy",
"ram:AttachPolicyToUser",
"ram:DetachPolicyFromUser",
"ram:CreateUser",
"ram:DeleteUser",
"sts:AssumeRole"
],
"Effect": "Allow",
"Resource": "*"
}
],
"Version": "1"
}
그러나 사용하는 정책은 역할이 구성된 방식에 따라 실제로 필요한 작업만 허용해야 해요.
역할이 inline_policies를 사용한다면 다음 작업이 필요해요.
- "ram:CreateAccessKey"
- "ram:DeleteAccessKey"
- "ram:AttachPolicyToUser"
- "ram:DetachPolicyFromUser"
- "ram:CreateUser"
- "ram:DeleteUser"
역할이 remote_policies를 사용한다면 다음 작업이 필요해요.
- inline_policies에 나열된 모든 것
- "ram:CreatePolicy"
- "ram:DeletePolicy"
역할이 role_arn을 사용한다면 다음 작업이 필요해요.
사용법 (Usage)
시크릿 엔진이 구성되고 사용자/머신이 적절한 권한을 가진 Vault 토큰을 가지면 자격 증명을 생성할 수 있어요.
- 역할 이름으로
/creds엔드포인트를 읽어 새 액세스 키를 생성해요.
$ vault read alicloud/creds/policy-based
Key Value
--- -----
lease_id alicloud/creds/policy-based/f3e92392-7d9c-09c8-c921-575d62fe80d8
lease_duration 768h
lease_renewable true
access_key 0wNEpMMlzy7szvai
secret_key PupkTg8jdmau1cXxYacgE736PJj4cA
반환되는 access_key와 secret_key는 Alibaba 문서에서 각각 "AccessKeyId"와 "AccessKeySecret"라고도 합니다.
role_arn을 사용하는 역할의 creds를 가져오면 expiration과 security_token의 추가 필드가 포함됩니다. 다음과 같이:
$ vault read alicloud/creds/role-based
Key Value
--- -----
lease_id alicloud/creds/role-based/f3e92392-7d9c-09c8-c921-575d62fe80d9
lease_duration 59m59s
lease_renewable false
access_key STS.L4aBSCSJVMuKg5U1vFDw
secret_key wyLTSmsyPGP1ohvvw8xYgB29dlGI8KMiH2pKCNZ9
security_token CAESrAIIARKAAShQquMnLIlbvEcIxO6wCoqJufs8sWwieUxu45hS9AvKNEte8KRUWiJWJ6Y+YHAPgNwi7yfRecMFydL2uPOgBI7LDio0RkbYLmJfIxHM2nGBPdml7kYEOXmJp2aDhbvvwVYIyt/8iES/R6N208wQh0Pk2bu+/9dvalp6wOHF4gkFGhhTVFMuTDRhQlNDU0pWTXVLZzVVMXZGRHciBTQzMjc0KgVhbGljZTCpnJjwySk6BlJzYU1ENUJuCgExGmkKBUFsbG93Eh8KDEFjdGlvbkVxdWFscxIGQWN0aW9uGgcKBW9zczoqEj8KDlJlc291cmNlRXF1YWxzEghSZXNvdXJjZRojCiFhY3M6b3NzOio6NDMyNzQ6c2FtcGxlYm94L2FsaWNlLyo=
expiration 2018-08-15T21:58:00Z
API
AliCloud 시크릿 엔진은 완전한 HTTP API를 제공해요. 자세한 내용은 AliCloud 시크릿 엔진 API를 참고하세요.
Terraform
Vault Terraform 제공자로 AliCloud 시크릿 리소스를 프로그래밍 방식으로 관리할 수 있어요. Terraform Registry 문서에서 자세한 내용을 확인하세요.