Политика AWS для чтения/записи RDS

Политика AWS для чтения/записи RDS

В моем сценарии я хочу политику, которая разрешит чтение и запись abc-database-backups/rds/postgresql-backupна S3? Мы хотим, чтобы мои серверы имели этот доступ.

Что лучше: создать роль и прикрепить ее к серверам или добавить ключ к серверу?

Я попробовал это:

aws iam create-policy \
     --policy-name rds-s3-integration-policy \
     --policy-document '{
            "Version": "2012-10-17",
            "Statement": [
                {
                    "Effect": "Allow",
                    "Action": "s3:ListAllMyBuckets",
                    "Resource": "*"
                },
                {
                    "Effect": "Allow",
                    "Action": [
                        "s3:ListBucket",
                        "s3:GetBucketACL",
                        "s3:GetBucketLocation"
                    ],
                    "Resource": "arn:aws:s3:::bucket_name"
                },
                {
                    "Effect": "Allow",
                    "Action": [
                        "s3:GetObject",
                        "s3:PutObject",
                        "s3:ListMultipartUploadParts",
                        "s3:AbortMultipartUpload"
                    ],
                    "Resource": "arn:aws:s3:::bucket_name/key_prefix/*"
                }
            ]
        }' 

Я был бы очень благодарен за любую помощь, так как мой опыт в этой области несколько ограничен.

решение1

Использоватьроль, связанная с обслуживаниемдля RDS, чтобы предоставить доступ к S3 и любым другим именованным ресурсам, которые вам требуются. Убедитесь, что экземпляр RDS имеет эту роль. Вам также следует прочитатьэтот документоб импорте данных S3 в RDS PostgreSQL с использованием расширения.

Я адаптировал некоторую инфраструктуру CloudFormation как код, который у меня есть, который должен настроить роль. Вам нужно будет изменить разрешения и имя контейнера в соответствии с вашими требованиями. Он должен работать как есть, но мне пришлось подправить свой существующий код, поэтому если он не работает на 100%, пожалуйста, отредактируйте пост или комментарий, чтобы я мог его отредактировать.

AWSTemplateFormatVersion: '2010-09-09'
Description: Role for RDS

Resources:    
    RdsS3IntegrationRole:
        Type: AWS::IAM::Role
        Properties:
            RoleName: RdsS3IntegrationRole
            AssumeRolePolicyDocument:
                Version: 2012-10-17
                Statement:
                    -
                        Effect: Allow
                        Principal:
                            Service:
                                - rds.amazonaws.com
                        Action:
                            - sts:AssumeRole
                
    RDSS3IntegrationPolicy:
        Type: AWS::IAM::Policy
        Properties:
            Roles:
                - !Ref 'RdsS3IntegrationRole'
            PolicyName: RDSS3IntegrationPolicy
            PolicyDocument:
                Statement:
                    - Effect: Allow
                        Action:
                            - s3:GetObject
                            - s3:ListBucket 
                            - s3:PutObject 
                        Resource:
                            - !Sub 'arn:aws:s3:::bucketname/*'
                            - !Sub 'arn:aws:s3:::bucketname'
                    - Effect: Allow
                        Action:
                            - kms:Decrypt
                            - kms:Encrypt
                            - kms:GenerateDataKey
                            - kms:ReEncryptTo
                            - kms:DescribeKey
                            - kms:ReEncryptFrom
                        Resource:
                            - !Sub 'arn:aws:kms:ap-southeast-2:${AWS::AccountId}:key/*'

Связанный контент