SCP 構文 - AWS Organizations

SCP 構文

サービスコントロールポリシー (SCP) は、AWS Identity and Access Management (IAM) アクセス権限ポリシーやリソースベースのポリシー (Amazon S3 バケットポリシーなど) に似た構文を使用します。IAM ポリシーの詳細とその構文については、IAM ユーザーガイドの「IAM ポリシーの概要」を参照してください。

SCP は、JSON のルールに従って構造化されたプレーンテキストファイルです。このトピックで説明されている要素を使用します。

注記

SCP 内のすべての文字は、その上限サイズに対してカウントされます。このガイドの例では、読みやすさを向上させるため、空白文字を追加してフォーマットされた SCP を示します。ただし、ポリシーサイズが上限サイズに近づいている場合は、スペースを節約するために、引用符の外側にあるすべての空白文字 (スペースや改行など) を削除できます。

SCP に関する一般情報については、「サービスコントロールポリシー (SCP)」を参照してください。

要素の概要

次の表には、SCP で使用できるポリシー要素を要約しています。一部のポリシー要素はアクションを拒否する SCP のみで使用できます。[Supported Effects ] (サポートされる効果) の列には、SCP の各ポリシー要素で使用できる効果のタイプが一覧表示されています。

要素 目的 サポートされる効果
Version ポリシーの処理に使用する言語構文ルールを指定します。

Allow, Deny

Statement ポリシー要素のコンテナとして機能します。SCP には複数のステートメントを含めることができます。 Allow, Deny
Statement ID (Sid) (オプション) ステートメントにわかりやすい名前を付けます。 Allow, Deny
[Effect] (効果) SCP ステートメントがプリンシパルおよびアカウント内の IAM ユーザーとロールへのアクセスを許可するか拒否するかを定義します。 Allow, Deny

[アクション]

SCP が許可あるいは拒否する AWS のサービスおよびアクションを指定します。

Allow, Deny

NotAction

SCP から除外される AWS のサービスおよびアクションを指定します。Action 要素の代わりに使用します。

Deny

リソース SCP が適用される AWS リソースを指定します。 Deny
条件 ステートメントを実行するタイミングの条件を指定します。 Deny

次のセクションでは、SCP でポリシー要素がどのように使用されるかについての詳細および例を提供しています。

Version 要素

すべての SCP には、Version値を持つ要素"2012-10-17"が含まれる必要があります。これは、IAM アクセス許可ポリシーの最新バージョンと同じバージョンの値です。

"Version": "2012-10-17",

詳細については、IAM ユーザーガイドの「IAM JSON ポリシー要素: Version」を参照してください。

Statement 要素

SCP は、1 つ以上の Statement 要素で構成されます。ポリシーには Statement キーワードを 1 つだけ含めることができますが、値は、ステートメントの JSON 配列 ([ ] の文字で囲まれる) もあります。

以下の例は、単一の Effect 要素、Action 要素、Resource 要素で構成される単一のステートメントを示しています。

"Statement": { "Effect": "Allow", "Action": "*", "Resource": "*" }

次の例では、1 つの Statement 要素内に、配列リストとして 2 つのステートメントが含まれています。最初のステートメントではすべてのアクションが許可されますが、2 つ目のステートメントではすべての EC2 アクションが拒否されます。結果的に、アカウントの管理者は、Amazon Elastic Compute Cloud (Amazon EC2) 以外のアクセス許可をすべて委譲できます。

"Statement": [ { "Effect": "Allow", "Action": "*", "Resource": "*" }, { "Effect": "Deny", "Action": "ec2:*", "Resource": "*" } ]

詳細については、IAM ユーザーガイドの「IAM JSON ポリシー要素: Statement」を参照してください。

ステートメント ID (Sid) 要素

Sid は、ポリシーステートメントに提供するオプションの識別子です。Sid 値は、ステートメント配列内の各ステートメントに割り当てることができます。次の SCP の例は、Sid ステートメントのサンプルを示しています。

{ "Statement": { "Sid": "AllowsAllActions", "Effect": "Allow", "Action": "*", "Resource": "*" } }

詳細については、IAM ユーザーガイドの「IAM JSON ポリシー要素: ID」を参照してください。

Effect 要素

各ステートメントには必ず Effect を 1 つ含める必要があります。この値は Allow または Deny となります。これは、同じステートメントにリストされたアクションが影響を受けます。

