AWS 인증 구성

AWS 인증 구성 (Configure AWS authentication)

Grafana 데이터 소스 플러그인은 AWS Identity and Access Management(IAM) 역할 또는 IAM 사용자를 대신해 AWS에 요청을 보냅니다. IAM 사용자·역할은 데이터 소스 데이터를 쿼리하기 위한 특정 API 작업을 수행하려면 관련 정책을 가져야 해요. Grafana 백엔드는 공식 AWS SDK를 사용해 모든 AWS API 요청을 서버 측에서 수행합니다.

출처: 문서

본문

Grafana 데이터 소스 플러그인은 AWS IAM 역할 또는 IAM 사용자를 대신해 AWS에 요청을 보냅니다. IAM 사용자·역할은 데이터 소스 데이터를 쿼리하는 특정 API 작업을 수행하려면 관련 정책을 가져야 해요. 이 정책은 데이터 소스마다 다르므로 각 데이터 소스 플러그인 문서를 참고하세요. Grafana 백엔드는 공식 AWS SDK를 사용해 모든 AWS API 요청을 서버 측에서 수행합니다.

인증 방법 선택 (Select an authentication method)

사용 가능한 인증 방법은 구성과 Grafana가 실행되는 환경에 따라 달라집니다.

  • 오픈소스 Grafana는 기본적으로 AWS SDK Default, Credentials file, Access & secret key 방법을 활성화합니다.
  • Cloud Grafana는 기본적으로 Access & secret keyGrafana Assume Role 을 활성화합니다.
  • 서버 구성 접근 권한이 있는 사용자는 필요에 따라 특정 인증 프로바이더를 활성화·비활성화할 수 있어요. 자세한 내용은 allowed_auth_providers 문서를 참고하세요.

AWS SDK DefaultAWS SDK for Godefault provider를 커스텀 구성 없이 사용합니다. 이 방법은 Grafana 외부에서 CLI를 통하거나, EC2 인스턴스에 자격 증명 직접 연결, ECS 작업, 또는 Kubernetes 클러스터의 서비스 계정으로 AWS 자격 증명을 구성해야 해요. AWS SDK Default로 데이터 소스에 권한을 직접 연결하거나 선택적 Assume Role ARN 필드와 결합할 수 있습니다.

Credentials fileAWS SDK for GoSharedCredentialsProvider에 매핑됩니다. 지정된 프로파일에 대해 AWS 공유 자격 증명 파일을 읽습니다. 공유 자격 증명 파일도 읽는 AWS SDK Default와 달리, 이 옵션은 환경 변수 없이 프로파일을 직접 지정할 수 있어요. 이 옵션은 다른 자격 증명 프로바이더로의 폴백이 없으며 파일 자격 증명이 유효하지 않으면 실패합니다.

Access & secret keyStaticProvider에 해당하며 지정된 access key ID와 secret key 쌍으로 인증합니다. 이 방법은 폴백 인증을 제공하지 않으며 키 쌍이 유효하지 않으면 실패해요. Grafana Cloud에서 사용 가능하지만, 장기 액세스 키 관리가 필요 없기 때문에 Grafana Assume Role 을 권장합니다.

Grafana Assume Role — 이 인증 방법으로 Grafana Cloud 사용자는 Grafana AWS 계정과 트러스트 관계가 있는 AWS IAM 역할을 생성합니다. Grafana는 STS를 사용해 자체를 대신할 임시 자격 증명을 생성합니다. 이 방법은 사용자에게 secret·access 키를 생성할 필요를 없애줍니다. 자세한 내용은 Use Grafana Assume Role을 참고하세요.

Workspace IAM RoleEC2RoleProvider에 해당합니다. EC2RoleProvider는 Grafana를 실행하는 EC2 인스턴스에 연결된 역할에서 자격 증명을 가져옵니다. AWS SDK Default가 비슷한 결과를 얻을 수 있지만 이 옵션은 폴백 인증이 없어요. Amazon Managed Grafana가 이 옵션을 기본으로 활성화합니다.

역할 맡기 (Assume a role)

Assume Role ARN 필드에 맡을 IAM 역할을 지정합니다. Assume Role ARN 을 구성하면 Grafana는 제공된 자격 증명으로 sts:AssumeRole 호출을 수행합니다. 기본 인증 방법은 역할을 맡을 권한만 필요하며, 맡은 역할은 CloudWatch 접근 권한이 필요해요.

예를 들어 모든 AWS 데이터 소스에서 한 세트의 장기 자격 증명을 사용하되 각 데이터 소스의 AWS 접근(예: 스테이징·프로덕션 데이터 접근 분리)을 제한하고 싶을 수 있습니다. 각 데이터 소스에 별도 권한의 자격 증명을 만들 수도 있지만, 많은 데이터 소스 인스턴스에 걸쳐 여러 secret·access 키를 관리·교체해야 해요. 대신 assume role 기능은 모든 AWS 데이터 소스에서 하나의 AWS 자격 증명 세트를 단일 권한(STS를 통한 역할 맡기 능력)으로 사용할 수 있게 해줍니다. 그런 다음 각 데이터 소스에 임시 권한을 지정하는 별도 IAM 역할을 만들면 됩니다. IAM 역할은 자격 증명이 아니므로 교체가 필요 없고 관리가 단순해져요.

Assume Role ARN 필드를 비워 두면 Grafana는 선택한 인증 방법의 자격 증명을 직접 사용하며, AWS 데이터 권한이 해당 자격 증명에 직접 연결되어야 합니다. Assume Role ARN 필드는 Grafana Assume Role을 제외한 모든 인증 방법에서 선택 사항입니다. 오픈소스 Grafana 또는 Grafana Enterprise에서 이 기능을 비활성화하려면 assume_role_enabled를 참고하세요.

