AWS のサービスにアクセス許可を委任するロールの作成 - AWS Identity and Access Management

AWS のサービスにアクセス許可を委任するロールの作成

AWS の多くのサービスでは、ロールを使用して、ユーザーに代わって該当サービスが他のサービスのリソースにアクセスすることを許可する必要があります。サービスがお客様に代わってアクションを実行するために引き受けるロールは、サービスロールと呼ばれます。ロールにサービスに対して特殊な目的がある場合、そのロールは EC2 インスタンスのサービスロール (この例)、またはサービスにリンクされたロールとして分類されます。どのサービスがサービスにリンクされたロールの使用をサポートしているのか、またはサービスがあらゆる形式の一時的な認証情報をサポートしているのか確認するには「IAM と連携する AWS のサービス」をご覧ください。サービスがそれぞれロールをどのように使用するのか把握するには、テーブル内のサービス名を選択し、そのサービスに関するドキュメントをご覧ください。

ロールを使用してアクセス許可を委任する方法の詳細については、「ロールに関する用語と概念」を参照してください。

サービスロールのアクセス許可

IAM エンティティ (ユーザーまたはロール) がサービスロールを作成または編集できるようにするには、アクセス許可を設定する必要があります。

注記

サービスにリンクされたロールの ARN にはサービスプリンシパルが含まれています。以下のポリシーでは SERVICE-NAME.amazonaws.com として示されています。サービスプリンシパルは推量しないでください。サービスプリンシパルは、大文字と小文字が区別され、AWS のサービス間で異なる場合があります。サービスのサービスプリンシパルを表示するには、そのサービスにリンクされたロールのドキュメントを参照してください。

IAM エンティティが特定のサービスロールを作成することを許可するには

サービスロールを作成する必要のある IAM エンティティに、以下のポリシーを追加します。このポリシーでは、指定したサービスおよび特定の名前のサービスロールの作成を許可します。管理ポリシーまたはインラインポリシーをそのロールにアタッチできます。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iam:AttachRolePolicy", "iam:CreateRole", "iam:PutRolePolicy" ], "Resource": "arn:aws:iam::*:role/SERVICE-ROLE-NAME" } ] }

IAM エンティティが任意のサービスロールを作成することを許可するには

AWS では、管理者ユーザーのみにサービスロールの作成を許可することをお勧めします。ロールの作成とポリシーの添付を許可されたユーザーは、自分のアクセス許可をエスカレートできます。代わりに、彼らが必要とするロールの作成のみを許可したポリシーを作成するか、彼らの代わりに、管理者にサービスロールを作成させます。

管理者が AWS アカウント 全体にアクセスできるポリシーを添付するには、AdministratorAccess AWS 管理ポリシーを使用します。

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 エンティティがサービスロールを削除することを許可するには

AWS では、管理者ユーザーのみにサービスロールの削除を許可することをお勧めします。代わりに、彼らが必要とするロールの削除のみを許可したポリシーを作成するか、彼らの代わりに、管理者にサービスロールを削除させます。

管理者が AWS アカウント 全体にアクセスできるポリシーを添付するには、AdministratorAccess AWS 管理ポリシーを使用します。

AWS のサービス用ロールの作成 (コンソール)

サービス用のロールを作成するには、AWS Management Console を使用します。一部のサービスでは、複数のサービスロールがサポートされているため、該当サービスの「AWS ドキュメント」を参照の上、選択するユースケースを確認してください。必要な信頼ポリシーとアクセス権限ポリシーを割り当て、サービスがお客様に代わってロールを引き受ける方法について説明します。ロールのアクセス許可を管理するために使用できるステップは、サービスでユースケースを定義する方法や、サービスにリンクされたロールを作成するかどうかに応じて異なります。

