4

私は Amazon cloudformation テクニックに非常に慣れていません。IAM ロールと共に ec2 インスタンスを起動しようとしています。

これには cloudformation スクリプトがあります。しかし、私が直面している問題は、IAM ロールと Ec2 インスタンスが作成されることですが、それらは互いに関連付けられていません。

AWS::IAM::Roleと を使用して IAM ロールを作成しましたAWS::IAM::InstanceProfile

他に使用すべきコマンドはありますか?

前もって感謝します。

4

3 に答える 3

15

最終結果を得るために掘る必要がありましたが、ここに例があります

  1. アクセス ロールの定義 (これにより、EC2 インスタンスがロールにステップイン/ロールを引き受けることができます)、
  2. ロールのポリシーを定義する (つまり、EC2 がロールを引き受けるとき、どのリソースにアクセスできるか)、
  3. インスタンス プロファイルの定義 (EC2 インスタンスによって参照され、アクセス ロールがマップされている)

    "S3AccessRole" : {
        "Type"  : "AWS::IAM::Role",
        "Properties" : {
            "AssumeRolePolicyDocument" : {
                "Statement" : [ {
                    "Effect" : "Allow",
                    "Principal" : {
                        "Service" : [ "ec2.amazonaws.com" ]
                    },
                    "Action" : [ "sts:AssumeRole" ]
                } ]
            },
            "Path" : "/"
        }
    },
    
    "S3RolePolicies" : {
        "Type" : "AWS::IAM::Policy",
        "Properties" : {
            "PolicyName" : "s3access",
            "PolicyDocument" : {
                "Statement" : [ {
                    "Effect" : "Allow",
                    "Action" : "s3:*",
                    "Resource" : "*"
                }]
            },
            "Roles" : [ { "Ref" : "S3AccessRole" } ]
        }
    },
    
    "S3InstanceProfile" : {
        "Type" : "AWS::IAM::InstanceProfile",
        "Properties" : {
            "Path" : "/",
            "Roles" : [ { "Ref" : "S3AccessRole" } ]
        }
    }
    

上記のポリシーは、s3 リソースへのすべてのアクセスを許可します。必要に応じて調整してください。EC2 インスタンス プロパティの IamInstanceProfile 参照は、{ "Ref" : "S3InstanceProfile" }

2015 年 5 月の時点で、IAM ロールを作成するスタックを作成するときは、そのような作成を承認するボックスをオンにする必要があることに注意してください。そうしないと、"Stack creation error: Requires capabilities : [CAPABILITY_IAM]"エラーが発生します。

于 2013-07-23T21:43:01.520 に答える
2

このような問題を解決する最も簡単な方法は、CloudFormerを使用することです。CloudFormerは、環境ですでに実行しているAWSリソースから開始点テンプレートを作成するツールです。

CloudFormerツールは、AWS環境内で起動できるスタンドアロンアプリケーションとしてパッケージ化されています。アプリケーションは、AWSCloudFormationを介してt1.microAmazonEC2インスタンスで開始されます。

Cloud Formerを起動すると、特定のリージョンのすべてのリソースを記述できるWebインターフェイスが表示されます(起動されたスタックの[出力]セクションのURLを確認してください)。各カテゴリ(DNS、ネットワーク、コンピューティングなど)で必要なリソースを案内します。最後に、テンプレートを表示してコピーするか、S3に保存できます。

ただし、手動で実行する場合は、AWS::IAM::InstanceProfile作成したPropertiesAWS::EC2::Instanceとしてに追加する必要があります。IamInstanceProfile

{
   "Type" : "AWS::EC2::Instance",
   "Properties" : {
      "AvailabilityZone" : String,
      "BlockDeviceMappings" : [ EC2 Block Device Mapping, ... ],
      "DisableApiTermination" : Boolean,
      "EbsOptimized" : Boolean,
      "IamInstanceProfile" : String,
      "ImageId" : String,
      "InstanceType" : String,
...
      "UserData" : String,
      "Volumes" : [ EC2 MountPoint, ... ]
   }
}

詳細はAWS::EC2::Instance こちらをご覧ください

于 2013-01-05T09:36:00.687 に答える
0

作成する AWS::IAM::InstanceProfile リソースの名前が であるとしMyNewRoleます。そのロールを持つインスタンスを (同じ CloudFormation テンプレートで) 作成するには、EC2 リソースのIamInstanceProfileプロパティをそのリソースへの Ref に設定します。以下に例を示します (他の多くの詳細は省きます)。

"Resources": {
    "MyNewRole": {
        "Type": "AWS::IAM::InstanceProfile",
        ... more stuff here
    },
    "MyNewEc2Instance": {
        "Type": "AWS::EC2::Instance",
        "Properties": {
            "IamInstanceProfile": { "Ref": "MyNewRole" },
            ... more stuff here
        }
    }
}
于 2013-01-07T15:55:15.507 に答える