Cloudformationでは、既存のポリシーを参照する新しいロールを作成できますか?


10

現時点では、異なるインスタンスの特定のキーパス(つまり、フォルダー)への特定のアクセス権を持つ共有S3バケットがあります。新しいロールでインスタンスプロファイルを作成し、そのフォルダーへのアクセスに制限する問題をテストすることができました。

私の問題は、ポリシーが定義された既存の一般的な役割があり、それを各スタックの新しい役割に含められるようにしたいことです。

cloudformationでは、ある役割で定義されたポリシーを別の役割に含めることができますが、新しい役割でポリシードキュメントを再定義する必要はありませんか?

次のようなもの:

"AppTierS3AccessRole": {
        "Type": "AWS::IAM::Role",
        "Properties": {
            "AssumeRolePolicyDocument": {
                "Statement": [
                    {
                        "Effect": "Allow",
                        "Principal": {
                            "Service": [ "ec2.amazonaws.com" ]
                        },
                        "Action": [ "sts:AssumeRole" ]
                    }
                ]
            },
            "Path": "/",
            "Policies": [ { "Ref": "existing-policy" } ]
        }
    },

ここで重要なのは「既存のポリシー」です。既存のポリシーのarnを見つけて、それを参照してみましたが、少し行き詰まっています。


同じ解決策はおそらくインスタンスプロファイルに複数のロールを追加することで完了できますが、私が読んだことから、インスタンスプロファイルごとに1つのロールしか指定できないという制限があります。
hughmcmanus 14

回答:


12

src:https : //docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-role.html

AWS::IAM::Roleタイプは、今持っているManagedPolicyArnsあなたがこれを設定することができ、フィールドを。ARNを取得(IAMコンソールから簡単に取得)して、そのフィールドに配置するだけです。以下の例では、読み取り専用のECRアクセスを提供するロールを作成したため、イメージでECRからDockerコンテナーをプルできます。

  ecrRole:
    Type: AWS::IAM::Role
    Properties:
      Path: "/"
      ManagedPolicyArns:
        - "arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryReadOnly"
      AssumeRolePolicyDocument:
        Version: '2012-10-17'
        Statement:
        - Effect: Allow
          Principal:
            Service:
            - ec2.amazonaws.com
          Action:
          - sts:AssumeRole

4

これは、管理ポリシーを使用して実現できます。共有する定義済みポリシーをカスタマー管理ポリシーに配置し、その定義済みポリシーを、それを使用する各ロールに添付します。管理ポリシーに対する今後の変更は、管理ポリシーが関連付けられているすべてのロールにすぐに適用されます。

AWS :: IAM :: ManagedPolicyリソースを使用してCloudFormationで顧客管理ポリシーを作成するか、既存の管理ポリシーをアタッチできます。


3
Cloudformationでその方法を示すことができますか?
lony 2016年

1

@markuskの回答re:管理ポリシーを拡張するには-はい、それです。

例:

"ManagedPolicy": {
  "Type": "AWS::IAM::ManagedPolicy",
  "Properties": {
    "Description": "something descriptive",
    "Groups": [ ... ref(s) for groups ... ],
    "Roles: [{"Ref":"AppTierS3AccessRole"}],
    "Users": [ ... ref(s) for users ... ],
    "PolicyDocument": {
      "Version": "2012-10-17",
      "Statement": [
        ...
      ]
    }
  }
}

-1

いいえ、現時点では、ある役割を別の役割に埋め込むことはできません。私が考えることができる唯一の選択肢は:

  • AWS :: IAM :: InstanceProfileを使用して新しいインスタンスプロファイルを作成し、既存の汎用ロールをそれに割り当てます。
  • CloudFormationスタックを作成する前に、一般的な役割を複製するスクリプトを実行します。たとえば、新しいロールを作成し、既存の一般的なロールのすべてのポリシーをリストして、新しいロールでそれらを再作成します。次に、新しいロールをテンプレート内の新しいAWS :: IAM :: InstanceProfileリソースに割り当て、それをEC2インスタンスまたは起動構成に使用できます。

私はあなたの2番目の提案と同じようなことをしました。一般的な役割のポリシーをcloudformationテンプレートに移動し、作成する必要がある場合は新しい役割に追加します。
hughmcmanus 14

この回答は記述された時点では正しかったものの、AWSが管理ポリシーを導入して以来、ポリシーを再利用できるようになったため、より正確になりました。
markusk
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.