AWS サービスのロールを作成するには (コンソール)
  1. AWS Management Console にサインインして、https://console.aws.amazon.com/iam/ で IAM コンソールを開きます。

  2. IAM コンソールのナビゲーションペインで、[ロール][ロールを作成] の順に選択します。

  3. [Select trusted entity] (信頼されたエンティティの選択) で、[AWS のサービス] を選択します。

  4. サービスのユースケースを選択します。ユースケースは、サービスに必要な信頼ポリシーを含めるように定義されています。続いて、[Next (次へ)] を選択します。

  5. 可能な場合は、アクセス許可ポリシーとして使用するポリシーを選択するか、[ポリシーの作成] を選択して新しいブラウザタブを開き、新しいポリシーをゼロから作成します。詳細については、「IAM ポリシーの作成」を参照してください。ポリシーを作成したら、そのタブを閉じて元のタブに戻ります。サービスに割り当てるアクセス許可ポリシーの横にあるチェックボックスをオンにします。

    選択したユースケースに基づき、サービスで以下のいずれかの実行が許可されることがあります。

    • サービスがロールのアクセス許可を定義しているため、何もありません。

    • 制限されたアクセス権限から選択します。

    • すべてのアクセス権限から選択します。

    • この時点でポリシーを選択できないようにし、ポリシーを作成してからロールにアタッチします。

  6. (オプション) アクセス許可の境界を設定します。このアドバンスド機能は、サービスロールで使用できますが、サービスにリンクされたロールではありません。

    [Permissions boundary] (アクセス許可の境界) セクションを展開し、[Use a permissions boundary to control the maximum role permissions] (アクセス許可の境界を使用して、ロールのアクセス許可の上限を設定する) を選択します。IAM には、アカウント内の AWS 管理ポリシーとカスタマー管理ポリシーのリストがあります。アクセス許可の境界として使用するポリシーを選択するか、[Create policy] (ポリシーの作成) を選択して新しいブラウザタブを開き、新しいポリシーをゼロから作成します。詳細については、「IAM ポリシーの作成」を参照してください。ポリシーを作成したら、そのタブを閉じて元のタブに戻り、アクセス許可の境界として使用するポリシーを選択します。

  7. [Next] (次へ) をクリックします。

  8. [ロール名] で、ロール名のカスタマイズの度合いはサービスによって定義されます。サービスのロール名が定義されている場合、このオプションを変更することはできません。それ以外の場合、サービスでロールのプレフィックスが定義され、オプションのサフィックスを入力できる場合があります。一部のサービスでは、ロールの名前全体を指定することができます。

    可能な場合は、このロールの目的を識別するのに役立つロール名またはロール名サフィックスを入力します。ロール名は AWS アカウント アカウント内で一意である必要があります。大文字と小文字は区別されません。例えば、PRODROLEprodrole というロール名を両方作成することはできません。他の AWS リソースがロールを参照している場合があるため、作成後はロールの名前を変更できません。

  9. (オプション) [Description] (説明) には、新しいロールの説明を入力します。

  10. [Step 1: Select trusted entities] (ステップ 1: 信頼済みエンティティの選択) または [Step 2: Add permissions] (ステップ 2: 権限の追加) のセクションで [Edit] (編集) を選択し、ロールのユースケースと権限を変更します。

  11. (オプション) タグをキーバリューのペアとしてアタッチして、メタデータをロールに追加します。IAM におけるタグの使用の詳細については、「IAM リソースのタグ付け」を参照してください。

  12. ロール情報を確認し、[Create role (ロールの作成)] を選択します。

サービス用のロールを作成する (AWS CLI)

AWS CLI を使用したロールの作成には、複数のステップがあります。コンソールを使用してロールを作成する場合、多くのステップは自動的に行われますが、AWS CLI を使用する場合は、各ステップを明示的に実行する必要があります。ロールを作成して、これにアクセス許可ポリシーを割り当てる必要があります。使用しているサービスが Amazon EC2 の場合は、インスタンスプロファイルも作成してロールを追加する必要があります。必要に応じて、ロールのアクセス許可の境界を設定することもできます。

