ARN
1. 개요
1. 개요
ARN(Amazon Resource Name)은 아마존 웹 서비스에서 생성하는 모든 리소스를 고유하게 식별하는 데 사용되는 표준 형식의 이름이다. AWS 계정 내에서뿐만 아니라 전역적으로 고유한 식별자 역할을 하여, IAM 정책, API 호출, 리소스 간 참조 등 다양한 맥락에서 특정 리소스를 정확히 지칭할 수 있게 한다.
ARN의 기본 개념은 AWS 생태계 내 모든 엔터티에 주소를 부여하는 것이다. 예를 들어, 하나의 S3 버킷, 하나의 Lambda 함수, 한 명의 IAM 사용자는 각각 서로 다른 ARN을 가진다. 이 체계는 AWS가 제공하는 분산 환경에서 리소스를 관리하고 접근 제어 규칙을 정의하는 데 필수적인 기반이 된다.
ARN은 단순한 이름 이상으로, 리소스의 위치와 유형에 대한 정보를 구조적으로 포함한다. 이를 통해 시스템은 ARN 문자열을 파싱하여 어떤 AWS 리전에 속해 있는지, 어떤 서비스의 리소스인지, 그리고 구체적인 식별자는 무엇인지 알 수 있다. 이 구조화된 접근 방식은 자동화 및 통합 관리 도구를 구축하는 데 핵심적이다.
2. ARN의 구조와 형식
2. ARN의 구조와 형식
ARN은 AWS 내 리소스를 고유하게 식별하는 문자열이다. 이 문자열은 콜론(:)으로 구분된 여러 구성 요소로 이루어져 있으며, 특정 패턴을 따른다.
표준 구성 요소
ARN의 일반적인 형식은 arn:partition:service:region:account-id:resource이다. 각 구성 요소는 다음과 같은 의미를 가진다.
arn: ARN 스키마를 나타내는 고정 접두사이다.partition: 리소스가 위치한 AWS 파티션을 나타낸다. 대부분의 공용 리소스는aws를 사용하며, 중국 리전은aws-cn, 미국 정부용은aws-us-gov를 사용한다.service: 리소스가 속한 AWS 서비스의 네임스페이스를 지정한다. 예를 들어 S3, IAM, Lambda 등이 이에 해당한다.region: 리소스가 생성된 AWS 리전 코드이다. 일부 글로벌 서비스(예: IAM)의 경우 이 필드가 비어 있을 수 있다.account-id: 리소스를 소유한 AWS 계정의 12자리 숫자 ID이다.resource: 실제 리소스를 식별하는 부분으로, 서비스와 리소스 유형에 따라 세부 경로가 추가된다. 슬래시(/)나 콜론(:)을 구분자로 사용한다.
서비스별 ARN 패턴
리소스 식별자 부분의 구체적인 형식은 AWS 서비스에 따라 다르다. 주요 서비스의 패턴은 다음과 같다.
서비스 | 일반적인 ARN 패턴 예시 | 설명 |
|---|---|---|
IAM 사용자 |
| 계정 내 IAM 사용자를 지정한다. |
S3 버킷 객체 |
| 글로벌 서비스이므로 리전 필드가 비어 있다. |
Lambda 함수 |
| 리전, 계정 ID, 함수 이름을 포함한다. |
EC2 인스턴스 |
| 인스턴스 ID로 리소스를 식별한다. |
일부 서비스는 리소스 식별자 내에 추가 한정자나 자원 유형을 포함하기도 한다. 예를 들어 RDS 데이터베이스 인스턴스의 ARN은 db: 접두사를 사용할 수 있다. 이러한 패턴의 차이는 각 서비스의 리소스 모델과 관리 방식에 기인한다.
2.1. 표준 구성 요소
2.1. 표준 구성 요소
ARN은 특정 패턴을 따르는 문자열이다. 기본 구조는 다음과 같이 다섯 가지 주요 부분으로 구성된다.
구성 요소 | 설명 | 필수 여부 | 예시 |
|---|---|---|---|
| ARN을 식별하는 리터럴 문자열 | 필수 |
|
| 리소스가 위치한 AWS 파티션 | 필수 |
|
| 리소스를 소유한 AWS 서비스의 네임스페이스 | 필수 |
|
| 리소스가 상주하는 지역(리전) | 조건부[1] |
|
| 리소스를 소유한 AWS 계정 ID | 조건부[2] |
|
| 리소스 자체를 식별하는 부분 | 필수 |
|
resource 부분은 서비스에 따라 가장 복잡한 구조를 가진다. 일반적으로 리소스 유형과 리소스 이름을 구분자(/ 또는 :)로 결합하여 표현한다. 예를 들어, IAM 사용자 ARN은 user/JohnDoe 형식이고, Lambda 함수 ARN은 function:my-function:prod와 같은 형식을 사용할 수 있다. 이 구분자와 추가 한정자(예: Lambda의 Alias 또는 버전)는 각 AWS 서비스의 문서에 정의된 패턴을 따른다.
ARN 문자열의 완전한 형식은 다음과 같다.
arn:partition:service:region:account-id:resource
각 구성 요소는 콜론(:)으로 구분된다. 특정 구성 요소가 적용되지 않는 경우(예: 글로벌 서비스의 region), 해당 필드는 비워두지만 구분자 콜론은 유지한다. 이 표준화된 구조 덕분에 AWS 내부 시스템과 사용자 모두가 문자열을 파싱하여 리소스의 소속 서비스, 계정, 지역 및 정확한 식별자를 일관되게 이해할 수 있다.
2.2. 서비스별 ARN 패턴
2.2. 서비스별 ARN 패턴
각 AWS 서비스는 고유한 리소스 계층 구조와 명명 규칙을 가지며, 이는 ARN 형식에 반영됩니다. 서비스별 ARN 패턴은 일반적으로 서비스 식별자, 리전, 계정 ID, 그리고 서비스 고유의 리소스 경로를 포함합니다. 예를 들어, Amazon S3 버킷의 ARN은 arn:aws:s3:::bucket_name 형식을 따르며, 객체 키를 포함할 경우 arn:aws:s3:::bucket_name/key_name이 됩니다. AWS Lambda 함수의 ARN은 arn:aws:lambda:region:account-id:function:function-name과 같은 구조를 가집니다.
일부 서비스는 특정 리소스 유형에 따라 추가 한정자를 요구합니다. Amazon EC2 인스턴스의 ARN은 arn:aws:ec2:region:account-id:instance/instance-id 패턴을 사용합니다. IAM 사용자, 그룹, 역할의 ARN은 리전 요소를 포함하지 않는 것이 특징입니다. 예를 들어 IAM 역할의 ARN은 arn:aws:iam::account-id:role/role-name 형식입니다. Amazon RDS 데이터베이스 인스턴스의 ARN은 arn:aws:rds:region:account-id:db:db-instance-name과 같이 구성됩니다.
서비스에 따라 리소스 경로 내에 여러 계층이 존재할 수 있습니다. Amazon API Gateway의 ARN은 REST API, 스테이지, 리소스, 메서드 등을 구체적으로 지정할 수 있습니다. 예시: arn:aws:apigateway:region::/restapis/api-id/stages/stage-name. KMS 키의 ARN은 키 ID 또는 별칭을 포함하며, arn:aws:kms:region:account-id:key/key-id 또는 arn:aws:kms:region:account-id:alias/alias-name 형식을 가집니다.
아래 표는 주요 AWS 서비스의 ARN 패턴 예시를 보여줍니다.
서비스 | ARN 패턴 예시 |
|---|---|
Amazon S3 버킷 |
|
AWS Lambda 함수 |
|
IAM 역할 |
|
Amazon EC2 인스턴스 |
|
Amazon SNS 토픽 |
|
|
이러한 패턴의 차이는 각 서비스의 리소스 모델과 관리 방식에 기인합니다. 정확한 ARN 형식은 서비스의 공식 문서를 참조하는 것이 가장 확실합니다.
3. 주요 사용 사례
3. 주요 사용 사례
ARN은 AWS 내에서 리소스를 고유하게 식별하고, 이들 간의 상호작용을 정의하는 데 핵심적인 역할을 한다. 주된 사용 사례는 크게 IAM 정책을 통한 권한 관리와 리소스 간의 참조 및 연결 설정으로 나뉜다.
가장 기본적이고 광범위한 사용 사례는 IAM 권한 정책에서 특정 리소스에 대한 액세스를 허용하거나 거부하는 것이다. 정책 문서 내에서 Resource 필드는 하나 이상의 ARN을 지정하여 해당 정책이 적용될 대상을 정의한다. 예를 들어, 특정 S3 버킷의 객체에 대한 읽기 권한만 부여하거나, 특정 Lambda 함수만 실행할 수 있도록 제한하는 정책을 작성할 수 있다. 와일드카드(*)를 사용해 일부 ARN 요소를 대체함으로써, 특정 리소스 그룹(예: 특정 리전의 모든 EC2 인스턴스)에 대한 권한을 일괄적으로 관리하는 것도 가능하다.
또 다른 주요 사용 사례는 AWS 서비스들이 서로를 참조하거나 연결할 때 ARN을 식별자로 사용하는 것이다. 많은 서비스 통합 시나리오에서 이는 필수적이다. 예를 들어, Amazon EventBridge 규칙이 특정 Lambda 함수를 트리거하도록 설정할 때, 대상 함수는 ARN으로 지정된다. 마찬가지로, IAM 역할에 부여된 신뢰 정책(trust policy)에서는 해당 역할을 수임할 수 있는 주체(예: 특정 Lambda 함수)를 ARN으로 명시한다. 이처럼 ARN은 서로 다른 서비스의 리소스들이 안전하고 정확하게 상호 작용할 수 있는 통일된 주소 체계를 제공한다.
사용 사례 | 설명 | 예시 ARN 패턴 (일부) |
|---|---|---|
IAM 정책 권한 부여 | 정책에서 특정 리소스에 대한 작업 허용/거부 |
|
서비스 간 리소스 참조 | 한 서비스가 다른 서비스의 리소스를 대상으로 지정 |
|
교차 계정 액세스 | 다른 AWS 계정의 리소스에 대한 액세스 위임 |
|
리소스 태그 기반 정책 | ARN과 리소스 태그를 결합한 조건부 권한 부여[3] | 조건문에서 |
3.1. IAM 정책 및 권한 관리
3.1. IAM 정책 및 권한 관리
IAM 정책에서 ARN은 정책 문서 내에서 허용(Allow) 또는 거부(Deny)할 정확한 대상을 지정하는 데 사용되는 핵심 요소이다. 정책은 주로 "Effect", "Action", "Resource" 필드로 구성되며, Resource 필드에는 하나 이상의 ARN이 명시된다. 이를 통해 특정 AWS 서비스의 특정 작업(예: s3:GetObject)이 적용될 리소스의 범위를 제한할 수 있다. 와일드카드(*)를 사용하여 특정 패턴을 가진 여러 리소스를 한 번에 지정하는 것도 일반적이다.
IAM 정책에서 ARN을 활용하는 주요 패턴은 다음과 같다.
정책 패턴 | 설명 | 예시 ARN |
|---|---|---|
특정 리소스 지정 | 단일 리소스에 대한 정밀한 권한 부여 |
|
모든 리소스 허용 | 서비스 내 모든 리소스에 대한 광범위한 권한 부여[4] |
|
계정 내 모든 리소스 | 특정 AWS 계정 내의 모든 리소스 및 서비스에 대한 권한 부여 |
|
조건부 와일드카드 | 리소스 경로의 일부만 와일드카드로 대체 |
|
권한 관리를 효과적으로 하기 위해서는 최소 권한 원칙을 준수하는 것이 중요하다. 이는 사용자, 역할, 그룹에 작업 수행에 필요한 최소한의 권한만 부여하는 것을 의미한다. 광범위한 와일드카드(예: *) 사용은 보안 위험을 초래할 수 있으므로, 가능한 한 구체적인 ARN을 사용하여 리소스 범위를 제한해야 한다. 또한, 정책 시뮬레이터나 Access Analyzer와 같은 AWS 도구를 활용하면 ARN 기반 정책의 효과를 사전에 검증할 수 있다.
3.2. 리소스 간 참조 및 연결
3.2. 리소스 간 참조 및 연결
ARN은 AWS 내에서 리소스를 고유하게 식별하는 동시에, 서로 다른 리소스 간의 관계를 설정하고 참조하는 데 핵심적인 역할을 한다. 예를 들어, 하나의 서비스가 다른 서비스의 리소스를 사용하도록 허용하거나, 이벤트 소스와 대상을 연결할 때 ARN이 참조 지점으로 사용된다. 이는 AWS의 서비스 지향 아키텍처에서 리소스 간의 상호작용을 가능하게 하는 기본 메커니즘이다.
구체적인 사용 예로, AWS Lambda 함수가 특정 Amazon S3 버킷의 객체 생성 이벤트를 처리하도록 설정할 수 있다. 이때 Lambda 함수는 자신의 ARN으로 식별되고, S3 버킷은 버킷 ARN으로 식별된다. S3 서비스는 이벤트 알림 구성 시 대상 Lambda 함수를 지정하기 위해 해당 함수의 ARN을 사용한다. 마찬가지로, Amazon SQS 대기열에 메시지를 보낼 수 있는 권한을 부여하는 IAM 정책에서도 수신자 SQS 대기열의 ARN이 명시된다.
서비스 간 통합에서 ARN의 참조는 다음과 같은 패턴을 보인다.
참조 유형 | 예시 | 설명 |
|---|---|---|
이벤트 대상 지정 | Amazon EventBridge 규칙이 특정 Lambda 함수를 트리거 | 규칙의 대상(Target) 필드에 Lambda 함수 ARN을 지정한다. |
크로스 서비스 권한 | Lambda 함수가 DynamoDB 테이블에 쓰기 | 함수 실행 역할의 IAM 정책에서 DynamoDB 테이블 ARN을 리소스로 명시한다. |
리소스 연동 | API Gateway가 Lambda 함수와 통합 | API Gateway의 통합 엔드포인트로 Lambda 함수 ARN을 제공한다. |
이러한 참조 구조는 AWS 생태계를 하나의 통합된 플랫폼으로 만든다. 리소스가 물리적 위치나 내부 식별자에 의존하지 않고, 표준화된 ARN을 통해 논리적으로 연결된다. 결과적으로 사용자는 복잡한 인프라 구성 요소들을 선언적이고 유연하게 조합하여 애플리케이션을 구축할 수 있다.
4. AWS 서비스별 ARN 특성
4. AWS 서비스별 ARN 특성
각 AWS 서비스는 자체 리소스 유형과 식별 방식을 가지므로, ARN의 구조와 패턴에서 차이를 보인다. 일반적으로 ARN은 arn:aws:service:region:account:resource-type/resource-id 또는 arn:aws:service:region:account:resource-type:resource-id 형식을 따르지만, 서비스별로 리소스 구분자( / 또는 : )와 추가 한정자(qualifier)가 다르게 적용된다.
다음은 주요 서비스들의 ARN 특성을 보여주는 표이다.
서비스 | 주요 리소스 유형 | ARN 패턴 예시 | 주요 특성 |
|---|---|---|---|
버킷, 객체 |
| 리전(region)과 계정(account) ID가 생략되는 경우가 많으며, 객체는 버킷 이름 뒤에 경로로 지정된다. | |
사용자, 역할, 정책 |
| 리전 개념이 없어 리전 필드가 항상 비어 있다. 계정 ID가 명시적으로 필요하다. | |
함수, 레이어 |
| 리전과 계정 ID를 포함하며, 별칭(alias)이나 버전(version)을 추가로 지정할 수 있다. | |
인스턴스, 이미지, 보안 그룹 |
| 리소스 ID 앞에 리소스 유형(instance/, image/ 등)이 접두사로 붙는 패턴을 사용한다. | |
DB 인스턴스, 스냅샷 |
| 리소스 유형(예: | |
VPC, 서브넷 |
| EC2 서비스의 하위 리소스로 관리되므로 서비스 이름은 |
이러한 차이는 각 서비스의 관리 모델과 리소스 계층 구조를 반영한다. 예를 들어, S3는 글로벌 네임스페이스를 가지므로 ARN에서 리전과 계정 ID를 생략할 수 있는 반면, IAM은 AWS 계정에 완전히 종속된 글로벌 서비스이다. EC2와 VPC 리소스는 특정 리전에 고정되므로 ARN에 리전 정보가 반드시 포함되어야 한다. 서비스별 ARN 패턴을 정확히 이해하는 것은 IAM 정책을 작성하거나 AWS CLI, SDK를 통해 리소스를 조작할 때 필수적이다.
4.1. S3, IAM, Lambda
4.1. S3, IAM, Lambda
S3 버킷의 ARN은 arn:aws:s3:::bucket_name 형식을 따릅니다. 객체 키를 포함할 경우 arn:aws:s3:::bucket_name/key_name과 같이 표현합니다. S3 ARN은 버킷 정책이나 IAM 정책에서 특정 버킷이나 객체에 대한 접근 권한을 부여하거나 제한하는 데 광범위하게 사용됩니다. 특히 교차 계정 접근이나 세분화된 권한 설정 시 필수적입니다.
IAM 자체의 리소스, 예를 들어 사용자, 그룹, 역할, 정책을 식별하는 데 ARN이 사용됩니다. IAM 사용자 ARN은 arn:aws:iam::account-id:user/user-name 패턴을 갖습니다. IAM 역할 ARN은 신뢰 정책이나 권한 정책에서 해당 역할을 가정할 수 있는 주체를 지정할 때 핵심 요소로 작동합니다. IAM 정책 문서 내에서는 Resource 필드에 ARN을 명시하여 정책이 적용될 대상을 한정합니다.
AWS Lambda 함수의 ARN은 arn:aws:lambda:region:account-id:function:function-name 구조를 가집니다. 별칭이나 특정 버전을 지정하려면 function:function-name:alias_or_version 형식으로 추가합니다. 이 ARN은 Amazon API Gateway의 통합 대상으로 지정하거나, Amazon EventBridge 규칙의 타겟으로 설정하거나, 다른 서비스가 Lambda 함수를 호출할 수 있도록 권한을 부여할 때 필요합니다. Lambda 함수의 실행 역할 정책에서도 자신의 ARN이나 관련 리소스(예: 계층)의 ARN이 참조됩니다.
4.2. EC2, RDS, VPC
4.2. EC2, RDS, VPC
EC2 인스턴스, EBS 볼륨, 보안 그룹 등의 ARN은 리전과 계정 ID를 명시적으로 포함하는 경우가 많습니다. 일반적인 EC2 인스턴스의 ARN 형식은 arn:aws:ec2:<region>:<account-id>:instance/<instance-id>입니다. VPC, 서브넷, 라우팅 테이블과 같은 네트워킹 리소스도 유사한 패턴을 따르며, 리전 의존성이 강합니다. 일부 글로벌 서비스(예: IAM)와 달리, 대부분의 EC2 리소스 ARN은 특정 리전을 지정해야 정상적으로 동작합니다.
RDS의 ARN 구조는 데이터베이스 엔진 유형(예: MySQL, PostgreSQL)과 무관하게 일관된 패턴을 가집니다. RDS 데이터베이스 인스턴스의 ARN은 arn:aws:rds:<region>:<account-id>:db:<db-instance-identifier> 형식입니다. RDS 클러스터(예: Aurora)의 경우 cluster: 리소스 유형을 사용합니다. RDS 스냅샷, 파라미터 그룹, 옵션 그룹 등의 보조 리소스도 각각 snapshot:, pg:, og:와 같은 고유한 리소스 식별자를 가집니다.
VPC 리소스의 ARN은 다른 서비스와의 통합 시 중요합니다. VPC 자체의 ARN은 arn:aws:ec2:<region>:<account-id>:vpc/<vpc-id>입니다. VPC 피어링 연결, 인터넷 게이트웨이, NAT 게이트웨이 등도 모두 고유한 ARN을 가지며, 이러한 ARN은 IAM 정책에서 네트워크 리소스에 대한 세밀한 접근 제어를 정의하거나, CloudFormation 및 Terraform과 같은 인프라 관리 도구에서 리소스를 참조할 때 사용됩니다. VPC 엔드포인트 서비스와 연결된 리소스 정책에서도 ARN이 주요 식별자로 활용됩니다.
서비스 | 리소스 유형 예시 | ARN 패턴 예시 (자리 표시자 사용) |
|---|---|---|
EC2 | 인스턴스 |
|
EC2 | 보안 그룹 |
|
EC2 | 볼륨 |
|
RDS | DB 인스턴스 |
|
RDS | DB 클러스터 |
|
VPC | VPC |
|
VPC | 서브넷 |
|
5. ARN 관리 및 모범 사례
5. ARN 관리 및 모범 사례
효율적이고 안전한 AWS 환경 운영을 위해서는 ARN 관리에 대한 명확한 전략과 모범 사례를 따르는 것이 중요하다. 이는 자원 추적성을 높이고, 보안 위험을 줄이며, 권한 관리를 단순화하는 데 기여한다.
자원에 일관된 명명 규칙을 적용하는 것은 관리의 핵심이다. 팀 또는 프로젝트명, 환경(예: dev, prod), 리전, 자원 유형을 포함하는 체계적인 이름을 부여하면 ARN을 통한 식별과 필터링이 용이해진다. 예를 들어, arn:aws:s3:::finance-team-prod-us-east-1-data-bucket과 같은 ARN은 소유 팀, 환경, 리전, 용도를 명확히 전달한다. 이러한 일관성은 특히 대규모 AWS 계정에서 IAM 정책을 작성하거나 CloudTrail 로그를 분석할 때 큰 도움이 된다.
보안 측면에서는 최소 권한 원칙을 ARN 수준에서 적용해야 한다. IAM 정책을 정의할 때는 와일드카드(*) 사용을 최소화하고, 가능한 한 구체적인 ARN을 지정하여 권한의 범위를 제한한다. 예를 들어, 모든 S3 버킷이 아닌 특정 버킷에 대한 액세스만 허용하도록 정책을 작성한다. 또한, 정기적으로 IAM Access Analyzer와 같은 도구를 활용해 사용되지 않는 권한이나 과도하게 부여된 권한을 검토하고 정리하는 것이 좋다. ARN 기반의 태그 정책을 활용하면, 비용 추적과 함께 보안 및 규정 준수 요구사항을 충족시키는 데도 유용하다.
모범 사례 | 설명 | 주요 이점 |
|---|---|---|
일관된 명명 규칙 | 팀, 환경, 리전, 자원 유형을 조합한 체계적 이름 사용 | 자원 식별 용이, 자동화 지원, 오류 감소 |
최소 권한 원칙 | IAM 정책에서 구체적인 ARN 지정, 와일드카드 최소화 | 보안 위험 감소, 무단 접근 방지 |
정기적 감사 | 미사용 권한 및 광범위한 정책 주기적 검토 | 권한 부패 방지, 규정 준수 유지 |
태그 활용 | ARN과 연계된 태그를 통한 자원 분류 및 정책 적용 | 비용 할당, 운영 관리 효율화 |
5.1. 명명 규칙과 일관성
5.1. 명명 규칙과 일관성
AWS 리소스에 일관된 이름을 부여하는 것은 ARN 관리의 기초가 된다. 명확한 명명 규칙을 수립하면 리소스를 식별하고 소유자를 파악하며, IAM 정책을 작성할 때 복잡성을 줄일 수 있다. 일반적으로 조직명, 환경(예: prod, dev, staging), AWS 리전, 서비스명, 리소스의 목적이나 기능을 조합하여 체계적으로 구성한다.
일관된 명명 규칙을 적용하면 여러 가지 운영상의 이점을 얻을 수 있다. 자동화 스크립트나 인프라스트럭처 코드에서 리소스를 보다 쉽게 필터링하고 참조할 수 있다. 또한, 클라우드포메이션 스택이나 테라폼 모듈을 통해 리소스를 생성할 때 일관된 태깅과 결합하면 비용 추적과 리소스 관리 효율성을 크게 향상시킨다.
효과적인 명명 규칙을 설계할 때는 다음 원칙을 고려하는 것이 좋다.
고려 사항 | 설명 | 예시 |
|---|---|---|
소유권 식별 | 리소스를 생성한 팀이나 프로젝트를 식별할 수 있어야 한다. |
|
환경 구분 | 개발, 스테이징, 프로덕션 환경을 명확히 구분해야 한다. |
|
리전 정보 | 글로벌 서비스가 아닌 경우, 리전 정보를 포함하면 유용할 수 있다. |
|
리소스 유형 | 리소스의 종류를 짧은 약어로 나타낸다. |
|
기능/역할 | 리소스의 주요 목적이나 역할을 설명한다. |
|
이러한 규칙은 팀 또는 조직 전체에 문서화되어 공유되고 준수되어야 그 효과를 발휘한다. 규칙을 지키지 않은 리소스는 추후 관리 부담과 보안 위험을 초래할 수 있다[5]. 따라서 AWS Config나 타사 관리 도구를 활용하여 명명 규칙 준수 여부를 지속적으로 모니터링하고 검증하는 절차를 마련하는 것이 바람직하다.
5.2. 보안 및 최소 권한 원칙
5.2. 보안 및 최소 권한 원칙
AWS 리소스에 대한 접근을 제어할 때, 최소 권한 원칙을 준수하는 것은 보안 태세를 강화하는 핵심 요소이다. 이 원칙은 사용자, 역할, 애플리케이션이 자신의 작업을 수행하는 데 필요한 최소한의 권한만 부여받아야 한다는 개념이다. ARN은 이 원칙을 실천하는 데 필수적인 도구로, 정책 문서 내에서 특정 리소스를 정밀하게 지정할 수 있게 해준다. 광범위한 와일드카드(*) 사용을 지양하고, 가능한 한 구체적인 ARN을 사용하여 권한 범위를 제한해야 한다[6].
IAM 정책을 설계할 때는 리소스 ARN 필드를 최대한 활용하여 권한의 대상을 명확히 해야 한다. 서비스 전체(arn:aws:s3:::*)나 계정 내 모든 리소스(arn:aws:s3:::)에 대한 접근을 허용하는 정책은 심각한 보안 위험을 초래할 수 있다. 대신, 특정 버킷, 특정 람다(Lambda) 함수 버전, 특정 EC2 인스턴스와 같이 작업에 필요한 정확한 리소스를 ARN으로 열거하는 것이 바람직하다. 이 접근 방식은 권한 상승 또는 의도하지 않은 데이터 유출 가능성을 크게 줄인다.
정기적인 IAM 정책 감사와 ARN 검토는 지속적인 보안 관리의 일환이 된다. 사용되지 않는 권한이나 과도하게 넓은 범위의 ARN 지정을 발견하면 즉시 정책을 수정해야 한다. 또한, 조건(Condition) 키와 ARN을 결합하여 추가적인 보안 계층을 적용할 수 있다[7]. 이러한 세분화된 제어는 ARN의 정확한 지정과 함께 작동하여 AWS 환경의 공격 표면을 최소화한다.
6. ARN과 관련된 API 및 도구
6. ARN과 관련된 API 및 도구
AWS는 ARN을 생성, 파싱, 검증하고 ARN을 활용한 작업을 수행하기 위한 다양한 API와 CLI 도구, SDK를 제공한다. 이러한 도구들은 리소스를 정확하게 식별하고 안전하게 관리하는 데 필수적이다.
주요 AWS CLI 명령어 대부분은 --arn 파라미터를 지원하거나 출력에 ARN을 포함한다. 예를 들어, IAM 역할 정보를 조회하는 aws iam get-role 명령은 응답에 해당 역할의 ARN을 반환한다. 또한, AWS SDK (예: boto3 for Python, AWS SDK for Java)는 ARN 문자열을 처리하는 유틸리티 함수를 제공하여 프로그래밍 방식으로 ARN을 구성하거나 분해할 수 있게 한다.
특정 서비스는 ARN과 직접적으로 연관된 전용 API를 가지고 있다. AWS Security Token Service(STS)의 AssumeRole API는 역할 ARN을 필수 파라미터로 받아 임시 보안 자격 증명을 발급한다. AWS Lambda는 AddPermission API를 통해 다른 AWS 리소스(예: Amazon S3 버킷, Amazon CloudWatch Events)가 함수를 호출할 수 있도록 허용하는 권한을 부여할 때, 호출자 또는 원본 리소스를 ARN으로 지정한다.
도구/API 범주 | 주요 예시 | ARN 관련 기능 |
|---|---|---|
AWS 관리 콘솔 | IAM 정책 편집기, 리소스 탐색기 | ARN을 시각적으로 선택하거나 정책 문서에 자동 입력 |
AWS CLI |
| 명령어 파라미터로 ARN 지정, 조회 결과에 ARN 출력 |
AWS SDK | boto3, AWS SDK for JavaScript | ARN 문자열 생성/파싱 헬퍼, 서비스별 API 호출 시 ARN 사용 |
서비스별 API | STS: | 작업 수행을 위한 주요 식별자로 ARN 요구 |
또한, AWS CloudFormation과 AWS Cloud Development Kit(CDK) 같은 IaC 도구는 템플릿이나 코드 내에서 리소스의 논리적 ID를 사용하지만, 배포 시 생성된 실제 리소스의 ARN을 참조값으로 출력하거나 다른 리소스의 속성으로 전달할 수 있다. 이는 리소스 간의 의존성과 연결을 구성하는 데 핵심적인 역할을 한다.
7. 문제 해결 및 디버깅
7. 문제 해결 및 디버깅
잘못된 ARN 형식은 AWS 서비스 호출 시 흔히 발생하는 오류 원인이다. 가장 일반적인 오류는 InvalidArnException 또는 MalformedArn으로, ARN 문자열의 구문 오류를 나타낸다. 주요 원인으로는 리전 정보 누락, 서비스 이름 철자 오류, 리소스 경로 구분자(/) 사용 오류, 또는 필수 구성 요소가 생략된 경우가 있다. 예를 들어, IAM 역할 ARN에서 arn:aws:iam::123456789012:role/MyRole과 같이 계정 ID 뒤에 콜론(:)이 두 번 연속되어 있지 않은지 확인해야 한다.
권한 문제는 AccessDenied 오류로 나타나며, 이는 ARN이 정확하더라도 요청하는 주체(IAM 사용자 또는 IAM 역할)에게 해당 리소스에 대한 필요한 권한이 부여되지 않았을 때 발생한다. 문제 진단을 위해 AWS CloudTrail 이벤트 로그를 확인하여 실제로 시도된 API 호출과 사용된 ARN을 검토할 수 있다. 또한 IAM 정책 시뮬레이터 도구를 사용하면 특정 주체와 ARN에 대한 권한 부여 결과를 사전에 테스트해 볼 수 있다.
디버깅 시에는 다음 체크리스트를 순차적으로 점검하는 것이 효과적이다.
점검 항목 | 설명 및 예시 |
|---|---|
ARN 구문 검증 | 모든 콜론( |
리전 일치 | 요청을 보내는 리전과 ARN에 지정된 리전(해당되는 경우)이 일치하는지 확인한다. 글로벌 서비스(IAM, Amazon S3)는 리전을 생략한다. |
계정 ID 확인 | ARN의 계정 ID 부분이 리소스를 소유한 실제 AWS 계정 번호와 일치하는지 확인한다. |
리소스 경로 정확성 | 서비스별 리소스 명명 규칙(예: Amazon S3 버킷 이름, AWS Lambda 함수 이름)을 준수하는지 확인한다. |
정책 문서 내 ARN | IAM 정책 JSON 문서 내부의 |
복잡한 교차 계정 접근 또는 AWS STS(Security Token Service)를 통한 임시 자격 증명 사용 시에는, 효과적인 권한을 평가할 때 역할 체인과 정책 상속 관계를 고려해야 한다. 최종적으로 허용되는 권한은 주체의 identity-based 정책, 리소스 기반 정책, 조직의 SCP, 그리고 권한 경계의 교집합이다.
7.1. 잘못된 ARN 오류
7.1. 잘못된 ARN 오류
잘못된 ARN 형식은 AWS 환경에서 자주 발생하는 오류 원인 중 하나이다. 이러한 오류는 주로 IAM 정책 작성, AWS CLI 명령어 실행, AWS SDK를 통한 API 호출 시에 나타난다.
주요 오류 유형과 원인은 다음과 같다.
오류 유형 | 일반적인 원인 | 예시 (잘못된 형식) |
|---|---|---|
구문 오류 | ARN 문자열의 필수 구성 요소 누락 또는 순서 오류 |
|
서비스 이름 오류 | 서비스 코드를 잘못 입력 |
|
리전 불일치 | 리소스가 존재하지 않는 리전을 지정 |
|
계정 ID 오류 | 잘못된 계정 ID 사용 |
|
리소스 경로 오류 | 서비스별 리소스 경로 형식 위반 |
|
이러한 오류를 진단할 때는 먼저 AWS 서비스 문서에서 해당 리소스의 정확한 ARN 형식을 확인하는 것이 중요하다. AWS Management Console에서 리소스의 ARN을 직접 복사하여 참조하는 방법도 유용하다. 또한, IAM 정책 시뮬레이터나 AWS CloudTrail 로그를 활용하면 ARN 관련 권한 문제를 구체적으로 파악할 수 있다. 오류 메시지에 포함된 리소스 식별자를 자세히 검토하면 어느 부분이 틀렸는지 빠르게 찾아낼 수 있다.
7.2. 권한 문제 진단
7.2. 권한 문제 진단
ARN을 사용하는 AWS 환경에서 권한 문제는 일반적인 장애 원인 중 하나이다. 권한 문제를 효과적으로 진단하려면 IAM 정책, 리소스 기반 정책, 그리고 ARN 자체의 정확성을 체계적으로 검토해야 한다.
진단은 일반적으로 다음과 같은 단계로 진행된다. 먼저, 발생한 오류 메시지를 확인한다. AWS 서비스는 종종 "Access Denied" 또는 "UnauthorizedOperation"과 같은 명시적인 오류와 함께, 문제의 ARN이나 요청된 작업을 로그에 기록한다. 다음으로, 해당 오류를 유발한 주체(사용자, 역할, 애플리케이션)가 사용 중인 자격 증명을 확인한다. 이 자격 증명에 첨부된 IAM 정책이 의도한 리소스(ARN)와 작업에 대한 허용(Allow) 명령문을 포함하고 있는지 검토해야 한다. 특히 정책의 Resource 필드에 지정된 ARN이 실제 대상 리소스와 정확히 일치하는지, 와일드카드(*) 사용이 적절한지 확인한다.
진단 단계 | 확인 사항 | 관련 도구/기능 |
|---|---|---|
오류 및 컨텍스트 확인 | 오류 메시지, 요청자, 대상 ARN, 작업, 타임스탬프 | AWS CloudTrail, 서비스 로그 |
정책 일치 평가 | IAM 정책의 | IAM 정책 시뮬레이터, AWS CLI |
정책 적용 범위 검토 | 명시적 거부(Deny) 규칙 존재 여부, 권한 경계 효과 | IAM 콘솔의 정책 시각화 도구 |
리소스 정책 확인 | 각 서비스의 리소스 설정 콘솔 |
더 복잡한 경우, 교차 계정 접근이나 서비스 연동 역할을 사용할 때 문제가 발생한다. 예를 들어, 계정 A의 IAM 역할이 계정 B의 S3 버킷에 접근하려면, 역할의 신뢰 정책과 S3 버킷 정책 양쪽 모두에서 올바른 ARN을 사용해 상호 권한을 부여해야 한다. IAM 정책 시뮬레이터는 특정 자격 증명과 ARN 조합에 대해 정책을 시뮬레이션하여 권한 부여 결과를 예측하는 데 유용한 도구이다. 모든 허용 규칙을 통과했음에도 접근이 거부된다면, 상위 수준의 권한 경계나 서비스 제한 정책(SCP)에 의한 명시적 거부를 의심해 봐야 한다.
