IAM JSON ポリシー要素Resource
IAM ポリシーステートメントの Resource
要素では、そのステートメントが適用されるオブジェクトを 1 つ以上定義します。ステートメントには、Resource
または NotResource
要素を含める必要があります。
Amazon リソースネーム (ARN) を使用してリソースを指定します。ARN の形式は、AWS のサービスおよび参照先の特定のリソースによって異なります。ARN 形式はさまざまに異なっても、常に ARN を使用してリソースを識別します。ARN の形式についての詳細は、IAM ARNを参照してください。リソースの指定方法についての情報は、お客様が記述しているステートメントを適用するリソースのサービスに関するドキュメントを参照してください。
注記
AWS のサービスによっては、個々のリソースに対してアクションを指定できるものもあります。こうしたサービスでは、Action
要素または NotAction
要素にアクションを指定すると、アクションがそのサービスのすべてのリソースに適用されます。この場合、Resource
要素にはワイルドカード文字 (*
) を使用します。
以下の例は、特定の Amazon SQS キューを示しています。
"Resource": "arn:aws:sqs:us-east-2:
account-ID-without-hyphens
:queue1"
以下の例は、AWS アカウント内の Bob
という IAM ユーザーを示しています。
注記
Resource
要素では、IAM ユーザー名の大文字と小文字が区別されます。
"Resource": "arn:aws:iam::
account-ID-without-hyphens
:user/Bob"
リソース ARN でのワイルドカードの使用
ARN の個々のセグメント (コロンで区切られている部分) 内にワイルドカード文字 (*
と ?
) を使用して、以下のものを表すことができます。
-
文字を任意に組み合わせたもの (
*
) -
任意の 1 文字 (
?
)
各セグメントで複数の *
または ?
文字を使用できます。*
ワイルドカードがリソース ARN セグメントの最後の文字である場合は、コロンの境界を越えて一致するように拡張できます。コロンで区切られた ARN セグメント内ではワイルドカード (*
と ?
) を使用することをお勧めします。
注記
AWS 製品を識別するためにサービスセグメントでワイルドカードを使用することはできません。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/
前のリストの最後の 2 つのオブジェクトを考えてみましょう。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
複数のリソースの指定
ARN の配列を使用することで、Resource
要素に複数のリソースを指定できます。以下の例は、2 つの 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 ポリシー変数を使用できます。たとえば、リソース ARN の一部としてキー {aws:username}
を使用することで、現在のユーザー名をリソースの名前の一部として含める必要があることを示すことができます。以下の例は、{aws:username}
要素内での Resource
キーの使用方法を示します。ポリシーは、現在のユーザー名に一致する Amazon DynamoDB テーブルへのアクセスを許可します。
{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": "dynamodb:*", "Resource": "arn:aws:dynamodb:us-east-2:
account-id
:table/${aws:username}" } }
JSON ポリシー変数の詳細については、「IAM ポリシーの要素: 変数とタグ」を参照してください。