외부 ID 사용 (Use an external ID):

참고: Grafana Assume Role 인증 프로바이더에는 외부 ID를 사용할 수 없어요.

외부 ID로 생성된 다른 계정의 역할을 맡으려면 External ID 필드에 외부 ID를 지정합니다. 자세한 내용은 AWS 외부 ID 문서를 참고하세요.

커스텀 엔드포인트 사용 (Use a custom endpoint)

Endpoint 필드로 기본 AWS 서비스 API 엔드포인트를 재정의하는 커스텀 엔드포인트 URL을 지정할 수 있어요. 이 필드를 비워 두면 기본 생성 엔드포인트를 사용합니다. 서비스 엔드포인트 사용에 대한 자세한 내용은 AWS service endpoints 문서를 참고하세요.

AWS 자격 증명 파일 사용 (Use an AWS credentials file)

grafana-server 서비스를 실행하는 사용자의 HOME 경로인 ~/.aws/credentials 에 파일을 만듭니다.

참고: 자격 증명 파일이 올바른 위치에 있는 것 같지만 작동하지 않는다면 aws 파일을 /usr/share/grafana/ 로 옮기고 자격 증명 파일 권한을 0644 로 설정하세요.

자격 증명 파일 예:

[default]
aws_access_key_id = asdsadasdasdasd
aws_secret_access_key = dasdasdsadasdasdasdsa
region = us-west-2

EKS IAM roles for service accounts (IRSA) 사용

EKS IAM roles for service accounts(IRSA)는 팟(pod)이 장기 자격 증명을 저장하지 않고 IAM 역할을 맡을 수 있게 하는 AWS EKS 기능이에요. EKS 클러스터에서 IRSA를 구성하면 AWS가 임시 자격 증명을 projected volume mount로 팟에 주입합니다. Grafana 컨테이너에서 프로세스는 사용자 472(grafana)로 실행됩니다. 기본적으로 Kubernetes는 projected 자격 증명을 루트 사용자에게만 권한으로 마운트해요. 사용자 472에게 자격 증명 접근 권한을 부여하고 EC2 인스턴스에 연결된 IAM 역할로의 폴백을 방지하려면 팟에 security context 를 설정하세요.

Security context 예:

securityContext:
  fsGroup: 472
  runAsUser: 472
  runAsGroup: 472

Grafana Assume Role 사용 (Use Grafana Assume Role)

참고: Grafana Assume Role은 Grafana Cloud에서만 사용할 수 있으며, 현재 Amazon CloudWatch와 Amazon Athena 데이터 소스에서만 지원됩니다.

Grafana Assume Role 인증 프로바이더는 장기 AWS IAM 사용자를 만들거나 access 키를 교체하지 않고도 AWS에 접근할 수 있게 해줍니다. 대신 CloudWatch에 접근 권한이 있고 Grafana AWS 계정을 신뢰하는 IAM 역할을 만들면 돼요. 그러면 Grafana AWS 계정이 AWS 데이터에 대한 임시 자격 증명을 생성하기 위해 Security Token Service(STS) 요청을 합니다. 이 요청에는 Grafana Cloud 계정에 고유한 externalID가 포함되어, 사용자가 자기 AWS 리소스에만 접근할 수 있게 보장합니다.

참고: 트러스트 정책은 공유 Grafana AWS 계정을 신뢰 주체로 지명하지만, 이로 인해 모든 Grafana 고객이 역할에 접근하는 것은 아니에요. sts:ExternalId 조건이 그 트러스트를 고유 외부 ID로 제한하므로, AWS는 정확히 그 값을 제시한 assume-role 요청만 허용합니다. Grafana는 자체 데이터 소스 요청에만 외부 ID를 보냅니다. 외부 ID는 시크릿이 아니지만 계정 수준 트러스트와 결합해 한 고객이 다른 고객의 역할을 맡을 수 없게 보장합니다. 트러스트 정책에 sts:ExternalId 조건을 유지하세요 — 제거하면 Grafana가 신뢰하는 어떤 계정이든 역할을 맡을 수 있게 됩니다. 자세한 내용은 AWS 외부 ID 문서를 참고하세요.

Grafana Assume Role 사용 방법:

  1. 새 CloudWatch 데이터 소스를 만들고(또는 기존 것을 업데이트하고) 인증 프로바이더로 Grafana Assume Role 을 선택합니다.
  2. AWS 콘솔에서 새 IAM 역할을 만들고, Trusted entity type 에서 신뢰 대상으로 Another AWS account 를 선택합니다.
  3. Grafana 계정 ID를 입력하고(CloudWatch 데이터 소스 구성의 Settings 탭 지침 상자에 표시됨) Require external ID 확인란을 선택합니다.
  4. Grafana의 CloudWatch 데이터 소스 구성 Settings 탭 지침 상자에 지정된 외부 ID를 입력합니다. 이 외부 ID는 Grafana 인스턴스에 고유합니다.
  5. Grafana가 대신 접근하길 원하는 필요한 모든 권한을 연결합니다(예: CloudWatch Logs·CloudWatch Metrics 정책).
  6. 역할 이름과 설명을 지정하고 Create role 을 클릭합니다.
  7. 만든 역할의 ARN을 복사해 Grafana의 CloudWatch 데이터 소스 구성 Settings 탭의 Assume Role ARN 필드에 붙여넣습니다.

IAM 역할의 샘플 트러스트 관계(Trust Relationship):

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": {Grafana's AWS Account}
            },
            "Action": "sts:AssumeRole",
            "Condition": {
                "StringEquals": {
                    "sts:ExternalId": {External ID unique to your account}
                }
            }
        }
    ]
}

더 알아보기 (Learn more)