Amazon EC2 API へのアクセスを制御するポリシーの例
IAM ポリシーを使用して、Amazon EC2 を操作するために必要なアクセス許可をユーザーに付与することができます。詳細な手順については「IAM ユーザーガイド」の「IAM ポリシーの作成」を参照してください。
以下の例ではAmazon EC2 を使用するアクセス許可をユーザーに付与するために使用できるポリシーステートメントを示しています。これらのポリシーはAWS CLI または AWS SDK を使用して行われたリクエスト向けに設計されています。次の例ではユーザー入力プレースホルダー
をユーザー自身の情報で置き換えます。
Amazon EC2 コンソールで機能するポリシーの例については、「Amazon EC2 コンソールへのアクセスを制御するポリシーの例」を参照してください。
例: 読み取り専用アクセス
次のポリシーでは名前が Describe
で始まるすべての Amazon EC2 API アクションを使用できるアクセス許可をユーザーに与えます。Resource
エレメントにワイルドカードを使用します。これはユーザーが API アクションですべてのリソースを指定できることを示します。また、API アクションがリソースレベルのアクセス許可をサポートしていない場合も、* ワイルドカードが必要です。どの Amazon EC2 API アクションでどの ARN を使用できるかの詳細については、「Amazon EC2 のアクション、リソース、および条件キー」を参照してください。
デフォルトで API アクションを使用するアクセス許可が拒否されているため、ユーザーには (別のステートメントでアクセス許可が与えられない限り) そのリソースに対してアクションを実行するアクセス許可がありません。
- JSON
-
-
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "ec2:Describe*",
"Resource": "*"
}
]
}
例: 特定のリージョンへのアクセスの制限
次のポリシーではリージョンが 欧州 (フランクフルト) でない限り、すべての Amazon EC2 API アクションを使用するアクセス許可をユーザーに拒否します。これにはグローバル条件キー aws:RequestedRegion
が使用され、このキーはすべての Amazon EC2 API アクションでサポートされています。
- JSON
-
-
{
"Version":"2012-10-17",
"Statement": [
{
"Effect": "Deny",
"Action": "ec2:*",
"Resource": "*",
"Condition": {
"StringNotEquals": {
"aws:RequestedRegion": "eu-central-1"
}
}
}
]
}
または条件キー ec2:Region
を使用することもできます。これはAmazon EC2 に固有のもので、すべての Amazon EC2 API アクションでサポートされています。
- JSON
-
-
{
"Version":"2012-10-17",
"Statement": [
{
"Effect": "Deny",
"Action": "ec2:*",
"Resource": "*",
"Condition": {
"StringNotEquals": {
"ec2:Region": "eu-central-1"
}
}
}
]
}
インスタンスの使用
例: すべてのインスタンスを記述、起動、停止、開始、および終了する
次のポリシーではAction
エレメントで指定された API アクションを使用するアクセス許可をユーザーに与えます。Resource
エレメントでは * ワイルドカードを使用して、ユーザーが API アクションですべてのリソースを指定できることを示します。また、API アクションがリソースレベルのアクセス許可をサポートしていない場合も、* ワイルドカードが必要です。どの Amazon EC2 API アクションでどの ARN を使用できるかの詳細については、「Amazon EC2 のアクション、リソース、および条件キー」を参照してください。
ユーザーはデフォルトで API アクションを使用するアクセス許可を拒否されているため、ユーザーには (別のステートメントでユーザーにそのアクセス許可を与えない限り) その他の API アクションを使用するアクセス許可がありません。
- JSON
-
-
{
"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": "*"
}
]
}
例: すべてのインスタンスを記述し、特定のインスタンスのみを停止、開始、および終了する
次のポリシーでは、ユーザーは「purpose=test
」のリソースタグを使用してすべてのインスタンスを表示し、i-1234567890abcdef0 および i-0598c7d356eba48d7 のインスタンスのみを開始および停止し、us-east-1
リージョンでインスタンスのみを終了できるようにします。
最初のステートメントではResource
エレメントに * ワイルドカードを使用して、ユーザーがそのアクションにすべてのリソースを指定できることを示しています。この場合、すべてのインスタンスをリストできます。また、API アクションがリソースレベルのアクセス許可をサポートしていない場合も、* ワイルドカードが必要です (この場合はec2:DescribeInstances
)。どの Amazon EC2 API アクションでどの ARN を使用できるかの詳細については、「Amazon EC2 のアクション、リソース、および条件キー」を参照してください。
2 番目のステートメントではStopInstances
および StartInstances
アクションに対してリソースレベルのアクセス許可を使用しています。Resource
エレメント内で、ARN によって特定のインスタンスが指定されています。
3 番目のステートメントでは、指定された AWS アカウントに属する us-east-1
リージョン内のすべてのインスタンスを終了する許可がユーザーに与えられます。ただし、インスタンスに "purpose=test"
タグがある場合にのみ該当します。Condition
エレメントはポリシーステートメントの発効条件を指定します。
- JSON
-
-
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "ec2:DescribeInstances",
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"ec2:StopInstances",
"ec2:StartInstances"
],
"Resource": [
"arn:aws:ec2:us-east-1:111122223333
:instance/i-1234567890abcdef0",
"arn:aws:ec2:us-east-1:111122223333
:instance/i-0598c7d356eba48d7"
]
},
{
"Effect": "Allow",
"Action": "ec2:TerminateInstances",
"Resource": "arn:aws:ec2:us-east-1:111122223333
:instance/*",
"Condition": {
"StringEquals": {
"aws:ResourceTag/purpose": "test"
}
}
}
]
}
インスタンスの起動 (RunInstances)
RunInstances API アクションは1 つ以上の オンデマンドインスタンス または 1 つ以上の スポットインスタンス を起動します。RunInstances
は AMI を必要とし、インスタンスを作成します。ユーザーはリクエストでキーペアとセキュリティグループを指定できます。VPC 内に起動するにはサブネットが必要であり、起動されるとネットワークインターフェイスが作成されます。Amazon EBS-backed AMI から起動すると、ボリュームが作成されます。そのため、ユーザーにはこれらの Amazon EC2 リソースを使用するアクセス許可が必要です。ユーザーが RunInstances
に対してオプションのパラメータを指定する必要がある、またはユーザーからパラメータの特定の値を制限するポリシーステートメントを作成できます。
インスタンスの起動に必要なリソースレベルのアクセス許可の詳細については、「Amazon EC2 のアクション、リソース、および条件キー」を参照してください。
デフォルトでは作成したインスタンスを記述、開始、停止、または終了するアクセス許可はユーザーに付与されていません。作成したインスタンスを管理するアクセス許可をユーザーに付与する 1 つの方法としてはインスタンスごとに特定のタグを作成し、そのタグでインスタンスを管理できるようにステートメントを作成します。詳細についてはインスタンスの使用を参照してください。
AMI
次のポリシーでは指定された AMI (ami-9e1670f7
および ami-45cf5c3c
) のみを使用してインスタンスを起動できます。(別のステートメントでユーザーに起動するアクセス許可が付与されない限り) ユーザーはその他の AMI を使用してインスタンスを起動することはできません。
- JSON
-
-
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "ec2:RunInstances",
"Resource": [
"arn:aws:ec2:us-east-1
::image/ami-9e1670f7",
"arn:aws:ec2:us-east-1
::image/ami-45cf5c3c",
"arn:aws:ec2:us-east-1
:111122223333
:instance/*",
"arn:aws:ec2:us-east-1
:111122223333
:volume/*",
"arn:aws:ec2:us-east-1
:111122223333
:key-pair/*",
"arn:aws:ec2:us-east-1
:111122223333
:security-group/*",
"arn:aws:ec2:us-east-1
:111122223333
:subnet/*",
"arn:aws:ec2:us-east-1
:111122223333
:network-interface/*"
]
}
]
}
または次のポリシーを使用すると、ユーザーは Amazon、または特定の信頼できる検証済みのパートナーが所有するすべての AMI からインスタンスを起動できます。最初のステートメントの Condition
エレメントはec2:Owner
が amazon
であるかどうかをテストします。(別のステートメントでユーザーに起動するアクセス許可が付与されない限り) ユーザーはその他の AMI を使用してインスタンスを起動することはできません。
- JSON
-
-
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "ec2:RunInstances",
"Resource": [
"arn:aws:ec2:us-east-1
::image/ami-*"
],
"Condition": {
"StringEquals": {
"ec2:Owner": "amazon"
}
}
},
{
"Effect": "Allow",
"Action": "ec2:RunInstances",
"Resource": [
"arn:aws:ec2:us-east-1
:111122223333
:instance/*",
"arn:aws:ec2:us-east-1
:111122223333
:subnet/*",
"arn:aws:ec2:us-east-1
:111122223333
:volume/*",
"arn:aws:ec2:us-east-1
:111122223333
:network-interface/*",
"arn:aws:ec2:us-east-1
:111122223333
:key-pair/*",
"arn:aws:ec2:us-east-1
:111122223333
:security-group/*"
]
}
]
}
インスタンスタイプ
次のポリシーにより、ユーザーは t2.micro
または t2.small
インスタンスタイプのみを使用してインスタンスを起動できます。これにより、コストを管理することができます。最初のステートメントの Condition
エレメントは ec2:InstanceType
が t2.micro
または t2.small
のどちらであるかをテストするため、ユーザーは大きなインスタンスを起動することはできません。
- JSON
-
-
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "ec2:RunInstances",
"Resource": [
"arn:aws:ec2:us-east-1
:111122223333
:instance/*"
],
"Condition": {
"StringEquals": {
"ec2:InstanceType": ["t2.micro", "t2.small"]
}
}
},
{
"Effect": "Allow",
"Action": "ec2:RunInstances",
"Resource": [
"arn:aws:ec2:us-east-1
::image/ami-*",
"arn:aws:ec2:us-east-1
:111122223333
:subnet/*",
"arn:aws:ec2:us-east-1
:111122223333
:network-interface/*",
"arn:aws:ec2:us-east-1
:111122223333
:volume/*",
"arn:aws:ec2:us-east-1
:111122223333
:key-pair/*",
"arn:aws:ec2:us-east-1
:111122223333
:security-group/*"
]
}
]
}
また、ユーザーが t2.micro
と t2.small
のインスタンスタイプ以外のすべてのインスタンス起動へのアクセスを拒否するポリシーを作成することもできます。
- JSON
-
-
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Deny",
"Action": "ec2:RunInstances",
"Resource": [
"arn:aws:ec2:us-east-1
:111122223333
:instance/*"
],
"Condition": {
"StringNotEquals": {
"ec2:InstanceType": ["t2.micro", "t2.small"]
}
}
},
{
"Effect": "Allow",
"Action": "ec2:RunInstances",
"Resource": [
"arn:aws:ec2:us-east-1
::image/ami-*",
"arn:aws:ec2:us-east-1
:111122223333
:network-interface/*",
"arn:aws:ec2:us-east-1
:111122223333
:instance/*",
"arn:aws:ec2:us-east-1
:111122223333
:subnet/*",
"arn:aws:ec2:us-east-1
:111122223333
:volume/*",
"arn:aws:ec2:us-east-1
:111122223333
:key-pair/*",
"arn:aws:ec2:us-east-1
:111122223333
:security-group/*"
]
}
]
}
サブネット
次のポリシーにより、ユーザーは指定したサブネット subnet-12345678
のみを使用してインスタンスを起動できます。グループはインスタンスを他のサブネットに起動することはできません (他のステートメントがそのような許可をユーザーに与えている場合はその限りではありません)。
- JSON
-
-
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "ec2:RunInstances",
"Resource": [
"arn:aws:ec2:us-east-1
:111122223333
:subnet/subnet-12345678
",
"arn:aws:ec2:us-east-1
:111122223333
:network-interface/*",
"arn:aws:ec2:us-east-1
:111122223333
:instance/*",
"arn:aws:ec2:us-east-1
:111122223333
:volume/*",
"arn:aws:ec2:us-east-1
::image/ami-*",
"arn:aws:ec2:us-east-1
:111122223333
:key-pair/*",
"arn:aws:ec2:us-east-1
:111122223333
:security-group/*"
]
}
]
}
また、ユーザーがその他のサブネットにインスタンスを起動するアクセス許可を拒否するポリシーを作成することもできます。ステートメントではサブネット subnet-12345678
が指定されている場合以外はネットワークインターフェイスの作成を拒否することでこれを実行します。この拒否は他のサブネットへのインスタンスの起動を許可する他のすべてのポリシーよりも優先されます。
- JSON
-
-
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Deny",
"Action": "ec2:RunInstances",
"Resource": [
"arn:aws:ec2:us-east-1
:111122223333
:network-interface/*"
],
"Condition": {
"ArnNotEquals": {
"ec2:Subnet": "arn:aws:ec2:us-east-1
:111122223333
:subnet/subnet-12345678
"
}
}
},
{
"Effect": "Allow",
"Action": "ec2:RunInstances",
"Resource": [
"arn:aws:ec2:us-east-1
::image/ami-*",
"arn:aws:ec2:us-east-1
:111122223333
:network-interface/*",
"arn:aws:ec2:us-east-1
:111122223333
:instance/*",
"arn:aws:ec2:us-east-1
:111122223333
:subnet/*",
"arn:aws:ec2:us-east-1
:111122223333
:volume/*",
"arn:aws:ec2:us-east-1
:111122223333
:key-pair/*",
"arn:aws:ec2:us-east-1
:111122223333
:security-group/*"
]
}
]
}
EBS ボリューム
次のポリシーではインスタンスの EBS ボリュームが暗号化されている場合のみユーザーがインスタンスを起動できます。ユーザーはルートボリュームが暗号化されるように、暗号化されたスナップショットを使用して作成された AMI からインスタンスを起動する必要があります。ユーザーが起動時にインスタンスにアタッチする追加ボリュームも暗号化されている必要があります。
- JSON
-
-
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "ec2:RunInstances",
"Resource": [
"arn:aws:ec2:*:*:volume/*"
],
"Condition": {
"Bool": {
"ec2:Encrypted": "true"
}
}
},
{
"Effect": "Allow",
"Action": "ec2:RunInstances",
"Resource": [
"arn:aws:ec2:*::image/ami-*",
"arn:aws:ec2:*:*:network-interface/*",
"arn:aws:ec2:*:*:instance/*",
"arn:aws:ec2:*:*:subnet/*",
"arn:aws:ec2:*:*:key-pair/*",
"arn:aws:ec2:*:*:security-group/*"
]
}
]
}
インスタンスの作成時にタグを付ける
次のポリシーではユーザーがインスタンスを起動し、作成時にインスタンスにタグ付けすることができます。タグを適用するリソース作成アクションにはユーザーが CreateTags
アクションを使用するアクセス権限を持っていることが必要です。2 番目のステートメントはec2:CreateAction
条件キーを使用し、ユーザーが RunInstances
のコンテキストでのみ、インスタンスに対してのみタグを作成できるようにします。ユーザーは既存のリソースにタグ付けすることができず、RunInstances
リクエストを使用してボリュームにタグ付けすることもできません。
詳細についてはAmazon EC2 リソース作成時にタグ付けするアクセス許可の付与を参照してください。
- JSON
-
-
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ec2:RunInstances"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"ec2:CreateTags"
],
"Resource": "arn:aws:ec2:us-east-1:111122223333
:instance/*",
"Condition": {
"StringEquals": {
"ec2:CreateAction" : "RunInstances"
}
}
}
]
}
インスタンスやボリュームの作成時に特定のタグを付ける
次のポリシーにはaws:RequestTag
および RunInstances
タグを使用して environment=production
により作成されたすべてのインスタンスおよびボリュームへのタグ付けをユーザーに求める purpose=webserver
条件キーが含まれています。ユーザーがこれらのタグを渡さないか、タグをまったく指定しない場合、リクエストは失敗します。
- JSON
-
-
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ec2:RunInstances"
],
"Resource": [
"arn:aws:ec2:us-east-1
::image/*",
"arn:aws:ec2:us-east-1
:111122223333
:subnet/*",
"arn:aws:ec2:us-east-1
:111122223333
:network-interface/*",
"arn:aws:ec2:us-east-1
:111122223333
:security-group/*",
"arn:aws:ec2:us-east-1
:111122223333
:key-pair/*"
]
},
{
"Effect": "Allow",
"Action": [
"ec2:RunInstances"
],
"Resource": [
"arn:aws:ec2:us-east-1
:111122223333
:volume/*",
"arn:aws:ec2:us-east-1
:111122223333
:instance/*"
],
"Condition": {
"StringEquals": {
"aws:RequestTag/environment": "production" ,
"aws:RequestTag/purpose": "webserver"
}
}
},
{
"Effect": "Allow",
"Action": [
"ec2:CreateTags"
],
"Resource": "arn:aws:ec2:us-east-1
:111122223333
:*/*",
"Condition": {
"StringEquals": {
"ec2:CreateAction" : "RunInstances"
}
}
}
]
}
インスタンスやボリュームの作成時に特定のタグを少なくとも 1 つ付ける
次のポリシーはForAnyValue
条件で aws:TagKeys
修飾子を使用して、リクエストで少なくとも 1 つのタグが指定されている必要があり、キー environment
または webserver
が含まれている必要があることを示します。タグはインスタンスとボリュームの両方に適用される必要があります。リクエストでは任意のタグ値を指定できます。
- JSON
-
-
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ec2:RunInstances"
],
"Resource": [
"arn:aws:ec2:us-east-1
::image/*",
"arn:aws:ec2:us-east-1
:111122223333
:subnet/*",
"arn:aws:ec2:us-east-1
:111122223333
:network-interface/*",
"arn:aws:ec2:us-east-1
:111122223333
:security-group/*",
"arn:aws:ec2:us-east-1
:111122223333
:key-pair/*"
]
},
{
"Effect": "Allow",
"Action": [
"ec2:RunInstances"
],
"Resource": [
"arn:aws:ec2:us-east-1
:111122223333
:volume/*",
"arn:aws:ec2:us-east-1
:111122223333
:instance/*"
],
"Condition": {
"ForAnyValue:StringEquals": {
"aws:TagKeys": ["environment","webserver"]
}
}
},
{
"Effect": "Allow",
"Action": [
"ec2:CreateTags"
],
"Resource": "arn:aws:ec2:us-east-1
:111122223333
:*/*",
"Condition": {
"StringEquals": {
"ec2:CreateAction" : "RunInstances"
}
}
}
]
}
インスタンスの作成時にタグを付ける場合は特定のタグを使用してタグ付けする必要がある
次のポリシーではユーザーはリクエストでタグを指定する必要はありませんが、指定する場合は purpose=test
タグを指定する必要があります。他のタグは許可されません。ユーザーはRunInstances
リクエストでタグ付け可能なリソースにタグを適用できます。
- JSON
-
-
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ec2:RunInstances"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"ec2:CreateTags"
],
"Resource": "arn:aws:ec2:us-east-1
:111122223333
:*/*",
"Condition": {
"StringEquals": {
"aws:RequestTag/purpose": "test",
"ec2:CreateAction" : "RunInstances"
},
"ForAllValues:StringEquals": {
"aws:TagKeys": "purpose"
}
}
}
]
}
RunInstances の呼び出しで作成時のタグ付けをユーザーを禁止するには
- JSON
-
-
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowRun",
"Effect": "Allow",
"Action": [
"ec2:RunInstances"
],
"Resource": [
"arn:aws:ec2:us-east-1::image/*",
"arn:aws:ec2:us-east-1:*:subnet/*",
"arn:aws:ec2:us-east-1:*:network-interface/*",
"arn:aws:ec2:us-east-1:*:security-group/*",
"arn:aws:ec2:us-east-1:*:key-pair/*",
"arn:aws:ec2:us-east-1:*:volume/*",
"arn:aws:ec2:us-east-1:*:instance/*",
"arn:aws:ec2:us-east-1:*:spot-instances-request/*"
]
},
{
"Effect": "Deny",
"Action": "ec2:CreateTags",
"Resource": "*"
}
]
}
spot-instances-request の特定のタグのみを許可します。ここで矛盾数 2 が意外な効果を発揮します。通常の状況ではタグを指定しないと非認証になります。spot-instances-request の場合、spot-instances-request タグがないと、このポリシーは評価されないため、タグなしの Spot on Run リクエストが成功します。
次の例で、ユーザーはインスタンスを起動できますが、特定の起動テンプレートを使用する場合に限ります (lt-09477bcd97b0d310e
)。ec2:IsLaunchTemplateResource
条件キーはユーザーが起動テンプレートで指定されたリソースを上書きしないようにします。ステートメントの 2 番目の部分ではユーザーは作成時にインスタンスにタグ付けできます — ステートメントのこの部分は起動テンプレートでタグがインスタンスに対して指定されている場合に必要になります。
- JSON
-
-
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "ec2:RunInstances",
"Resource": "*",
"Condition": {
"ArnLike": {
"ec2:LaunchTemplate": "arn:aws:ec2:us-east-1
:111122223333
:launch-template/lt-09477bcd97b0d310e"
},
"Bool": {
"ec2:IsLaunchTemplateResource": "true"
}
}
},
{
"Effect": "Allow",
"Action": [
"ec2:CreateTags"
],
"Resource": "arn:aws:ec2:us-east-1
:111122223333
:instance/*",
"Condition": {
"StringEquals": {
"ec2:CreateAction" : "RunInstances"
}
}
}
]
}
Elastic GPU
次のポリシーではユーザーはインスタンスを起動させ、インスタンスにアタッチする Elastic GPU を指定できます。ユーザーは任意のリージョンでインスタンスを起動できますが、Elastic GPU をアタッチできるのはその us-east-2
リージョンでの起動中に限られます。
ec2:ElasticGpuType
条件キーはeg1.medium
eg1.large
インスタンスがまたはエラスティック GPU タイプのいずれかを使用することを保証します。
- JSON
-
-
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ec2:RunInstances"
],
"Resource": [
"arn:aws:ec2:*:111122223333
:elastic-gpu/*"
],
"Condition": {
"StringEquals": {
"ec2:Region": "us-east-2",
"ec2:ElasticGpuType": [
"eg1.medium",
"eg1.large"
]
}
}
},
{
"Effect": "Allow",
"Action": "ec2:RunInstances",
"Resource": [
"arn:aws:ec2:*::image/ami-*",
"arn:aws:ec2:*:111122223333
:network-interface/*",
"arn:aws:ec2:*:111122223333
:instance/*",
"arn:aws:ec2:*:111122223333
:subnet/*",
"arn:aws:ec2:*:111122223333
:volume/*",
"arn:aws:ec2:*:111122223333
:key-pair/*",
"arn:aws:ec2:*:111122223333
:security-group/*"
]
}
]
}
起動テンプレート
次の例で、ユーザーはインスタンスを起動できますが、特定の起動テンプレートを使用する場合に限ります (lt-09477bcd97b0d310e
)。ユーザーはRunInstances
アクションでパラメータを指定することで、起動テンプレートのパラメータを上書きできます。
- JSON
-
-
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "ec2:RunInstances",
"Resource": "*",
"Condition": {
"ArnLike": {
"ec2:LaunchTemplate": "arn:aws:ec2:us-east-1
:111122223333
:launch-template/lt-09477bcd97b0d310e"
}
}
}
]
}
この例で、ユーザーは起動テンプレートを使用する場合に限りインスタンスを起動できます。ポリシーでは ec2:IsLaunchTemplateResource
条件キーを使用して、ユーザーが起動テンプレート内の既存の ARN を上書きできないようにします。
- JSON
-
-
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "ec2:RunInstances",
"Resource": "*",
"Condition": {
"ArnLike": {
"ec2:LaunchTemplate": "arn:aws:ec2:us-east-1
:111122223333
:launch-template/*"
},
"Bool": {
"ec2:IsLaunchTemplateResource": "true"
}
}
}
]
}
次のサンプルポリシーによりユーザーはインスタンスを起動できますが、起動テンプレートを使用する場合に限ります。ユーザーはリクエストでサブネットおよびネットワークインターフェイスのパラメータを上書きすることはできません。これらのパラメータは起動テンプレートでのみ指定できます。ステートメントの最初の部分はNotResource 要素を使用して、サブネットやネットワークインターフェイスを除くその他のすべてのリソースを許可します。ステートメントの 2 番目の部分はサブネットおよびネットワークインターフェイスのリソースを許可しますが、これは起動テンプレートから取得された場合に限ります。
- JSON
-
-
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "ec2:RunInstances",
"NotResource": ["arn:aws:ec2:us-east-1
:111122223333
:subnet/*",
"arn:aws:ec2:us-east-1
:111122223333
:network-interface/*" ],
"Condition": {
"ArnLike": {
"ec2:LaunchTemplate": "arn:aws:ec2:us-east-1
:111122223333
:launch-template/*"
}
}
},
{
"Effect": "Allow",
"Action": "ec2:RunInstances",
"Resource": ["arn:aws:ec2:us-east-1
:111122223333
:subnet/*",
"arn:aws:ec2:us-east-1
:111122223333
:network-interface/*" ],
"Condition": {
"ArnLike": {
"ec2:LaunchTemplate": "arn:aws:ec2:us-east-1
:111122223333
:launch-template/*"
},
"Bool": {
"ec2:IsLaunchTemplateResource": "true"
}
}
}
]
}
次の例では起動テンプレートを使用していて、また起動テンプレートにタグがある場合に限り、ユーザーはインスタンスを起動できるようになります Purpose=Webservers
。ユーザーはRunInstances
アクションで起動テンプレートパラメータを上書きすることはできません。
- JSON
-
-
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "ec2:RunInstances",
"NotResource": "arn:aws:ec2:us-east-1
:111122223333
:launch-template/*",
"Condition": {
"ArnLike": {
"ec2:LaunchTemplate": "arn:aws:ec2:us-east-1
:111122223333
:launch-template/*"
},
"Bool": {
"ec2:IsLaunchTemplateResource": "true"
}
}
},
{
"Effect": "Allow",
"Action": "ec2:RunInstances",
"Resource": "arn:aws:ec2:us-east-1
:111122223333
:launch-template/*",
"Condition": {
"StringEquals": {
"aws:ResourceTag/Purpose": "Webservers"
}
}
}
]
}
スポットインスタンス の操作
RunInstances アクションを使用してスポットインスタンスリクエストを作成し、作成時にスポットインスタンスリクエストにタグ付けできます。RunInstances に指定するリソースは spot-instances-request
です。
spot-instances-request
リソースはIAM ポリシーで次のように評価されます。
-
スポットインスタンスリクエストの作成時にタグを付けない場合、Amazon EC2 は RunInstances ステートメント内の spot-instances-request
リソースを評価しません。
-
スポットインスタンスリクエストの作成時にタグを付けると、 RunInstances ステートメント内の spot-instances-request
リソースが、Amazon EC2 により評価されます。
したがって、spot-instances-request
リソースの場合、次のルールが IAM ポリシーに適用されます。
-
RunInstances を使用してスポットインスタンスリクエストを作成し、その際リクエストにタグを付けない場合はspot-instances-request
リソースを明示的に許可しなくても、その呼び出しは成功します。
-
RunInstances を使用してスポットインスタンスリクエストを作成する際に、そのリクエストにタグを付ける場合にはRunInstances の許可ステートメントに spot-instances-request
リソースを含める必要があります。これがない場合は呼び出しが失敗します。
-
RunInstances を使用してスポットインスタンスリクエストを作成し、作成時にタグを付ける場合はCreateTags 許可ステートメントに spot-instances-request
リソースまたは *
ワイルドカードを指定する必要があります。指定しないと、呼び出しは失敗します。
スポットインスタンス はRunInstances または RequestSpotInstances を使用してリクエストできます。次の例の IAM ポリシーはRunInstances を使用して スポットインスタンス をリクエストする場合にのみ適用されます。
例: RunInstances を使用して スポットインスタンス をリクエストする
次のポリシーではRunInstances アクションを使用して スポットインスタンス をリクエストすることをユーザーに許可します。spot-instances-request
リソースはRunInstances によって作成されます。このリソースは スポットインスタンス をリクエストします。
RunInstances を使用してスポットインスタンスリクエストを作成し、作成時にタグを付けない場合はspot-instances-request
リストから Resource
を省略できます。これはスポットインスタンスリクエストの作成時にタグを付けない場合、Amazon EC2 は RunInstances ステートメント内の spot-instances-request
リソースを評価しないためです。
- JSON
-
-
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowRun",
"Effect": "Allow",
"Action": [
"ec2:RunInstances"
],
"Resource": [
"arn:aws:ec2:us-east-1::image/*",
"arn:aws:ec2:us-east-1:*:subnet/*",
"arn:aws:ec2:us-east-1:*:network-interface/*",
"arn:aws:ec2:us-east-1:*:security-group/*",
"arn:aws:ec2:us-east-1:*:key-pair/*",
"arn:aws:ec2:us-east-1:*:volume/*",
"arn:aws:ec2:us-east-1:*:instance/*",
"arn:aws:ec2:us-east-1:*:spot-instances-request/*"
]
}
]
}
サポート対象外 – 例: RunInstances を使用して スポットインスタンス をリクエストするためのアクセス許可をユーザーに拒否する
次のポリシーはspot-instances-request
リソースではサポートされません。
次のポリシーではユーザーに オンデマンドインスタンス を起動するためのアクセス許可を付与しますが、スポットインスタンス をリクエストするためのアクセス許可を拒否します。spot-instances-request
リソースはRunInstances によって作成されます。このリソースは スポットインスタンス をリクエストします。2 番目のステートメントではspot-instances-request
リソースに対する RunInstances アクションを拒否します。ただし、スポットインスタンスリクエストの作成時にタグを付けない場合、Amazon EC2 が RunInstances ステートメントの spot-instances-request
リソースを評価しないため、この条件はサポートされません。
- JSON
-
-
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowRun",
"Effect": "Allow",
"Action": [
"ec2:RunInstances"
],
"Resource": [
"arn:aws:ec2:us-east-1::image/*",
"arn:aws:ec2:us-east-1:*:subnet/*",
"arn:aws:ec2:us-east-1:*:network-interface/*",
"arn:aws:ec2:us-east-1:*:security-group/*",
"arn:aws:ec2:us-east-1:*:key-pair/*",
"arn:aws:ec2:us-east-1:*:volume/*",
"arn:aws:ec2:us-east-1:*:instance/*"
]
},
{
"Sid": "DenySpotInstancesRequestsNOTSUPPORTEDDONOTUSE",
"Effect": "Deny",
"Action": "ec2:RunInstances",
"Resource": "arn:aws:ec2:us-east-1:*:spot-instances-request/*"
}
]
}
例: スポットインスタンスリクエストの作成時にタグを付ける
次のポリシーではインスタンスの起動時に作成されるすべてのリソースにタグを付けることをユーザーに許可します。最初のステートメントでは一覧表示されたリソースの作成を RunInstances に許可します。spot-instances-request
リソースはRunInstances によって作成されます。このリソースは スポットインスタンス をリクエストします。2 番目のステートメントでは*
ワイルドカードを指定し、インスタンスの起動時に作成されるすべてのリソースのタグ付けを許可します。
スポットインスタンスリクエストの作成時にタグを付けると、 RunInstances ステートメント内の spot-instances-request
リソースが、Amazon EC2 により評価されます。したがって、RunInstances アクションで spot-instances-request
リソースを明示的に許可する必要があります。許可しないと、呼び出しは失敗します。
- JSON
-
-
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowRun",
"Effect": "Allow",
"Action": [
"ec2:RunInstances"
],
"Resource": [
"arn:aws:ec2:us-east-1::image/*",
"arn:aws:ec2:us-east-1:*:subnet/*",
"arn:aws:ec2:us-east-1:*:network-interface/*",
"arn:aws:ec2:us-east-1:*:security-group/*",
"arn:aws:ec2:us-east-1:*:key-pair/*",
"arn:aws:ec2:us-east-1:*:volume/*",
"arn:aws:ec2:us-east-1:*:instance/*",
"arn:aws:ec2:us-east-1:*:spot-instances-request/*"
]
},
{
"Sid": "TagResources",
"Effect": "Allow",
"Action": "ec2:CreateTags",
"Resource": "*"
}
]
}
例: スポットインスタンスリクエストの作成時にタグ付けを拒否する
次のポリシーではインスタンスの起動時に作成されるリソースにタグを付けるためのアクセス許可をユーザーに拒否します。
最初のステートメントでは一覧表示されたリソースの作成を RunInstances に許可します。spot-instances-request
リソースはRunInstances によって作成されます。このリソースは スポットインスタンス をリクエストします。2 番目のステートメントでは*
ワイルドカードを指定し、インスタンスの起動時に作成されるすべてのリソースのタグ付けを拒否します。spot-instances-request
リソースまたは他のリソースの作成時にタグを付けた場合、RunInstances の呼び出しは失敗します。
- JSON
-
-
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowRun",
"Effect": "Allow",
"Action": [
"ec2:RunInstances"
],
"Resource": [
"arn:aws:ec2:us-east-1::image/*",
"arn:aws:ec2:us-east-1:*:subnet/*",
"arn:aws:ec2:us-east-1:*:network-interface/*",
"arn:aws:ec2:us-east-1:*:security-group/*",
"arn:aws:ec2:us-east-1:*:key-pair/*",
"arn:aws:ec2:us-east-1:*:volume/*",
"arn:aws:ec2:us-east-1:*:instance/*",
"arn:aws:ec2:us-east-1:*:spot-instances-request/*"
]
},
{
"Sid": "DenyTagResources",
"Effect": "Deny",
"Action": "ec2:CreateTags",
"Resource": "*"
}
]
}
サポート対象外 - 例: スポットインスタンスリクエストに特定のタグを割り当てる場合にのみ、リクエストの作成を許可する
次のポリシーはspot-instances-request
リソースではサポートされません。
次のポリシーはスポットインスタンスリクエストに特定のタグを付ける場合にのみ、リクエストを作成するためのアクセス許可を RunInstances に付与することを想定しています。
最初のステートメントでは一覧表示されたリソースの作成を RunInstances に許可します。
2 番目のステートメントではスポットインスタンスリクエストにタグ environment=production
が付いている場合にのみ、リクエストを作成するためのアクセス許可をユーザーに付与することを想定しています。この条件を RunInstances によって作成された他のリソースに適用する場合、タグを指定しないと、Unauthenticated
エラーが発生します。ただし、スポットインスタンスリクエストにタグを指定しない場合、Amazon EC2 は RunInstances ステートメントの spot-instances-request
リソースを評価しないため、RunInstances がタグなしのスポットインスタンスリクエストを作成します。
environment=production
以外の別のタグを指定すると、Unauthenticated
エラーが発生することに注意してください。これはユーザーがスポットインスタンスリクエストにタグを付けると、Amazon EC2 が RunInstances ステートメントの spot-instances-request
リソースを評価するためです。
- JSON
-
-
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowRun",
"Effect": "Allow",
"Action": [
"ec2:RunInstances"
],
"Resource": [
"arn:aws:ec2:us-east-1::image/*",
"arn:aws:ec2:us-east-1:*:subnet/*",
"arn:aws:ec2:us-east-1:*:network-interface/*",
"arn:aws:ec2:us-east-1:*:security-group/*",
"arn:aws:ec2:us-east-1:*:key-pair/*",
"arn:aws:ec2:us-east-1:*:volume/*",
"arn:aws:ec2:us-east-1:*:instance/*"
]
},
{
"Sid": "RequestSpotInstancesOnlyIfTagIsEnvironmentProductionNOTSUPPORTEDDONOTUSE",
"Effect": "Allow",
"Action": "ec2:RunInstances",
"Resource": "arn:aws:ec2:us-east-1:*:spot-instances-request/*",
"Condition": {
"StringEquals": {
"aws:RequestTag/environment": "production"
}
}
},
{
"Sid": "TagResources",
"Effect": "Allow",
"Action": "ec2:CreateTags",
"Resource": "*"
}
]
}
例: スポットインスタンスリクエストに特定のタグが割り当てられている場合、このリクエストの作成を拒否する
次のポリシーはスポットインスタンスリクエストにタグ environment=production
が付いている場合、このリクエストを作成するためのアクセス許可を RunInstances に拒否します。
最初のステートメントでは一覧表示されたリソースの作成を RunInstances に許可します。
2 番目のステートメントではスポットインスタンスリクエストにタグ environment=production
が付いている場合、このリクエストを作成するためのアクセス許可をユーザーに拒否します。environment=production
をタグとして指定すると、Unauthenticated
エラーが発生します。他のタグを指定するか、タグを指定しないと、スポットインスタンスリクエストが作成されます。
- JSON
-
-
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowRun",
"Effect": "Allow",
"Action": [
"ec2:RunInstances"
],
"Resource": [
"arn:aws:ec2:us-east-1::image/*",
"arn:aws:ec2:us-east-1:*:subnet/*",
"arn:aws:ec2:us-east-1:*:network-interface/*",
"arn:aws:ec2:us-east-1:*:security-group/*",
"arn:aws:ec2:us-east-1:*:key-pair/*",
"arn:aws:ec2:us-east-1:*:volume/*",
"arn:aws:ec2:us-east-1:*:instance/*",
"arn:aws:ec2:us-east-1:*:spot-instances-request/*"
]
},
{
"Sid": "DenySpotInstancesRequests",
"Effect": "Deny",
"Action": "ec2:RunInstances",
"Resource": "arn:aws:ec2:us-east-1:*:spot-instances-request/*",
"Condition": {
"StringEquals": {
"aws:RequestTag/environment": "production"
}
}
},
{
"Sid": "TagResources",
"Effect": "Allow",
"Action": "ec2:CreateTags",
"Resource": "*"
}
]
}
例: リザーブドインスタンス の操作
次のポリシーではアカウントで リザーブドインスタンス を表示、変更、購入するアクセス許可をユーザーに与えます。
個別の リザーブドインスタンス にリソースレベルのアクセス許可を設定することはできません。このポリシーはユーザーがアカウントのすべての リザーブドインスタンス にアクセスできることを意味します。
Resource
要素は * ワイルドカードを使用して、ユーザーがそのアクションにすべてのリソースを指定できることを示しています。この場合、アカウントのすべての リザーブドインスタンス をリストして変更できます。ユーザーはアカウント認証情報を使用して リザーブドインスタンス を購入することもできます。また、API アクションがリソースレベルのアクセス許可をサポートしていない場合も、* ワイルドカードが必要です。
- JSON
-
-
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ec2:DescribeReservedInstances",
"ec2:ModifyReservedInstances",
"ec2:PurchaseReservedInstancesOffering",
"ec2:DescribeAvailabilityZones",
"ec2:DescribeReservedInstancesOfferings"
],
"Resource": "*"
}
]
}
次のコードではアカウント内の リザーブドインスタンス を表示および変更できるようにユーザーに許可しています。新しい リザーブドインスタンス の購入は許可していません。
- JSON
-
-
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ec2:DescribeReservedInstances",
"ec2:ModifyReservedInstances",
"ec2:DescribeAvailabilityZones"
],
"Resource": "*"
}
]
}
例: リソースのタグ付け
次のポリシーではタグにキー CreateTags
および値 environment
が含まれている場合のみ、ユーザーが production
アクションを使用してインスタンスにタグを適用できます。他のタグは許可されず、ユーザーは他のリソースタイプをタグ付けすることはできません。
- JSON
-
-
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ec2:CreateTags"
],
"Resource": "arn:aws:ec2:us-east-1
:111122223333
:instance/*",
"Condition": {
"StringEquals": {
"aws:RequestTag/environment": "production"
}
}
}
]
}
次のポリシーではユーザーは owner
のキーとユーザー名の値を使用したタグが既に適用されているタグ付け可能なリソースにタグ付けできます。加えて、ユーザーはリクエストで anycompany:environment-type
のキーと値 test
または prod
を持つタグを指定する必要があります。ユーザーはリクエストで追加のタグを指定できます。
- JSON
-
-
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ec2:CreateTags"
],
"Resource": "arn:aws:ec2:us-east-1
:111122223333
:*/*",
"Condition": {
"StringEquals": {
"aws:RequestTag/anycompany:environment-type": ["test","prod"],
"aws:ResourceTag/owner": "${aws:username}"
}
}
}
]
}
ユーザーがリソースの特定のタグを指定できるようにする IAM ポリシーを作成できます。例えば、次のポリシーではリクエストで指定されたタグキーが environment
または cost-center
の場合、ユーザーがボリュームのタグを削除できます。タグにはどの値でも指定できますが、指定されたキーのいずれかにタグキーが一致する必要があります。
リソースを削除すると、リソースに関連付けられているすべてのタグも削除されます。タグ付きのリソースを削除する場合、ユーザーは ec2:DeleteTags
アクションを使用するためのアクセス許可は必要ありません。削除アクションを実行するためのアクセス許可のみが必要です。
- JSON
-
-
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "ec2:DeleteTags",
"Resource": "arn:aws:ec2:us-east-1:111122223333
:volume/*",
"Condition": {
"ForAllValues:StringEquals": {
"aws:TagKeys": ["environment","cost-center"]
}
}
}
]
}
このポリシーではリソースが owner
のキーとユーザー名の値で既にタグ付けされている場合のみ、ユーザーが任意のリソースで environment=prod
タグのみ削除できます。ユーザーはリソースの他のタグを削除することはできません。
- JSON
-
-
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ec2:DeleteTags"
],
"Resource": "arn:aws:ec2:us-east-1
:111122223333
:*/*",
"Condition": {
"StringEquals": {
"aws:RequestTag/environment": "prod",
"aws:ResourceTag/owner": "${aws:username}"
},
"ForAllValues:StringEquals": {
"aws:TagKeys": ["environment"]
}
}
}
]
}
例: IAM ロールの使用
次のポリシーではdepartment=test
タグを持つインスタンス対して IAM ロールのアタッチ、置換、デタッチを行うことをユーザーに許可します。IAM ロールの置換またはデタッチには関連 ID が必要であるため、ポリシーでは ec2:DescribeIamInstanceProfileAssociations
アクションを使用するアクセス許可もユーザーに付与します。
ユーザーはロールをインスタンスに渡すために iam:PassRole
アクションを使用するための許可が必要です。
- JSON
-
-
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ec2:AssociateIamInstanceProfile",
"ec2:ReplaceIamInstanceProfileAssociation",
"ec2:DisassociateIamInstanceProfile"
],
"Resource": "arn:aws:ec2:us-east-1:111122223333
:instance/*",
"Condition": {
"StringEquals": {
"aws:ResourceTag/department":"test"
}
}
},
{
"Effect": "Allow",
"Action": "ec2:DescribeIamInstanceProfileAssociations",
"Resource": "*"
},
{
"Effect": "Allow",
"Action": "iam:PassRole",
"Resource": "arn:aws:iam::111122223333
:role/DevTeam*"
}
]
}
次のポリシーではどのインスタンスに対しても IAM ロールのアタッチまたは置換を行うことをユーザーに許可します。ユーザーはTestRole-
で始まる名前の IAM ロールのみアタッチまたは置換できます。IAM アクションではインスタンスプロファイルではなく iam:PassRole
ロールの名前を指定します (両方の名前が異なる場合)。詳細についてはインスタンスプロファイルを参照してください。
- JSON
-
-
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ec2:AssociateIamInstanceProfile",
"ec2:ReplaceIamInstanceProfileAssociation"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": "ec2:DescribeIamInstanceProfileAssociations",
"Resource": "*"
},
{
"Effect": "Allow",
"Action": "iam:PassRole",
"Resource": "arn:aws:iam::111122223333
:role/TestRole-*"
}
]
}
例: ルートテーブルの使用
次のポリシーではVPC (vpc-ec43eb89
) のみに関連付けられているルートテーブルのルートの追加、削除、置換を行うことができます。ec2:Vpc
条件キーの VPC を指定するにはVPC の完全な ARN を指定する必要があります。
- JSON
-
-
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ec2:DeleteRoute",
"ec2:CreateRoute",
"ec2:ReplaceRoute"
],
"Resource": [
"arn:aws:ec2:us-east-1
:111122223333
:route-table/*"
],
"Condition": {
"StringEquals": {
"ec2:Vpc": "arn:aws:ec2:us-east-1
:111122223333
:vpc/vpc-ec43eb89"
}
}
}
]
}
例: 特定のインスタンスが他の AWS サービスでリソースを表示できるようにする
次に示すのはIAM ロールにアタッチできるポリシーの例です。ポリシーにより、インスタンスは AWS サービスのさまざまなリソースを表示できるようになります。このポリシーではグローバル条件キー ec2:SourceInstanceARN
を使用して、リクエスト元のインスタンスがインスタンス i-093452212644b0dd6
である必要があることを指定します。同じ IAM ロールが別のインスタンスと関連付けられている場合、他のインスタンスはこれらのどのアクションも実行できません。
- JSON
-
-
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ec2:DescribeVolumes",
"s3:ListAllMyBuckets",
"dynamodb:ListTables",
"rds:DescribeDBInstances"
],
"Resource": [
"*"
],
"Condition": {
"ArnEquals": {
"ec2:SourceInstanceARN": "arn:aws:ec2:us-east-1
:111122223333
:instance/i-093452212644b0dd6"
}
}
}
]
}
例: 起動テンプレートの使用
次のポリシーではユーザーは起動テンプレートのバージョンを作成して起動テンプレートを変更することができます。ただし、特定の起動テンプレートに限られます (lt-09477bcd97b0d3abc
)。ユーザーは他の起動テンプレートを使用することはできません。
- JSON
-
-
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"ec2:CreateLaunchTemplateVersion",
"ec2:ModifyLaunchTemplate"
],
"Effect": "Allow",
"Resource": "arn:aws:ec2:us-east-1
:111122223333
:launch-template/lt-09477bcd97b0d3abc
"
}
]
}
次のポリシーではユーザーは任意の起動テンプレートと起動テンプレートのバージョンを削除できます。ただし、起動テンプレートに Purpose
=Testing
のタグがある場合に限ります。
- JSON
-
-
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"ec2:DeleteLaunchTemplate",
"ec2:DeleteLaunchTemplateVersions"
],
"Effect": "Allow",
"Resource": "arn:aws:ec2:us-east-1
:111122223333
:launch-template/*",
"Condition": {
"StringEquals": {
"aws:ResourceTag/Purpose": "Testing"
}
}
}
]
}
以下のポリシーではインスタンスメタデータサービスバージョン 2 (IMDSv2) を使用して、ユーザーがインスタンスメタデータのみを取得できるようにします。以下の 4 つのポリシーは4 つのステートメントを使用する 1 つのポリシーに結合できます。1 つのポリシーとして結合すると、このポリシーをサービスコントロールポリシー (SCP) として使用できます。これは既存の IAM ポリシーに適用する拒否ポリシーとして (既存のアクセス許可を削除して制限するために) 使用したり、アカウント、部門単位 (OU)、組織全体にグローバルに適用する SCP として使用したりすることもできます。
以下の RunInstances メタデータオプションポリシーはRunInstances を使用してインスタンスを起動するアクセス許可をプリンシパルに付与するポリシーと組み合わせて使用する必要があります。プリンシパルに RunInstances アクセス許可もない場合、インスタンスを起動することはできません。詳細についてはインスタンスの使用とインスタンスの起動 (RunInstances)のポリシーを参照してください。
Auto Scaling グループを使用し、すべての新しいインスタンスで IMDSv2 の使用を要求する必要がある場合はAuto Scaling グループで 起動テンプレートを使用する必要があります。
Auto Scaling グループが起動テンプレートを使用する場合、新しい Auto Scaling グループが作成されるときに IAM プリンシパルの ec2:RunInstances
アクセス許可がチェックされます。また、既存の Auto Scaling グループが更新され、新しい起動テンプレートまたは新しいバージョンの起動テンプレートが使用される場合にもチェックされます。
RunInstances
の IAM プリンシパルでの IMDSv1 の使用に関する制限は起動テンプレートを使用している Auto Scaling グループが作成または更新された場合にのみチェックされます。Latest
または Default
起動テンプレートを使用するように設定された Auto Scaling グループでは起動テンプレートの新しいバージョンが作成されたときにアクセス許可はチェックされません。アクセス許可をチェックするには特定のバージョンの起動テンプレートを使用するように Auto Scaling グループを設定する必要があります。
Auto Scaling グループによって起動されるインスタンスで IMDSv2 の使用を強制するには以下の追加ステップが必要です。
-
作成された新しいプリンシパルのサービスコントロールポリシー (SCP) または IAM アクセス許可の境界を使用して、組織内のすべてのアカウントの起動設定の使用を無効にします。Auto Scaling グループアクセス許可を持つ既存の IAM プリンシパルの場合、関連するポリシーをこの条件キーで更新します。起動設定の使用を無効にするには値が "autoscaling:LaunchConfigurationName"
として指定された null
条件キーを使用して、関連する SCP、アクセス許可の境界、または IAM ポリシーを作成または変更します。
-
新しい起動テンプレートの場合は起動テンプレートでインスタンスメタデータオプションを設定します。既存の起動テンプレートの場合は新しいバージョンの起動テンプレートを作成し、新しいバージョンでインスタンスメタデータオプションを設定します。
-
起動テンプレートを使用するアクセス許可を任意のプリンシパルに付与するポリシーで、$latest
を指定して $default
と "autoscaling:LaunchTemplateVersionSpecified": "true"
の関連付けを制限します。使用を特定のバージョンの起動テンプレートに制限することで、インスタンスメタデータオプションが設定されているバージョンを使用して新しいインスタンスを確実に起動できます。詳細についてはAmazon EC2 Auto Scaling API リファレンス (具体的には Version
パラメータ) の「LaunchTemplateSpecification」を参照してください。
-
起動設定を使用する Auto Scaling グループの場合、起動設定を起動テンプレートに置き換えます。詳細については「Amazon EC2 Auto Scaling ユーザーガイド」の「Create a launch template for an Auto Scaling group」を参照してください。
-
起動テンプレートを使用する Auto Scaling グループの場合、インスタンスメタデータオプションが設定された新しい起動テンプレートを使用するか、インスタンスメタデータオプションが設定された現在の起動テンプレートの新しいバージョンを使用します。詳細については、「update-auto-scaling-group」を参照してください。
次のポリシーではインスタンスが IMDSv2 の使用を要求するようにオプトインされていない限り("ec2:MetadataHttpTokens": "required"
で指定)、RunInstances API を呼び出せないように指定します。インスタンスが IMDSv2 を要求するように指定しないと、RunInstances API を呼び出したときに UnauthorizedOperation
エラーが発生します。
- JSON
-
-
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "RequireImdsV2",
"Effect": "Deny",
"Action": "ec2:RunInstances",
"Resource": "arn:aws:ec2:*:*:instance/*",
"Condition": {
"StringNotEquals": {
"ec2:MetadataHttpTokens": "required"
}
}
}
]
}
次のポリシーではModifyInstanceMetadataOptions
API を呼び出さないように指定し、IMDSv1 または IMDSv2 のオプションを許可します。ModifyInstanceMetadataOptions
API を呼び出す場合はHttpTokens
属性を required
に設定する必要があります。
- JSON
-
-
{
"Version": "2012-10-17",
"Statement": [{
"Sid": "DenyIMDSv1HttpTokensModification",
"Effect": "Deny",
"Action": "ec2:ModifyInstanceMetadataOptions",
"Resource": "arn:aws:ec2:*:*:instance/*",
"Condition": {
"StringNotEquals": {
"ec2:Attribute/HttpTokens": "required"
},
"Null": {
"ec2:Attribute/HttpTokens": false
}
}
}]
}
次のポリシーではホップ制限を指定しない限り、RunInstances API を呼び出せないように指定します。また、ホップ制限を 3 以下にするように指定します。これを指定しないと、RunInstances API を呼び出したときに UnauthorizedOperation
エラーが発生します。
- JSON
-
-
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "MaxImdsHopLimit",
"Effect": "Deny",
"Action": "ec2:RunInstances",
"Resource": "arn:aws:ec2:*:*:instance/*",
"Condition": {
"NumericGreaterThan": {
"ec2:MetadataHttpPutResponseHopLimit": "3"
}
}
}
]
}
次のポリシーでは一般の管理者がインスタンスメタデータオプションを変更するロール ec2-imds-admins
を持つユーザーのみに変更を行うことを許可します。ec2-imds-admins
ロール以外のプリンシパルが ModifyInstanceMetadataOptions API を呼び出そうとすると、UnauthorizedOperation
エラーが発生します。このステートメントはModifyInstanceMetadataOptions API の使用を制御するために使用できます。現在、ModifyInstanceMetadataOptions API 用の詳細なアクセスコントロール (条件) はありません。
次のポリシーではこのポリシーを適用したロールを EC2 サービスが引き受けて、結果の認証情報をリクエストの署名に使用する場合はIMDSv2 から取得した EC2 ロールの認証情報を使用してリクエストに署名する必要があることを指定します。それ以外の場合はすべての API コールで UnauthorizedOperation
エラーが発生します。このステートメント/ポリシーはリクエストが EC2 ロールの認証情報によって署名されていない場合は効果がないため、一般的に適用できます。
- JSON
-
-
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "RequireAllEc2RolesToUseV2",
"Effect": "Deny",
"Action": "*",
"Resource": "*",
"Condition": {
"NumericLessThan": {
"ec2:RoleDelivery": "2.0"
}
}
}
]
}
Amazon EBS ボリュームとスナップショットの使用
Amazon EBS ボリュームとスナップショットを使用するポリシーの例については「Amazon EBS のアイデンティティベースのポリシー例」を参照してください。