Amazon 리소스 이름(ARN)으로 AWS 리소스 식별하기

Amazon 리소스 이름(ARN)으로 AWS 리소스 식별하기

IAM 정책이나 API 호출에서 특정 리소스를 정확히 가리킬 때는 ARN(Amazon 리소스 이름)을 써요. ARN의 각 부분이 무엇을 뜻하는지, 와일드카드와 경로(path)를 어떻게 쓸 수 있는지 이 페이지에서 정리해 줘요.

출처: 문서

본문

Amazon 리소스 이름(ARN)은 AWS 리소스를 고유하게 식별해요. IAM 정책, Amazon Relational Database Service(Amazon RDS) 태그, API 호출처럼 AWS 전체에서 리소스를 명확하게 지정해야 할 때 ARN이 필요해요. ARN은 다른 식별 정보처럼 신중하게 쓰고 공유해야 하지만, 비밀·민감·기밀 정보로 취급되지는 않아요.

ARN 형식

다음은 ARN의 일반적인 형식이에요. 구체적인 형식은 리소스에 따라 달라져요. ARN을 쓸 때는 기울임꼴 텍스트를 리소스별 정보로 바꾸면 돼요. 일부 리소스의 ARN은 리전, 계정 ID, 또는 둘 다를 생략한다는 점도 알아 두세요.

arn:partition:service:region:account-id:resource-id
arn:partition:service:region:account-id:resource-type/resource-id
arn:partition:service:region:account-id:resource-type:resource-id
  • partition — 리소스가 있는 파티션이에요. 파티션은 AWS 리전의 그룹이고, 각 AWS 계정은 하나의 파티션에 속해요. 지원되는 파티션은 다음과 같아요.
    • aws — AWS 리전
    • aws-cn — 중국 리전
    • aws-us-gov — AWS GovCloud (US) 리전
  • service — AWS 제품을 식별하는 서비스 네임스페이스예요.
  • region — 리전 코드예요. 예를 들어 us-east-2는 US East (Ohio)를 뜻해요. 리전 코드 목록은 AWS 일반 참조의 지역 엔드포인트를 참고하세요.
  • account-id — 리소스를 소유한 AWS 계정의 ID로, 하이픈 없이 써요. 예: 123456789012.
  • resource-type — 리소스 타입이에요. 예를 들어 가상 프라이빗 클라우드(VPC)는 vpc예요.
  • resource-id — 리소스 식별자예요. 리소스 이름, 리소스 ID, 또는 리소스 경로일 수 있어요. 일부 리소스 식별자는 부모 리소스(sub-resource-type/parent-resource/sub-resource)나 버전 같은 한정자(resource-type:resource-name:qualifier)를 포함하기도 해요.

예시

  • IAM 사용자: arn:aws:iam::123456789012:user/john
  • SNS 주제: arn:aws:sns:us-east-1:123456789012:example-sns-topic-name
  • VPC: arn:aws:ec2:us-east-1:123456789012:vpc/vpc-0e9801d129EXAMPLE

리소스의 ARN 형식 찾기

ARN의 정확한 형식은 서비스와 리소스 타입에 따라 달라져요. 일부 리소스 ARN은 경로, 변수, 와일드카드를 포함할 수 있어요. 특정 AWS 리소스의 ARN 형식을 찾으려면 Service Authorization Reference를 열고 해당 서비스 페이지로 이동한 뒤 리소스 타입(resource types) 테이블로 가면 돼요.

ARN의 경로

리소스 ARN은 경로를 포함할 수 있어요. 예를 들어 Amazon S3에서 리소스 식별자는 슬래시(/)로 경로를 만드는 객체 이름이에요. 마찬가지로 IAM 사용자 이름과 그룹 이름도 경로를 포함할 수 있어요. IAM 경로에는 영숫자 문자와 다음 문자만 허용돼요: 슬래시(/), 더하기(+), 등호(=), 쉼표(,), 마침표(.), 골뱅이(@), 밑줄(_), 하이픈(-).

