es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo crear un documento de política IAM con múltiples declaraciones utilizando CDK Python?

Estoy tratando de escribir un PolicyDocument IAM con múltiples declaraciones usando Python en CDK, pero no pude encontrar ejemplos en ningún lugar.

Esto es lo que tengo en YAML y estoy tratando de escribir en CDK usando Python.

Lambda:
    Type: AWS::IAM::Role
    Properties:
      RoleName:
        Fn::Sub: LambdaRole
      Policies:
        - PolicyName:
            Fn::Sub: LambdaPolicy
          PolicyDocument:
            Version: 2012-10-17
            Statement:
              - Sid: ADPermissions
                Effect: Allow
                Action:
                  - ssm:SendCommand
                  - ec2:DescribeInstances
                  - ds:DescribeDirectories
                  - ssm:GetParameter
                  - ssm:PutParameter
                  - ssm:StartAutomationExecution
                  - dynamodb:Scan
                  - dynamodb:Query
                  - sts:AssumeRole
                Resource: "*"
              - Sid: SQS
                Effect: Allow
                Action:
                  - sqs:SendMessage
                Resource: "*"
              - Sid: CloudWatch
                Effect: Allow
                Action:
                  - logs:CreateLogGroup
                  - logs:CreateLogStream
                  - logs:PutLogEvents
                Resource: "*"

Escribí lo siguiente basándome en el YAML, pero me está dando errores. Cualquier ayuda para esto es muy apreciada.

RolePolicy.add_to_policy(
            iam.PolicyDocument(
                statements = [
                    iam.PolicyStatement(
                        effect = iam.Effect.ALLOW,
                        actions = [
                            'ssm:SendCommand',
                            'ec2:DescribeInstances',
                            'ds:DescribeDirectories',
                            'ssm:GetParameter',
                            'ssm:PutParameter',
                            'ssm:StartAutomationExecution',
                            'sts:AssumeRole'
                        ],
                        resources = ['*']
                     )
                ]
            ),
            iam.PolicyDocument(
                statements = [
                    iam.PolicyStatement(
                        effect = iam.Effect.ALLOW,
                        actions = [
                            'sqs:SendMessage'
                        ],
                        resources = ['*']
                    )
                ]
            ),
            iam.PolicyDocument(
                statements = [
                    iam.PolicyStatement(
                        effect = iam.Effect.ALLOW,
                        actions = [
                            'logs:CreateLogGroup',
                            'logs:CreateLogStream',
                            'logs:PutLogEvents'
                        ],
                        resources = ['*']
                    )
                ]
            )
        )
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El método add_to_policy solo acepta un PolicyDocument. Para crear un solo PolicyDocument con múltiples declaraciones, utiliza el siguiente código:

    RolePolicy.add_to_policy(
        iam.PolicyDocument(
            statements=[
                iam.PolicyStatement(
                    effect=iam.Effect.ALLOW,
                    actions=[
                        'ssm:SendCommand',
                        'ec2:DescribeInstances',
                        'ds:DescribeDirectories',
                        'ssm:GetParameter',
                        'ssm:PutParameter',
                        'ssm:StartAutomationExecution',
                        'sts:AssumeRole'
                    ],
                    resources=['*']
                ),
                iam.PolicyStatement(
                    effect=iam.Effect.ALLOW,
                    actions=[
                        'sqs:SendMessage'
                    ],
                    resources=['*']
                ),
                iam.PolicyStatement(
                    effect=iam.Effect.ALLOW,
                    actions=[
                        'logs:CreateLogGroup',
                        'logs:CreateLogStream',
                        'logs:PutLogEvents'
                    ],
                    resources=['*']
                )
            ]
        )
    )
    

    Este código crea un solo PolicyDocument con tres objetos PolicyStatement, cada uno definiendo un conjunto diferente de acciones y recursos.

Comments are closed.