タグを使用して Amazon Elastic Compute Cloud (Amazon EC2) インスタンスへのアクセスを制御する AWS Identity and Access Management (AWS IAM) ポリシーを作成したいと考えています。
簡単な説明
Amazon EC2 インスタンスの小規模デプロイへのアクセスを次のように制御します。
- ユーザーまたはグループにアクセス権を付与したいインスタンスに特定のタグを追加します。
- 特定のタグを持つすべてのインスタンスへのアクセスを許可する IAM ポリシーを作成します。
- インスタンスにアクセスするユーザーまたはグループに IAM ポリシーをアタッチします。
解決策
EC2 インスタンスのグループにタグを追加する
Amazon EC2 コンソールを開きます。次に、ユーザーまたはグループがアクセスできるようにする EC2 インスタンスのグループにタグを追加します。タグをまだ作成していない場合は、新しいタグを作成します。
**注:**リソースにタグを付ける前に、必ずタグの制限を読んで理解してください。Amazon EC2 タグでは大文字と小文字が区別されます。
特定のタグを持つインスタンスへのアクセスを許可する IAM ポリシーを作成する
次のことを行う IAM ポリシーを作成します。
- タグ付きのインスタンスを制御できます。
- 条件キー ec2:ResourceTag/Username の値がポリシー変数 aws:username と一致する場合、Amazon EC2 リソースへのアクセスを許可する条件ステートメントが含まれています。ポリシー変数 ${aws:username} は、ポリシーが IAM によって評価されるときに、現在の IAM ユーザーのわかりやすい名前に置き換えられます。
- Amazon EC2 リソースの ec2:Describe* アクションへのアクセスを許可します。
- ec2:CreateTags アクションと ec2:DeleteTags アクションへのアクセスを明示的に拒否して、ユーザーがタグを作成または削除できないようにします。これにより、ユーザーが特定のタグを追加して EC2 インスタンスを制御できなくなります。
完成したポリシーは以下のようになります。
注: このポリシーは、ec2:ResourceTag 条件キーを使用する Amazon EC2 インスタンスに適用されます。タグを使用した新しい Amazon EC2 インスタンスの起動を制限するには、「IAM ポリシータグを使用して EC2 インスタンスまたは EBS ボリュームの作成方法を制限するにはどうすればよいですか?」を参照してください。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "ec2:*",
"Resource": "*",
"Condition": {
"StringEquals": {
"ec2:ResourceTag/UserName": "${aws:username}"
}
}
},
{
"Effect": "Allow",
"Action": "ec2:Describe*",
"Resource": "*"
},
{
"Effect": "Deny",
"Action": [
"ec2:CreateTags",
"ec2:DeleteTags"
],
"Resource": "*"
}
]
}
注: IAM アイデンティティセンターの権限セットやフェデレーションユーザーなど、IAM ユーザーではないプリンシパルの場合は、aws: username の代わりに aws:userid 変数を使用してください。aws:userid という変数には、account:caller-specified-name という値があります。詳細については、「IAM ポリシーの要素: 変数とタグ」および「フェデレーティッドユーザーで IAM ポリシー変数を使用するにはどうすればよいですか?」を参照してください。
インスタンスにアクセスするユーザーまたはグループに IAM ポリシーをアタッチします
インスタンスにアクセスするユーザーまたはグループに IAM ポリシーをアタッチします。IAM ポリシーは、AWS マネジメントコンソール、AWS CLI、または AWS API を使用してアタッチできます。
関連情報
Granting required permissions for Amazon EC2 resources
Amazon EC2 の IAM ポリシー
IAM チュートリアル: タグに基づいて AWS リソースにアクセスする権限を定義する