2017-11-08 19 views
1

CloudFormationテンプレートでEC2インスタンスを作成し、そのインスタンスにS3バケットへのアクセス権を付与したいと考えています。AWSリソースとCloudFormationとの間のアクセス許可を付与する

1つの方法は、テンプレートに適切な権限を持つIAMユーザーを作成し、そのアクセスキーを使用してアクセスを許可することです。

しかし、そのユーザーにIAMサービスへのアクセスを許可したくない場合はどうすればよいですか? そのユーザーにIAMなしでこのテンプレートを展開させる方法はありますか?

UPDATE:

私はちょうどそのテンプレートを共有できるようにしたいので、既存のIAMリソース(役割、政策など)

+0

ユーザーが自分のアプリケーション、AWS CLIで使用するアクセスキーなどを生成しますが、インスタンスがバケットにアクセスするための適切な権限を持つ懸念していますか?またはテンプレートを実行するために必要なユーザーのアクセス許可が必要ですか? –

+0

テンプレートはIAMリソースを作成するため、テンプレートの実行に必要なユーザー権限が必要です。 – bananasplit

+0

私はあなたが雲情報サービスの役割を望んでいると思うhttp://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-iam-servicerole.html –

答えて

0
に依存関係を持たないことが可能である場合、私は疑問に思って

インスタンスに対してアクセス許可を与える一般的な方法はInstance Profilesです。必要なすべての権限を持つロールを作成し、そのロールをインスタンスプロファイルに割り当ててから、必要なインスタンスにプロファイルを割り当てます。

あなたはできdo this with CloudFormation

{ 
    "AWSTemplateFormatVersion": "2010-09-09", 
    "Resources": { 
     "myEC2Instance": { 
     "Type": "AWS::EC2::Instance", 
     "Version": "2009-05-15", 
     "Properties": { 
      "ImageId": "ami-205fba49", 
      "InstanceType": "t2.micro", 
      "IamInstanceProfile": { 
       "Ref": "RootInstanceProfile" 
      } 
     } 
     }, 
     "MyRole": { 
     "Type": "AWS::IAM::Role", 
     "Properties": { 
      "AssumeRolePolicyDocument": { 
       "Version" : "2012-10-17", 
       "Statement": [ { 
        "Effect": "Allow", 
        "Principal": { 
        "Service": [ "ec2.amazonaws.com" ] 
        }, 
        "Action": [ "sts:AssumeRole" ] 
       } ] 
      }, 
      "Path": "/" 
     } 
     }, 
     "RolePolicies": { 
     "Type": "AWS::IAM::Policy", 
     "Properties": { 
      "PolicyName": "s3", 
      "PolicyDocument": { 
       "Version" : "2012-10-17", 
       "Statement": [ { 
        "Effect": "Allow", 
        "Action":["s3:PutObject","s3:PutObjectAcl"], 
        "Resource":["arn:aws:s3:::examplebucket/*"], 
       } ] 
      }, 
      "Roles": [ { "Ref": "MyRole" } ] 
     } 
     }, 
     "RootInstanceProfile": { 
     "Type": "AWS::IAM::InstanceProfile", 
     "Properties": { 
      "Path": "/", 
      "Roles": [ { "Ref": "MyRole" } ] 
     } 
     } 
    } 
} 

このテンプレートIAMのアクセスを配備するユーザーを与えないようにしたい場合は、テンプレートを展開する前に、インスタンスプロファイルを作成して、テンプレート内に既存のインスタンスプロファイルを指定することができます。私はまだそれを試していないが、それはec2:AssociateIamInstanceProfileを必要とするだけで、あなたはその特定のプロファイルに制約することができるはずです。

+0

欠点は、テンプレートが動作するための前提条件を必要とすることです。しかし、フィードバックのおかげで、周りには何の道もないかもしれません。 – bananasplit

+0

どちらの方法でも前提条件があります。アクセスキー、インスタンスプロファイル、アカウント内のすべてのユーザーに公開されているバケットにすることができます。しかし、バケツ自体も前提条件なので、これはバケット構成の拡張だと考えています。 – kichik

0

IAMサービスの意味によって異なります。

特定のAWSサービスにアクセス権を付与し、その他のアクセス権を付与しないIAMユーザアクセスキーを作成できます。アクセスキーではIAMコンソールアクセスは許可されません(ログイン資格情報またはフェデレーションが必要です)。あなたのテンプレートを実行するためにCloudFormationを使用する

  • 権限:ご利用の場合、ユーザーは最低でも必要になりますについては

  • EC2インスタンスを作成する権限。

これらのアクセス許可は、AWS管理コンソールのIAMユーザーに追加するポリシーで定義されます。コンソールにログインできないユーザーを作成できます。そして、あなたは

Overview of IAM Policies

+0

これはec2インスタンス自体のパーミッションをs3に設定する方法には答えていません。 – bananasplit

+0

あなたの質問でそのリクエストが表示されませんでした。テンプレートの展開については、ちょっとしたことです。私は私の答えを更新します。 EC2の役割についてS3に必要な権限で質問を編集してください。 –

関連する問題