경로에서 와일드카드 사용

경로에는 별표(*) 와일드카드를 쓸 수 있어요. 일부 정책 요소는 와일드카드를 허용하지만 다른 요소는 허용하지 않아요. Resource나 NotResource 요소에는 와일드카드를 쓸 수 있지만 Principal이나 NotPrincipal 요소에는 쓸 수 없어요. 자세한 내용은 IAM JSON 정책 참조를 참고하세요.

계정 123456789012의 모든 역할을 뜻하려면 아래처럼 role/*을 쓸 수 있어요.

arn:aws:iam::123456789012:role/*

리소스 이름 끝에 와일드카드를 쓸 수도 있어요. 예를 들어 service로 시작하고 service-role1, service-test처럼 뒤가 다른 역할을 전부 뜻하려면 service-*을 쓸 수 있어요.

arn:aws:iam::123456789012:role/service-*

다음 예시는 리소스 이름에 경로가 포함된 Amazon S3 버킷 객체의 ARN이에요. arn:aws:s3:::amzn-s3-demo-bucket/*은 접두사와 무관하게 그 버킷의 모든 객체를 뜻하고, arn:aws:s3:::amzn-s3-demo-bucket/Development/*은 /Development/ 접두사 안에서 만들어진 모든 객체를 뜻해요.

ARN에서 한 문자를 지정하는 ? 와일드카드도 쓸 수 있어요. 예를 들어 amzn-s3-demo-bucket이라는 S3 버킷에서 4자로 시작하고 -test로 끝나는 모든 폴더를 뜻할 때 아래 ARN을 쓸 수 있어요. 매칭되는 폴더로는 1234-test, 2024-test, a100-test 등이 있어요.

arn:aws:s3:::amzn-s3-demo-bucket/????-test

콜론(:)으로 구분된 ARN의 서로 다른 섹션에도 와일드카드를 쓸 수 있어요. 아래 예시는 계정 123456789012의 모든 리전에 있는 모든 Amazon Q 애플리케이션과 애플리케이션 안의 리소스를 매칭할 때 와일드카드 두 개를 사용한 거예요.

arn:aws:qbusiness:*:123456789012:*

마찬가지로 아래 예시는 계정 123456789012의 모든 리전에 있는 모든 Amazon VPC를 매칭해요.

arn:aws:ec2:*:123456789012:vpc/*

아래 예시는 계정 123456789012의 모든 리전에 있는 모든 Amazon EBS 볼륨을 매칭해요.

arn:aws:ec2:*:123456789012:volume/*

ARN 내 와일드카드 사용 제한

리소스 타입을 지정하는 ARN 부분에는 와일드카드를 쓸 수 없어요. 리소스 타입 안에 와일드카드가 있는 아래 ARN은 유효하지 않아요.

arn:aws:lambda:us-east-2:123456789012:functi*:my-function <== not allowed

Note — ID 기반 정책에서 표준 6개 필드보다 적은 불완전한 ARN을 지정하면, AWS가 누락된 모든 필드에 와일드카드 문자(*)를 추가해 ARN을 자동으로 완성해요. 예를 들어 arn:aws:sqs를 지정하면 arn:aws:sqs:*:*:*와 같아져서 모든 리전·계정의 모든 Amazon SQS 리소스에 접근 권한을 부여해요. 다만 AWS STS AssumeRole, AssumeRoleWithWebIdentity, AssumeRoleWithSAML 요청에 전달하는 세션 정책은 불완전한 ARN을 지원하지 않아요. 세션 정책에서 불완전한 ARN을 쓰면 MalformedPolicyDocumentException 오류가 발생해요.

접두사 ARN에는 와일드카드를 쓸 수 없고, ARN의 파티션 섹션에도 와일드카드를 쓸 수 없어요.

arn:aws:redshift:us-east-1:123456789012:? <== not allowed

더 알아보기 (Learn more)