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 | ポリシーの処理に使用する言語構文ルールを指定します。 |
|
Statement | ポリシー要素のコンテナとして機能します。SCP には複数のステートメントを含めることができます。 | Allow , Deny |
Statement ID (Sid) | (オプション) ステートメントにわかりやすい名前を付けます。 | Allow , Deny |
[Effect] (効果) | SCP ステートメントがプリンシパルおよびアカウント内の IAM ユーザーとロールへのアクセスを許可するか拒否するかを定義します。 | Allow , Deny |
SCP が許可あるいは拒否する AWS のサービスおよびアクションを指定します。 |
|
|
SCP から除外される AWS のサービスおよびアクションを指定します。 |
|
|
リソース | 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