詳細については、IAM ユーザーガイドの「IAM JSON ポリシーの要素: Effect」を参照してください。

"Effect": "Allow"

次の例では、Allow の値を持つ Effect 要素を含むステートメントを持つ SCP を示しています。これにより、アカウントユーザーが Amazon S3 サービスのアクションを実行できるようになります。この例は、許可リスト戦略を使用する組織で役立ちます (デフォルトの FullAWSAccess ポリシーがすべてデタッチされているため、デフォルトでアクセス許可は暗黙的に拒否されます)。その結果、このステートメントでは、アタッチされているすべてのアカウントに対する Amazon S3 のアクセスが許可されます

{ "Statement": { "Effect": "Allow", "Action": "s3:*", "Resource": "*" } }

このステートメントは IAM アクセス許可ポリシーに同じ Allow 値を使用しますが、SCP では実際に何かを実行するためのアクセス許可をユーザーに付与しません。代わりに、SCP 組織内の IAM ユーザーと IAM ロールの最大アクセス許可を指定するフィルターとして機能します。前述の例では、アカウント内のユーザーで AdministratorAccess 管理ポリシーがアタッチされている場合でも、SCP は影響を受けるアカウントのすべてのユーザーによるアクションを Amazon S3 アクションのみに制限します。

"Effect": "Deny"

また、Effect 要素に Deny の値があるステートメントでは、SCP の有効時に特定のリソースへのアクセスを制限したり、条件を定義することもできます。

次の例は、拒否ステートメントで条件キーを使用する方法の例を示しています。

{ "Version": "2012-10-17", "Statement": { "Effect": "Deny", "Action": "ec2:RunInstances", "Resource": "arn:aws:ec2:*:*:instance/*", "Condition": { "StringNotEquals": { "ec2:InstanceType": "t2.micro" } } } }

SCP のこのステートメントは、影響が及ぶアカウント (SCP がアカウント自体にアタッチされているか、アカウントがある組織ルートあるいは OU にアタッチされている場合) が、Amazon EC2 インスタンスが t2.micro に設定されていないときに Amazon EC2 インスタンスを起動しないようにするガードレールを設定します。このアクションを許可する IAM ポリシーがアカウントにアタッチされている場合でも、SCP によって作成されたガードレールはこれを許可しません。

Action および NotAction 要素

各ステートメントには、次のいずれかが含まれている必要があります。

  • 許可あるいは拒否ステートメントの Action 要素。

  • 拒否ステートメントのみ (Effect 要素の値が Deny の場合) では、Action または NotAction 要素。

Action あるいは NotAction 要素の値は、ステートメントにより許可または拒否される AWS のサービスとアクションを指定する文字列のリスト (JSON 配列) です。

各文字列は、サービスの略称 (「s3」、「ec2」、「iam」、「organizations」など) で構成されており、すべて小文字で、コロンと、その後にサービスのアクションが続きます。アクションと表記では、大文字と小文字は区別されません。一般的にこれらはすべて、大文字で始まり、残りは小文字の各単語で入力されます。例: "s3:ListAllMyBuckets"

SCP でアスタリスク (*) や疑問符 (?) などのワイルドカード文字を使用することもできます。

  • 名前の一部を共有する複数のアクションを検索するには、アスタリスクをワイルドカードとして使用します。値 "s3:*" は、Amazon S3 サービス内のすべてのアクションを意味します。値 "ec2:Describe*" は「Describe」で始まる EC2 アクションのみに一致します。

  • 単一の文字を検索する場合は疑問符 (?) を使用します。

注記

SCP では、Action または NotAction 要素のワイルドカード文字 (* および ?) は、要素自身、または文字列の末尾にのみ使用できます。文字列の先頭または中間には表示されません。そのため、"servicename:action*" は有効ですが、"servicename:*action""servicename:some*action" はいずれも、SCP で無効です。

AWS Organizations SCP および IAM アクセス許可ポリシーをサポートするすべてのサービスとアクションのリストについては、「Service Authorization Reference」の「Actions, Resources, and Condition Keys for AWS のサービス」を参照してください。

詳細については、IAM ユーザーガイドの「IAM JSON ポリシー要素: Action」および「IAM JSON ポリシー要素: NotAction」を参照してください。

Action 要素の例

