EC2 インスタンスで実行するアプリケーションに対するアクセス許可の指定 - AWS OpsWorks

EC2 インスタンスで実行するアプリケーションに対するアクセス許可の指定

スタックの Amazon EC2 インスタンスで実行するアプリケーションが Amazon S3 バケットなどの他の AWS リソースにアクセスするには、適切なアクセス許可が必要です。アクセス許可を付与するには、インスタンスプロファイルを使用します。AWS OpsWorks スタックのスタックの作成時に、各インスタンスに対してインスタンスプロファイルを指定できます。


             [Add Stack] ページの高度なオプション。

Layer 設定を編集して、Layer のインスタンスのプロファイルを指定することも可能です。

インスタンスプロファイルにより、IAM ロールが指定されます。インスタンスで実行するアプリケーションは、ロールのポリシーによって付与されたアクセス許可に応じて、AWS リソースにアクセスするためにそのロールを引き受けることができます。アプリケーションがロールを引き受ける方法の詳細については、「API コールを使用してロールを引き受ける」を参照してください。

次のいずれかの方法でインスタンスプロファイルを作成することができます。

  • スタックの作成時に、AWS OpsWorks スタックによって新規プロファイルが作成されるようにします。

    このプロファイルには aws-opsworks-ec2-role のような名前が付けられ、信頼関係はありますが、ポリシーはありません。

  • IAM コンソールまたは API を使用して、プロファイルを作成します。

    詳細については、「ロール (委任とフェデレーション)」を参照してください。

  • AWS CloudFormation テンプレートを使用して、プロファイルを作成します。

    IAM リソースをテンプレートに含める方法の例については、「Identity and Access Management (IAM) テンプレートスニペット」を参照してください。

インスタンスプロファイルには信頼関係と AWS のリソースへのアクセス許可を付与するアタッチされたポリシーがあります。AWS OpsWorks スタックによって作成されたインスタンスプロファイルには、次の信頼関係があります。

{ "Version": "2008-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "ec2.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }

ユーザーに代わって AWS OpsWorks スタックがタスクを実行するには、インスタンスプロファイルでこの信頼関係が必要です。デフォルトのサービスロールを使用する場合は、信頼関係を変更しないでください。カスタムサービスロールを作成する場合は、次のように信頼関係を指定します。

  • [IAM console] で [Create Role] ウィザードを使用している場合、ウィザードの 2 ページ目の [AWS Service Roles] で [Amazon EC2] ロールタイプを指定します。

  • AWS CloudFormation テンプレートを使用する場合は、テンプレートの [Resources] セクションに次のような行を追加できます。

    "Resources": { "OpsWorksEC2Role": { "Type": "AWS::IAM::Role", "Properties": { "AssumeRolePolicyDocument": { "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "ec2.amazonaws.com" ] }, "Action": [ "sts:AssumeRole" ] } ] }, "Path": "/" } }, "RootInstanceProfile": { "Type": "AWS::IAM::InstanceProfile", "Properties": { "Path": "/", "Roles": [ { "Ref": "OpsWorksEC2Role" } ] } } } }

独自のインスタンスプロファイルを作成する場合、適切なポリシーをプロファイルのロールに同時にアタッチすることができます。スタックの作成時に AWS OpsWorks スタックによってインスタンスプロファイルが作成されるようにしている場合、ポリシーはアタッチされないので、アクセス許可は付与されません。スタックを作成した後、IAM コンソールまたは API を使用して、適切なポリシーをプロファイルのロールにアタッチする必要があります。たとえば、次のポリシーは Amazon S3 のバケットへの完全アクセスを付与します。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:*", "Resource": "*" } ] }

インスタンスプロファイルの作成および使用方法の例については、「Amazon S3 バケットの使用」を参照してください。

アプリケーションで EC2 インスタンスから AWS OpsWorks スタック API を呼び出すためにインスタンスプロファイルが使用されている場合、AWS OpsWorks スタックや AWS の他のサービスに対する適切なアクションに加えて、iam:PassRole アクションもポリシーによって許可されている必要があります。iam:PassRole アクセス許可により、AWS OpsWorks スタックがユーザーに代わってサービスロールを引き受けることができるようになります。AWS OpsWorks スタックの API の詳細については、「AWS OpsWorks API リファレンス」を参照してください。

EC2 インスタンスからの AWS OpsWorks スタックアクションや Amazon EC2 または Amazon S3 アクションの呼び出しを許可する IAM ポリシーの例を次に示します。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:*", "s3:*", "opsworks:*", "iam:PassRole"], "Resource": "*" } ] }
注記

iam:PassRole を許可していない場合は、AWS OpsWorks スタックアクションを呼び出す試みが失敗し、次のようなエラーが表示されます。

User: arn:aws:sts::123456789012:federated-user/Bob is not authorized to perform: iam:PassRole on resource: arn:aws:sts::123456789012:role/OpsWorksStackIamRole

アクセス許可に EC2 インスタンスのロールを使用する詳細については、『AWS Identity and Access Management ユーザーガイド』の「Amazon EC2 インスタンスで実行されるアプリケーションに、AWS リソースへのアクセス許可を付与する」を参照してください。