IAM JSON 정책 요소: Resource

IAM JSON 정책 요소: Resource

Resource 요소는 정책 문이 적용되는 객체(들)를 지정해요. 문은 Resource나 NotResource 요소를 반드시 포함해야 해요. 리소스는 ARN으로 지정한다는 점이 핵심이에요.

출처: 문서

본문

IAM 정책 문의 Resource 요소는 그 문이 적용되는 객체(들)를 정의해요. 문은 Resource나 NotResource 요소를 반드시 포함해야 해요.

리소스는 Amazon 리소스 이름(ARN)으로 지정해요. ARN의 형식은 AWS 서비스와 가리키는 특정 리소스에 따라 달라져요. ARN 형식은 다양하지만 리소스를 식별할 때는 항상 ARN을 사용해요. ARN 형식에 대한 자세한 내용은 IAM ARN을 참고하고, 리소스 지정 방법은 정책을 작성할 서비스의 문서를 참고하세요.

Note — 일부 AWS 서비스는 개별 리소스에 대한 동작을 지정하는 것을 허용하지 않아요. 이런 경우 Action이나 NotAction 요소에 나열한 어떤 동작이든 그 서비스의 모든 리소스에 적용돼요. 이때 Resource 요소에 와일드카드 문자(*)를 사용해요.

다음 예시는 특정 Amazon SQS 큐를 가리켜요.

"Resource": "arn:aws:sqs:us-east-2:account-ID-without-hyphens:queue1"

다음 예시는 AWS 계정의 Bob이라는 IAM 사용자를 가리켜요.

Note — Resource 요소에서 IAM 사용자 이름은 대소문자를 구분해요.

"Resource": "arn:aws:iam::account-ID-without-hyphens:user/Bob"

리소스 ARN에서 와일드카드 사용

ARN의 개별 세그먼트(콜론으로 구분된 부분) 안에서 와일드카드 문자(*와 ?)를 사용할 수 있어요.

  • 모든 문자 조합(*)
  • 단일 문자(?)

각 세그먼트에 여러 * 또는 ? 문자를 사용할 수 있어요. 리소스 ARN 세그먼트의 마지막 문자인 * 와일드카드는 콜론 경계를 넘어 확장될 수 있어요. 와일드카드(*와 ?)는 콜론으로 구분된 ARN 세그먼트 안에서 사용할 것을 권장해요.

Note — AWS 제품을 식별하는 service 세그먼트에는 와일드카드를 사용할 수 없어요. ARN 세그먼트에 대한 자세한 내용은 Amazon 리소스 이름(ARN)으로 AWS 리소스 식별을 참고하세요.

다음 예시는 경로가 /accounting인 모든 IAM 사용자를 가리켜요.

"Resource": "arn:aws:iam::account-ID-without-hyphens:user/accounting/*"

다음 예시는 특정 Amazon S3 버킷 안의 모든 항목을 가리켜요.

"Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*"

별표(*) 문자는 세그먼트 안의 모든 것을 대체하도록 확장될 수 있어요. 여기에는 특정 서비스 네임스페이스 안에서 구분자로 보일 수 있는 슬래시(/) 같은 문자도 포함돼요. 예를 들어 다음 Amazon S3 ARN을 생각해 보세요. 같은 와일드카드 확장 논리가 모든 서비스에 적용돼요.

"Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*/test/*"

ARN의 와일드카드는 나열된 첫 번째 객체뿐 아니라 버킷의 다음 모든 객체에 적용돼요.

amzn-s3-demo-bucket/1/test/object.jpg
amzn-s3-demo-bucket/1/2/test/object.jpg
amzn-s3-demo-bucket/1/2/test/3/object.jpg
amzn-s3-demo-bucket/1/2/3/test/4/object.jpg
amzn-s3-demo-bucket/1///test///object.jpg
amzn-s3-demo-bucket/1/test/.jpg
amzn-s3-demo-bucket//test/object.jpg
amzn-s3-demo-bucket/1/test/

위 목록의 마지막 두 객체를 생각해 보세요. Amazon S3 객체 이름은 일반적인 구분자 슬래시(/) 문자로 시작하거나 끝날 수 있어요. /는 구분자로 동작하지만 이 문자가 리소스 ARN 안에 사용될 때 특별한 의미는 없어요. 다른 유효한 문자와 똑같이 취급돼요. ARN은 다음 객체는 매칭하지 않아요.

amzn-s3-demo-bucket/1-test/object.jpg
amzn-s3-demo-bucket/test/object.jpg
amzn-s3-demo-bucket/1/2/test.jpg

여러 리소스 지정

Resource 요소에 ARN 배열을 사용해서 여러 리소스를 지정할 수 있어요. 다음 예시는 DynamoDB 테이블 두 개를 가리켜요.

"Resource": [
    "arn:aws:dynamodb:us-east-2:account-ID-without-hyphens:table/books_table",
    "arn:aws:dynamodb:us-east-2:account-ID-without-hyphens:table/magazines_table"
]

리소스 ARN에서 정책 변수 사용

Resource 요소에서 특정 리소스를 식별하는 ARN 부분(즉 ARN의 뒤쪽 부분)에 JSON 정책 변수를 사용할 수 있어요. 예를 들어 {aws:username} 키를 리소스 ARN의 일부로 사용해 현재 사용자 이름이 리소스 이름의 일부로 포함되어야 함을 나타낼 수 있어요. 다음 예시는 Resource 요소에서 {aws:username} 키를 사용하는 방법을 보여 줘요. 이 정책은 현재 사용자 이름과 일치하는 Amazon DynamoDB 테이블에 접근을 허용해요.

{
    "Version":"2012-10-17",
    "Statement": {
        "Effect": "Allow",
        "Action": "dynamodb:*",
        "Resource": "arn:aws:dynamodb:us-east-2:111122223333:table/${aws:username}"
    }
}

JSON 정책 변수에 대한 자세한 내용은 IAM 정책 요소: 변수와 태그를 참고하세요.

더 알아보기 (Learn more)