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 STSAssumeRole,AssumeRoleWithWebIdentity,AssumeRoleWithSAML요청에 전달하는 세션 정책은 불완전한 ARN을 지원하지 않아요. 세션 정책에서 불완전한 ARN을 쓰면MalformedPolicyDocumentException오류가 발생해요.
접두사 ARN에는 와일드카드를 쓸 수 없고, ARN의 파티션 섹션에도 와일드카드를 쓸 수 없어요.
arn:aws:redshift:us-east-1:123456789012:? <== not allowed