現時点では、異なるインスタンスの特定のキーパス(つまり、フォルダー)への特定のアクセス権を持つ共有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を見つけて、参照してみましたが、少し行き詰まっています。
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
管理ポリシー を使用してこれを実現できます。共有する定義済みポリシーをカスタマー管理ポリシーに配置し、その定義済みポリシーを、それを使用する各ロールにアタッチします。管理ポリシーに対する将来の変更は、管理ポリシーが関連付けられているすべてのロールにすぐに適用されます。
AWS :: IAM :: ManagedPolicy リソースを使用して、CloudFormationで顧客管理ポリシーを作成するか、既存の管理ポリシーをアタッチできます。
@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": [
...
]
}
}
}