VSO AWS 인증
VSO AWS 인증 (AWS auth)
VSO가 다양한 AWS 인증 시나리오에서 Vault의 AWS 인증 방식으로 인증하는 방법을 다룹니다.
출처: 문서
본문
Vault Secrets Operator(VSO)는 Vault에 접근할 때 AWS 인증을 지원해요. VSO는 다음 방법으로 AWS 자격 증명을 가져올 수 있습니다.
- IRSA가 활성화된 쿠버네티스 서비스 어카운트에서.
- 기본 EKS 노드 역할에서 자격 증명을 추론해.
- 오퍼레이터 파드가 실행되는 인스턴스의 EC2 인스턴스 프로파일에서 자격 증명을 추론해.
- 명시적으로 제공한 정적 액세스 키 ID와 시크릿 키에서.
아래 예제는 여러 AWS 인증 시나리오에서 Vault 역할과 그에 해당하는 VSO의 VaultAuth 프로파일을 구성하는 방법을 보여줘요.
IRSA
-
IAM roles for service accounts에 대한 Amazon 문서를 따라 OIDC 제공자를 추가해 쿠버네티스 서비스 어카운트가 IAM 역할을 맡을 수 있게 해요.
-
Vault 인스턴스에 적절한 인증 역할을 만들어요.
$ vault write auth/aws/role/<ROLE_NAME> \
auth_type="iam" \
policies="default" \
bound_iam_principal_arn="arn:aws:iam::<ACCOUNT_ID>:role/<SERVICE_ACCOUNT_ROLE>"
resource "vault_aws_auth_backend_role" "aws_irsa_role" {
backend = "auth/aws"
role = "<ROLE_NAME>"
auth_type = "iam"
token_policies = ["default"]
bound_iam_principal_arns = [
"arn:aws:iam::<ACCOUNT_ID>:role/<SERVICE_ACCOUNT_ROLE>",
]
}
- VSO에 해당하는 인증 항목을 만들어요.
apiVersion: secrets.hashicorp.com/v1beta1
kind: VaultAuth
metadata:
name: vaultauth-aws-irsa-example
namespace: <NAMESPACE>
spec:
vaultConnectionRef: <CONNECTION_NAME>
mount: aws
method: aws
aws:
role: <ROLE_NAME>
region: <REGION>
irsaServiceAccount: <SERVICE_ACCOUNT_NAME>
Terraform은 IRSA를 지원해요. Terraform으로 Elastic Kubernetes(EKS) 클러스터를 관리한다면 AWS EKS 모듈이 IRSA 서브모듈을 통해 IRSA를 지원합니다.
노드 역할 (Node role)
- Vault 인스턴스에 적절한 인증 역할을 만들어요.
$ vault write auth/aws/role/<ROLE_NAME> \
auth_type="iam" \
policies="default" \
bound_iam_principal_arn="arn:aws:iam::<ACCOUNT_ID>:role/eks-nodes-<CLUSTER_NAME>"
resource "vault_aws_auth_backend_role" "aws_node_role" {
backend = "auth/aws"
role = "<ROLE_NAME>"
auth_type = "iam"
token_policies = ["default"]
bound_iam_principal_arns = [
"arn:aws:iam::<ACCOUNT_ID>:role/eks-nodes-<CLUSTER_NAME>",
]
}
- VSO에 해당하는 인증 항목을 만들어요.
apiVersion: secrets.hashicorp.com/v1beta1
kind: VaultAuth
metadata:
name: vaultauth-aws-node-example
namespace: <NAMESPACE>
spec:
vaultConnectionRef: <CONNECTION_NAME>
mount: aws
method: aws
aws:
role: <ROLE_NAME>
region: <REGION>
인스턴스 프로파일 (Instance profile)
- Vault 인스턴스에 적절한 인증 역할을 만들어요.
$ vault write auth/aws/role/<ROLE_NAME> \
auth_type="iam" \
policies="default" \
inferred_entity_type="ec2_instance" \
inferred_aws_region=<REGION> \
bound_account_id=<ACCOUNT_ID> \
bound_iam_principal_arn="arn:aws:iam::<ACCOUNT_ID>:instance-profile/eks-<PROFILE>"
resource "vault_aws_auth_backend_role" "aws_node_role" {
backend = "auth/aws"
role = "<ROLE_NAME>"
auth_type = "iam"
token_policies = ["default"]
inferred_entity_type = "ec2_instance"
inferred_aws_region = "<REGION>"
bound_account_ids = ["<ACCOUNT_ID>"]
bound_iam_principal_arns = [
"arn:aws:iam::<ACCOUNT_ID>:role/eks-nodes-<CLUSTER_NAME>",
]
}
- VSO에 해당하는 인증 항목을 만들어요.
apiVersion: secrets.hashicorp.com/v1beta1
kind: VaultAuth
metadata:
name: vaultauth-aws-instance-example
namespace: <NAMESPACE>
spec:
vaultConnectionRef: <CONNECTION_NAME>
mount: aws
method: aws
aws:
role: <ROLE_NAME>
region: <REGION>
정적 자격 증명 (Static credentials)
- Vault 인스턴스에 적절한 인증 역할을 만들어요.
$ vault write auth/aws/role/<ROLE_NAME> \
auth_type="iam" \
policies="default" \
bound_iam_principal_arn="arn:aws:iam::<ACCOUNT_ID>:role/<ROLE>"
resource "vault_aws_auth_backend_role" "aws_static_role" {
backend = "auth/aws"
role = "<ROLE_NAME>"
auth_type = "iam"
token_policies = ["default"]
bound_iam_principal_arns = [
"arn:aws:iam::<ACCOUNT_ID>:role/<ROLE>",
]
}
- VSO에 해당하는 인증 항목을 만들어요.
apiVersion: v1
kind: Secret
metadata:
name: aws-static-creds
namespace: <NAMESPACE>
data:
access_key_id: <BASE64_ACCESS_KEY_ID>
secret_access_key: <BASE64_SECRET_ACCESS_KEY>
session_token: <BASE64_SESSION_TOKEN> # session_token은 선택 사항
---
apiVersion: secrets.hashicorp.com/v1beta1
kind: VaultAuth
metadata:
name: vaultauth-aws-static-example
namespace: <NAMESPACE>
spec:
vaultConnectionRef: <CONNECTION_NAME>
mount: aws
method: aws
aws:
role: <ROLE_NAME>
region: <REGION>
secretRef: aws-static-creds
API
AWS VaultAuth 옵션의 전체 목록은 VSO API 페이지에서 확인할 수 있어요.