AWS のサービスのロールを AWS CLI で作成するには
  1. 次の create-role コマンドは、Test-Role という名前のロールを作成し、それに信頼ポリシーをアタッチします。

    aws iam create-role --role-name Test-Role --assume-role-policy-document file://Test-Role-Trust-Policy.json

  2. マネージドアクセス許可ポリシー aws iam attach-role-policy をロールにアタッチします。

    たとえば、次の attach-role-policy コマンドは、AWS と呼ばれる ReadOnlyAccess 管理ポリシーIAM ロールを ReadOnlyRole と呼ばれる IAM ロールロールにアタッチします。

    aws iam attach-role-policy --policy-arn arn:aws:iam::aws:policy/ReadOnlyAccess --role-name ReadOnlyRole

    or

    ロールのインラインアクセス許可ポリシーaws iam put-role-policy を作成します。

    インラインアクセス許可ポリシーの追加については、以下の例を参照してください。

    aws iam put-role-policy --role-name Test-Role --policy-name ExamplePolicy --policy-document file://AdminPolicy.json

  3. (オプション) タグ (aws iam tag-role) をアタッチして、カスタム属性をロールに追加します。

    詳細については、「IAM ロールのタグの管理 (AWS CLI または AWS API)」を参照してください。

  4. (オプション) ロールのアクセス許可の境界 aws iam put-role-permissions-boundary を設定します。

    アクセス許可の境界では、ロールに許可されるアクセス許可の上限を設定します。アクセス許可の境界は AWS のアドバンスド機能です。

ロールを Amazon EC2 で使用する場合や、Amazon EC2 を使用する AWS の別のサービスで使用する場合は、ロールをインスタンスプロファイルに保存する必要があります。インスタンスプロファイルは、Amazon EC2 インスタンスの起動時にインスタンスにアタッチできるロールのコンテナです。インスタンスプロファイルに含めることができる ロールは 1 つのみであり、緩和できません。AWS Management Consoleを使用してロールを作成すると、ロールと同じ名前のインスタンスプロファイルが自動的に作成されます。インスタンスプロファイルの詳細については、「インスタンスプロファイルの使用」を参照してください。ロールを使用して EC2 インスタンスを起動する方法については、Linuxインスタンス用AmazonEC2ユーザーガイドの「Amazon EC2リソースへのアクセスの制御」を参照してください。

インスタンスプロファイルを作成し、これにロールを保存するには (AWS CLI)
  1. インスタンスプロファイル aws iam create-instance-profile を作成します。

  2. ロールをインスタンスプロファイル 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 バケット ListBucket に対して example_bucket アクションのみを実行することをロールに許可します。

{ "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://C:\policies\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)
  1. ロールとして CreateRole を作成します。

    ロールの信頼ポリシーに対して、ファイルの場所を指定できます。

  2. ロールに管理アクセス許可ポリシーをアタッチします: AttachRolePolicy

    or

    ロールのインラインアクセス許可ポリシー PutRolePolicy を作成します。

  3. (オプション) タグ (TagRole) をアタッチして、カスタム属性をユーザーに追加します。

    詳細については、「IAM ユーザーのタグの管理 ( AWS CLI または AWS API)」を参照してください。

  4. (オプション) ロールのアクセス許可の境界 PutRolePermissionsBoundary を設定します。

    アクセス許可の境界では、ロールに許可されるアクセス許可の上限を設定します。アクセス許可の境界は AWS のアドバンスド機能です。

ロールを Amazon EC2 で使用する場合や、Amazon EC2 を使用する AWS の別のサービスで使用する場合は、ロールをインスタンスプロファイルに保存する必要があります。インスタンスプロファイルは、ロールのコンテナとして機能します。各インスタンスプロファイルに含めることができるロールは 1 つのみであり、増やすことはできません。AWS Management Consoleでロールを作成すると、ロールと同じ名前のインスタンスプロファイルが自動的に作成されます。インスタンスプロファイルの詳細については、「インスタンスプロファイルの使用」を参照してください。ロールを使用して Amazon EC2 インスタンスを起動する方法については、「Linux インスタンス用 Amazon EC2 ユーザーガイド」の「Amazon EC2 リソースへのアクセスの制御」を参照してください。

インスタンスプロファイルを作成し、これにロールを保存するには (AWS API)
  1. インスタンスプロファイル CreateInstanceProfile を作成します。

  2. ロールをインスタンスプロファイル AddRoleToInstanceProfile に追加します。