AWS サービスにアクセス許可を委任するロールの作成
AWS の多くのサービスでは、ロールを使用して、ユーザーに代わって該当サービスが他のサービスのリソースにアクセスすることを許可する必要があります。サービスがお客様に代わってアクションを実行するために引き受けるロールは、サービスロールと呼ばれます。ロールにサービスに対して特殊な目的がある場合、そのロールは EC2 インスタンスのサービスロール (この例)、またはサービスにリンクされたロールとして分類されます。どのサービスがサービスにリンクされたロールの使用をサポートしているのか、またはサービスがあらゆる形式の一時的な認証情報をサポートしているのか確認するには「IAM と連携する AWS のサービス」をご覧ください。サービスがそれぞれロールをどのように使用するのか把握するには、テーブル内のサービス名を選択し、そのサービスに関するドキュメントをご覧ください。
ロールを使用してアクセス許可を委任する方法の詳細については、「ロールに関する用語と概念」を参照してください。
サービスロールのアクセス許可
IAM エンティティ (ユーザー、グループ、ロールなど) がサービスロールを作成や編集できるようにするには、アクセス許可を設定する必要があります。
注記
サービスにリンクされたロールの ARN にはサービスプリンシパルが含まれています。以下のポリシーでは
として示されています。サービスプリンシパルは推量しないでください。サービスプリンシパルは、大文字と小文字が区別され、AWS のサービス間で異なる場合があります。サービスのサービスプリンシパルを表示するには、そのサービスにリンクされたロールのドキュメントを参照してください。
SERVICE-NAME
.amazonaws.com
IAM エンティティが特定のサービスロールを作成することを許可するには
サービスロールを作成する必要のある IAM エンティティに、以下のポリシーを追加します。このポリシーでは、指定したサービスおよび特定の名前のサービスロールの作成を許可します。管理ポリシーまたはインラインポリシーをそのロールにアタッチできます。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "CreateSpecificRoleForSpecificService", "Effect": "Allow", "Action": "iam:CreateRole", "Resource": "arn:aws:iam::*:role/
SERVICE-ROLE-NAME
", "Condition": {"StringLike": {"iam:AWSServiceName": "SERVICE-NAME
.amazonaws.com"}} }, { "Sid": "AddPoliciesToSpecificRole", "Effect": "Allow", "Action": [ "iam:AttachRolePolicy", "iam:PutRolePolicy" ], "Resource": "arn:aws:iam::*:role/SERVICE-ROLE-NAME
" } ] }
IAM エンティティが任意のサービスロールを作成することを許可するには
サービスロールを作成する必要のある IAM エンティティのアクセス許可ポリシーに、以下のステートメントを追加します。このステートメントでは、任意のサービスの任意のサービスロールの作成を許可し、そのロールに管理ポリシーまたはインラインポリシーをアタッチします。
{ "Effect": "Allow", "Action": [ "iam:AttachRolePolicy", "iam:CreateRole", "iam:PutRolePolicy" ], "Resource": "*" }
IAM エンティティにサービスロールの編集を許可するには
サービスロールを編集する必要のある IAM エンティティに、以下のポリシーを追加します。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "EditSpecificServiceRole", "Effect": "Allow", "Action": [ "iam:AttachRolePolicy", "iam:DeleteRolePolicy", "iam:DetachRolePolicy", "iam:GetRole", "iam:GetRolePolicy", "iam:ListAttachedRolePolicies", "iam:ListRolePolicies", "iam:PutRolePolicy", "iam:UpdateRole", "iam:UpdateRoleDescription" ], "Resource": "arn:aws:iam::*:role/
SERVICE-ROLE-NAME
" }, { "Sid": "ViewRolesAndPolicies", "Effect": "Allow", "Action": [ "iam:GetPolicy", "iam:ListRoles" ], "Resource": "" } ] }
IAM エンティティが特定のサービスロールを削除することを許可するには
指定したサービスロールを削除する必要のある IAM エンティティのアクセス許可ポリシーに、以下のステートメントを追加します。
{ "Effect": "Allow", "Action": "iam:DeleteRole", "Resource": "arn:aws:iam::*:role/
SERVICE-ROLE-NAME
" }
IAM エンティティがサービスロールを削除することを許可するには
サービスロールを削除する必要のある IAM エンティティのアクセス許可ポリシーに、以下のステートメントを追加します。
{ "Effect": "Allow", "Action": "iam:DeleteRole", "Resource": "*" }
AWS サービス用のロールの作成 (コンソール)
サービス用のロールを作成するには、AWS マネジメントコンソール を使用します。一部のサービスでは、複数のサービスロールがサポートされているため、該当サービスの AWS ドキュメントを参照の上、選択するユースケースを確認してください。必要な信頼ポリシーとアクセス権限ポリシーを割り当て、サービスがお客様に代わってロールを引き受ける方法について説明します。ロールのアクセス許可を管理するために使用できるステップは、サービスでユースケースを定義する方法や、サービスにリンクされたロールを作成するかどうかに応じて異なります。
AWS サービスのロールを作成するには (コンソール)
-
AWS マネジメントコンソール にサインインし、IAM コンソール(https://console.aws.amazon.com/iam/)を開きます。
-
IAM コンソールのナビゲーションペインで、[ロール]、[ロールの作成] の順に選択します。
-
[Select type of trusted entity (信頼されたエンティティのタイプの選択)] で、[AWS サービス] を選択します。
-
このロールを引き受けることを許可するサービスを選択します。
-
サービスのユースケースを選択します。指定のサービスにユースケースが 1 つしかない場合はすでに選択されています。ユースケースは、サービスに必要な信頼ポリシーを含めるように定義されています。続いて、[Next: Permissions] を選択します。
-
可能な場合は、アクセス許可ポリシーとして使用するポリシーを選択するか、[ポリシーの作成] を選択して新しいブラウザタブを開き、新しいポリシーをゼロから作成します。詳細については、「IAM ポリシーの作成 (コンソール)」のステップ 4 を参照してください。ポリシーを作成したら、そのタブを閉じて元のタブに戻ります。サービスに割り当てるアクセス許可ポリシーの横にあるチェックボックスをオンにします。
選択したユースケースに基づき、サービスで以下のいずれかの実行が許可されることがあります。
-
サービスによってロールのアクセス許可が決定されるため、なし
-
制限されたアクセス権限からの選択を許可する
-
すべてのアクセス権限からの選択を許可する
-
この時点でポリシーを選択できないようにし、ポリシーを作成してからロールにアタッチする
-
-
(オプション) アクセス許可の境界を設定します。このアドバンスド機能は、サービスロールで使用できますが、サービスにリンクされたロールではありません。
[Set permissions boundary (アクセス許可の境界の設定)] セクションを開き、[Use a permissions boundary to control the maximum role permissions (アクセス許可の境界を使用してロールのアクセス許可の上限を設定する)] を選択します。IAM には、アカウント内の AWS 管理ポリシーとカスタマー管理ポリシーのリストがあります。アクセス許可の境界として使用するポリシーを選択するか、[ポリシーの作成] を選択して新しいブラウザタブを開き、新しいポリシーをゼロから作成します。詳細については、「IAM ポリシーの作成 (コンソール)」のステップ 4 を参照してください。ポリシーを作成したら、そのタブを閉じて元のタブに戻り、アクセス許可の境界として使用するポリシーを選択します。
-
[Next: Tagging] を選択します。
-
(オプション) タグをキー – 値のペアとしてアタッチして、メタデータをロールに追加します。IAM におけるタグの使用の詳細については、「IAM エンティティのタグ付け」を参照してください。
-
[Next: Review] を選択します。
-
[ロール名] で、ロール名のカスタマイズの度合いはサービスによって定義されます。サービスのロール名が定義されている場合、このオプションを変更することはできません。それ以外の場合、サービスでロールのプレフィックスが定義され、オプションのサフィックスを入力できる場合があります。一部のサービスでは、ロールの名前全体を指定することができます。
可能な場合は、ロール名またはロール名のサフィックスを入力します。ロール名は AWS アカウント内で一意でなければなりません。大文字と小文字は区別されません。たとえば、
PRODROLE
とprodrole
というロール名を両方作成することはできません。他の AWS リソースがロールを参照している場合があるため、作成後はロールの名前を変更できません。 -
(オプション) [Role description] に、新しいロールの説明を入力します。
-
ロール情報を確認し、[Create role] を選択します。
サービス用のロールを作成する (AWS CLI)
AWS CLI を使用したロールの作成には、複数のステップがあります。コンソールを使用してロールを作成する場合、多くのステップは自動的に行われますが、AWS CLI を使用する場合は、各ステップを明示的に実行する必要があります。ロールを作成して、これにアクセス許可ポリシーを割り当てる必要があります。使用しているサービスが Amazon EC2 の場合は、インスタンスプロファイルも作成してロールを追加する必要があります。必要に応じて、ロールのアクセス許可の境界を設定することもできます。
AWS のサービスのロールを AWS CLI で作成するには
-
ロール aws iam create-role を作成します。
-
マネージドアクセス許可ポリシー aws iam attach-role-policy をロールにアタッチします。
または
ロールのインラインアクセス許可ポリシーaws iam put-role-policy を作成します。
-
(オプション) タグ (aws iam tag-role) をアタッチして、カスタム属性をロールに追加します。
詳細については、「IAM エンティティのタグの管理 (AWS CLI または AWS API)」を参照してください。
-
(オプション) ロールのアクセス許可の境界 aws iam put-role-permissions-boundary を設定します。
アクセス許可の境界では、ロールに許可されるアクセス許可の上限を設定します。アクセス許可の境界は AWS のアドバンスド機能です。
ロールを Amazon EC2 で使用する場合や、Amazon EC2 を使用する AWS の別のサービスで使用する場合は、ロールをインスタンスプロファイルに保存する必要があります。インスタンスプロファイルは、Amazon EC2 インスタンスの起動時にインスタンスにアタッチできるロールのコンテナです。インスタンスプロファイルに含めることができるロールは 1 つのみであり、緩和できません。AWS マネジメントコンソールを使用してロールを作成すると、ロールと同じ名前のインスタンスプロファイルが自動的に作成されます。インスタンスプロファイルの詳細については、「インスタンスプロファイルの使用」を参照してください。ロールを使用して EC2 インスタンスを起動する方法については、『Linux インスタンス用 Amazon EC2 ユーザーガイド』の「Amazon EC2 リソースに対するアクセスコントロール」を参照してください。
インスタンスプロファイルを作成し、これにロールを保存するには (AWS CLI)
-
インスタンスプロファイル aws iam create-instance-profile を作成します。
-
ロールをインスタンスプロファイル aws iam add-role-to-instance-profile に追加します。
次に示す AWS CLI のコマンド例では、ロールを作成してアクセス許可をアタッチする手順の最初の 2 つのステップを示します。また、インスタンスプロファイルを作成し、これにロールを追加する手順の最初の
2 つのステップも示します。この信頼ポリシー例では、ロールを引き受けて Amazon S3 バケット example_bucket
を表示することを Amazon EC2 サービスに許可します。また、この例では、Windows を実行するクライアントコンピュータを使用中であり、アカウントの認証情報とリージョンを使ってコマンドラインインターフェイスを設定済みであることを前提とします。詳細については、「AWS
コマンドラインインターフェイスの設定」を参照してください。
この例では、ロールの作成時に、次の信頼ポリシーを最初のコマンドに含めます。この信頼ポリシーにより、Amazon EC2 サービスはロールを引き受けることを許可されます。
{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Principal": {"Service": "ec2.amazonaws.com"}, "Action": "sts:AssumeRole" } }
2 番目のコマンドを使用する場合、アクセス許可ポリシーをロールにアタッチする必要があります。以下のアクセス許可ポリシーの例では、Amazon S3 バケット example_bucket
に対して ListBucket
アクションのみを実行することをロールに許可します。
{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::example_bucket" } }
この Test-Role-for-EC2
ロールを作成するには、まず前の信頼ポリシーを trustpolicyforec2.json
という名前で、前のアクセス許可ポリシーを permissionspolicyforec2.json
という名前で、ローカル C:
ドライブの policies
ディレクトリに保存する必要があります。次に、以下のコマンドを使用して、ロールの作成、ポリシーのアタッチ、インスタンスプロファイルの作成、およびインスタンスプロファイルへのロールの追加を行います。
# Create the role and attach the trust policy that allows EC2 to assume this role. $
aws iam create-role --role-name Test-Role-for-EC2 --assume-role-policy-document file://C:\policies\trustpolicyforec2.json
# Embed the permissions policy (in this example an inline policy) to the role to specify what it is allowed to do. $
aws iam put-role-policy --role-name Test-Role-for-EC2 --policy-name Permissions-Policy-For-Ec2 --policy-document file://permissionspolicyforec2.json
# Create the instance profile required by EC2 to contain the role $
aws iam create-instance-profile --instance-profile-name EC2-ListBucket-S3
# Finally, add the role to the instance profile $
aws iam add-role-to-instance-profile --instance-profile-name EC2-ListBucket-S3 --role-name Test-Role-for-EC2
EC2 インスタンスを起動するとき、AWS コンソールを使用する場合は、[インスタンスの詳細の設定] ページでインスタンスプロファイル名を指定します。aws ec2 run-instances
CLI コマンドを使用する場合は、--iam-instance-profile
パラメータを指定します。
サービス用のロールを作成する (AWS API)
AWS API からロールを作成するには、複数のステップが必要です。コンソールでロールを作成する場合は多くのステップが自動的に実行されますが、API では各ステップを手動で明示的に実行する必要があります。ロールを作成して、これにアクセス許可ポリシーを割り当てる必要があります。使用しているサービスが Amazon EC2 の場合は、インスタンスプロファイルも作成してロールを追加する必要があります。必要に応じて、ロールのアクセス許可の境界を設定することもできます。
AWS のサービスのロールを作成するには (AWS API)
-
ロールとして CreateRole を作成します。
ロールの信頼ポリシーに対して、ファイルの場所を指定できます。
-
ロールに管理アクセス許可ポリシーをアタッチします: AttachRolePolicy
または
ロールのインラインアクセス許可ポリシー PutRolePolicy を作成します。
-
(オプション) タグ (TagRole) をアタッチして、カスタム属性をユーザーに追加します。
詳細については、「IAM エンティティのタグの管理 (AWS CLI または AWS API)」を参照してください。
-
(オプション) ロールのアクセス許可の境界 PutRolePermissionsBoundary を設定します。
アクセス許可の境界では、ロールに許可されるアクセス許可の上限を設定します。アクセス許可の境界は AWS のアドバンスド機能です。
ロールを Amazon EC2 で使用する場合や、Amazon EC2 を使用する AWS の別のサービスで使用する場合は、ロールをインスタンスプロファイルに保存する必要があります。インスタンスプロファイルは、ロールのコンテナとして機能します。各インスタンスプロファイルに含めることができるロールは 1 つのみであり、増やすことはできません。AWS マネジメントコンソールでロールを作成すると、ロールと同じ名前のインスタンスプロファイルが自動的に作成されます。インスタンスプロファイルの詳細については、「インスタンスプロファイルの使用」を参照してください。ロールを使用して Amazon EC2 インスタンスを起動する方法については、『Linux インスタンス用 Amazon EC2 ユーザーガイド』の「Amazon EC2 リソースに対するアクセスコントロール」を参照してください。
インスタンスプロファイルを作成し、これにロールを保存するには (AWS API)
-
インスタンスプロファイル CreateInstanceProfile を作成します。
-
ロールをインスタンスプロファイル AddRoleToInstanceProfile に追加します。