AliCloud 시크릿 엔진

AliCloud 시크릿 엔진 (AliCloud secrets engine)

RAM 정책 기반의 AliCloud 액세스 토큰 또는 RAM 역할 기반의 STS 자격 증명을 동적으로 생성하는 시크릿 엔진을 다룹니다.

출처: 문서

본문

AliCloud 시크릿 엔진은 RAM 정책 또는 RAM 역할을 기반으로 AliCloud 액세스 토큰이나 AWS STS 자격 증명을 동적으로 생성해요. 이는 웹 UI를 클릭하는 것이 없어서 일반적으로 AliCloud 작업을 더 쉽게 만들어 줍니다. AliCloud 액세스 토큰은 시간 기반이며 Vault 리스가 만료되면 자동으로 폐기됩니다. STS 자격 증명은 수명이 짧고 갱신할 수 없으며 자체적으로 만료됩니다.

설정 (Setup)

대부분의 시크릿 엔진은 제 기능을 하기 전에 미리 구성해야 해요. 이 단계는 보통 운영자나 구성 관리 도구가 수행합니다.

  1. AliCloud 시크릿 엔진을 활성화해요.
$ vault secrets enable alicloud
Success! Enabled the alicloud secrets engine at: alicloud/

기본적으로 시크릿 엔진은 엔진 이름으로 마운트돼요. 다른 경로에 활성화하려면 -path 인자를 사용하면 됩니다.

  1. Vault에 줄 액세스 키에 사용할 AliCloud에서 커스텀 정책을 만듭니다. "Example RAM Policy for Vault"를 참고하세요.

  2. "hashicorp-vault" 같은 이름의 AliCloud에서 사용자를 만들고, "User Authorization Policies" 섹션에서 그 사용자에게 새 커스텀 정책을 직접 적용해요.

  3. AliCloud에서 그 사용자의 액세스 키를 만들어요. 이는 AliCloud UI의 사용자 페이지에서 할 수 있는 작업이에요.

  4. 그 액세스 키를 Vault가 AliCloud와 통신해 자격 증명을 생성할 때 사용할 자격 증명으로 구성해요.

$ vault write alicloud/config \
    access_key=0wNEpMMlzy7szvai \
    secret_key=PupkTg8jdmau1cXxYacgE736PJj4cA

또는 AliCloud 시크릿 엔진은 환경 변수로 설정된 자격 증명이나 인스턴스 메타데이터로 사용할 수 있는 자격 증명을 가져올 수도 있어요. 모든 API 호출에서 현재 자격 증명을 확인하므로, 자격 증명의 변경은 Vault 재시작 없이 거의 즉시 반영됩니다.

가능하면 이 자격 증명에는 인스턴스 메타데이터를 권장하는데, 가장 안전한 옵션이기 때문이에요. 그러려면 Vault가 실행되는 인스턴스가 충분한 권한을 갖도록 보장하고 config를 추가하지 않으면 됩니다.

  1. 자격 증명이 어떻게 부여될지 설명하는 역할을 구성해요.

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를 사용한다면 다음 작업이 필요해요.

역할이 remote_policies를 사용한다면 다음 작업이 필요해요.

역할이 role_arn을 사용한다면 다음 작업이 필요해요.

사용법 (Usage)

시크릿 엔진이 구성되고 사용자/머신이 적절한 권한을 가진 Vault 토큰을 가지면 자격 증명을 생성할 수 있어요.

  1. 역할 이름으로 /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 문서에서 자세한 내용을 확인하세요.

더 알아보기 (Learn more)