次の例では、アカウント管理者に、アカウント内の EC2 インスタンスの許可を記述、開始、停止、終了する権限を委譲することを許可するステートメントを持つ SCP を示しています。これは、許可リストの例であり、デフォルトではアクセス許可を暗黙的に拒否するためにデフォルトの Allow * ポリシーがアタッチされていない場合に便利です。デフォルトの Allow * ポリシーがルート、OU、次のポリシーがアタッチされるアカウントに引き続きアタッチされている場合は、ポリシーの効果はありません。

{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": [ "ec2:DescribeInstances", "ec2:DescribeImages", "ec2:DescribeKeyPairs", "ec2:DescribeSecurityGroups", "ec2:DescribeAvailabilityZones", "ec2:RunInstances", "ec2:TerminateInstances", "ec2:StopInstances", "ec2:StartInstances" ], "Resource": "*" } }

次の例では、アタッチされたアカウントで使用されたくないサービスへのアクセスを拒否する方法を示しています。デフォルトの "Allow *" SCP がすべての OU および root にまだアタッチされていることを前提としています。このポリシーの例では、アタッチされたアカウントのアカウント管理者は、IAM、Amazon EC2、Amazon RDS サービスにアクセス許可を移譲することはできません。他のサービスからのあらゆるアクションは、移譲を拒否する他のポリシーがアタッチされていない限り移譲できます。

{ "Version": "2012-10-17", "Statement": { "Effect": "Deny", "Action": [ "iam:*", "ec2:*", "rds:*" ], "Resource": "*" } }

NotAction 要素の例

次の例は、NotAction 要素を使用して、ポリシーの効果から AWS のサービスを除外する方法を示しています。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "LimitActionsInRegion", "Effect": "Deny", "NotAction": "iam:*", "Resource": "*", "Condition": { "StringNotEquals": { "aws:RequestedRegion": "us-west-1" } } } ] }

このステートメントでは、影響を受けるアカウントは、IAM アクションを使用する場合を除き、指定された AWS リージョン でのアクションの実行に限定されます。

Resource 要素

Effect 要素に Allow の値があるステートメントでは、SCP の Resource 要素の「*」のみを指定することができます。個々のリソースの Amazon リソースネーム (ARN) を指定することはできません。

リソース要素でアスタリスク (*) や疑問符 (?) などのワイルドカード文字を使用することもできます。

  • 名前の一部を共有する複数のアクションを検索するには、アスタリスクをワイルドカードとして使用します。

  • 単一の文字を検索する場合は疑問符 (?) を使用します。

Effect 要素に Deny の値があるステートメントでは、次の例に示すように、個々の ARN を指定することができます

{ "Version": "2012-10-17", "Statement": [ { "Sid": "DenyAccessToAdminRole", "Effect": "Deny", "Action": [ "iam:AttachRolePolicy", "iam:DeleteRole", "iam:DeleteRolePermissionsBoundary", "iam:DeleteRolePolicy", "iam:DetachRolePolicy", "iam:PutRolePermissionsBoundary", "iam:PutRolePolicy", "iam:UpdateAssumeRolePolicy", "iam:UpdateRole", "iam:UpdateRoleDescription" ], "Resource": [ "arn:aws:iam::*:role/role-to-deny" ] } ] }

この SCP は、影響を受けるアカウントの IAM ユーザーとロールが、組織内のすべてのアカウントに作成された共通の管理 IAM ロールに変更を加えることを制限します。

詳細については、IAM ユーザーガイドの「IAM JSON ポリシー要素: Resource」を参照してください。

Condition 要素

SCP の拒否ステートメントに Condition 要素を指定することができます。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "DenyAllOutsideEU", "Effect": "Deny", "NotAction": [ "cloudfront:*", "iam:*", "route53:*", "support:*" ], "Resource": "*", "Condition": { "StringNotEquals": { "aws:RequestedRegion": [ "eu-central-1", "eu-west-1" ] } } } ] }

この SCP は、リストされたサービスを除く、eu-central-1 および eu-west-1 リージョンの外部のすべてのオペレーションへのアクセスを拒否します。

詳細については、「IAM ユーザーガイド」の「IAM JSON ポリシー要素: 条件」を参照してください。

サポートされていない要素

以下の要素は SCP ではサポートされていません。

  • Principal

  • NotPrincipal

  • NotResource