2017-01-09 9 views
0

Облако формирует ведро S3 с пользователем, ключами доступа и политикой. Он должен создать стек и вывести ключи доступа пользователя, необходимые для работы с созданным ведром S3 через SDK. Политика ведро застряла на этапе СОЗДАНИЯ навсегда при попытке ссылаться на ARN BucketUser в Принципе BucketPolicy.CloudFormation BucketPolicy застрял в CREATE. Никогда не завершено CREATE

CloudFormation успешно с

BucketPolicy: ... Principal: "*"

Но BucketPolicy ресурс застрял в СОЗДАТЬ навсегда

BucketPolicy: ... Principal: !GetAtt BucketUser.Arn

Это успешно возвращает BucketUser.Arn когда BucketPolicy: ... Principal: "*"

Outputs: 
    BucketUserArn: 
    Value: !GetAtt BucketUser.Arn 

Желаемая Шаблон:

AWSTemplateFormatVersion: "2010-09-09" 
Description: "Creates bucket with bucket policy" 
#Metadata: 
Parameters: 
    app: 
    Type: String 
    Description: (required) Application name (Also used for bucket name. Follow S3 bucket name conventions) 
    Default: ymessage-bucket-test 
Resources: 
    BucketUser: 
    Type: "AWS::IAM::User" 
    Properties: 
     UserName: !Ref app 
    UserAccessKey: 
    Type: "AWS::IAM::AccessKey" 
    Properties: 
     Status: Active 
     UserName: !Ref app 
    DependsOn: BucketUser 
    Bucket: 
    Type: AWS::S3::Bucket 
    Properties: 
     BucketName: !Ref app 
    BucketPolicy: 
     Type: "AWS::S3::BucketPolicy" 
     Properties: 
     Bucket: !Ref app 
     PolicyDocument: 
      Statement: 
      - 
       Action: 
       - "s3:*" 
       Effect: "Allow" 
       Resource: 
       Fn::Join: 
        - "" 
        - 
        - "arn:aws:s3:::" 
        - !Ref app 
        - "/*" 
       Principal: !GetAtt BucketUser.Arn 
     DependsOn: BucketUser 
Outputs: 
    AccessKeyId: 
    Value: !Ref UserAccessKey 
    AccessKeySecret: 
    Value: !GetAtt UserAccessKey.SecretAccessKey 
    BucketURL: 
    Value: !GetAtt Bucket.WebsiteURL 
    BucketUserArn: 
    Value: !GetAtt BucketUser.Arn 

Рабочая шаблона:

AWSTemplateFormatVersion: "2010-09-09" 
Description: "Creates bucket with bucket policy" 
#Metadata: 
Parameters: 
    app: 
    Type: String 
    Description: (required) Application name (Also used for bucket name. Follow S3 bucket name conventions) 
    Default: ymessage-bucket-test 
Resources: 
    BucketUser: 
    Type: "AWS::IAM::User" 
    Properties: 
     UserName: !Ref app 
    UserAccessKey: 
    Type: "AWS::IAM::AccessKey" 
    Properties: 
     Status: Active 
     UserName: !Ref app 
    DependsOn: BucketUser 
    Bucket: 
    Type: AWS::S3::Bucket 
    Properties: 
     BucketName: !Ref app 
    BucketPolicy: 
     Type: "AWS::S3::BucketPolicy" 
     Properties: 
     Bucket: !Ref app 
     PolicyDocument: 
      Statement: 
      - 
       Action: 
       - "s3:*" 
       Effect: "Allow" 
       Resource: 
       Fn::Join: 
        - "" 
        - 
        - "arn:aws:s3:::" 
        - !Ref app 
        - "/*" 
       Principal: "*" 
     DependsOn: BucketUser 
Outputs: 
    AccessKeyId: 
    Value: !Ref UserAccessKey 
    AccessKeySecret: 
    Value: !GetAtt UserAccessKey.SecretAccessKey 
    BucketURL: 
    Value: !GetAtt Bucket.WebsiteURL 
    BucketUserArn: 
    Value: !GetAtt BucketUser.Arn 

ответ

0

Найдено вопрос: В BucketPolicy он может непосредственно принимать Principal: "*", но если вы хотите использовать Арн сделать это:

Principal: 
    AWS: 
    - !GetAtt BucketUser.Arn