-
-
Save glnds/dac9fb18c3cad10ba42a203526b8caf2 to your computer and use it in GitHub Desktop.
| --- | |
| AWSTemplateFormatVersion: '2010-09-09' | |
| Description: some-sftp-server | |
| Parameters: | |
| HostedZoneIdParam: | |
| Type: String | |
| Description: Hosted Zone ID | |
| SFTPHostnameParam: | |
| Type: String | |
| Description: Hostname for the SFTP Server | |
| Resources: | |
| SFTPServer: | |
| Type: AWS::Transfer::Server | |
| Properties: | |
| EndpointType: PUBLIC | |
| Tags: | |
| - Key: Application | |
| Value: some-sftp-servver | |
| SFTPServerDNSRecord: | |
| Type: AWS::Route53::RecordSet | |
| Properties: | |
| Name: !Ref SFTPHostnameParam | |
| HostedZoneId: !Ref HostedZoneIdParam | |
| Type: CNAME | |
| Comment: SFTP Transfer custom hostname | |
| TTL: 300 | |
| ResourceRecords: | |
| - !Sub ${SFTPServer.ServerId}.server.transfer.${AWS::Region}.amazonaws.com | |
| SFTPServerS3Bucket: | |
| Type: AWS::S3::Bucket | |
| DeletionPolicy: Retain | |
| Properties: | |
| BucketName: some-sftp-bucket | |
| PublicAccessBlockConfiguration: | |
| BlockPublicAcls: true | |
| BlockPublicPolicy: true | |
| IgnorePublicAcls: true | |
| RestrictPublicBuckets: true | |
| Tags: | |
| - Key: Application | |
| Value: some-sftp-servver | |
| SFTPUserRole: | |
| Type: AWS::IAM::Role | |
| Properties: | |
| AssumeRolePolicyDocument: | |
| Version: '2012-10-17' | |
| Statement: | |
| - Effect: Allow | |
| Principal: | |
| Service: | |
| - transfer.amazonaws.com | |
| Action: | |
| - sts:AssumeRole | |
| Path: / | |
| Policies: | |
| - PolicyName: S3FullAccess | |
| PolicyDocument: | |
| Version: '2012-10-17' | |
| Statement: | |
| - Effect: Allow | |
| Action: | |
| - s3:ListAllMyBuckets | |
| - s3:GetBucketLocation | |
| Resource: "*" | |
| - PolicyName: AllowListingOfUserFolder | |
| PolicyDocument: | |
| Version: '2012-10-17' | |
| Statement: | |
| - Effect: Allow | |
| Action: | |
| - s3:ListBucket | |
| Resource: !GetAtt SFTPServerS3Bucket.Arn | |
| - PolicyName: HomeDirObjectAccess | |
| PolicyDocument: | |
| Version: '2012-10-17' | |
| Statement: | |
| - Effect: Allow | |
| Action: | |
| - s3:PutObject | |
| - s3:GetObject | |
| - s3:GetObjectVersion | |
| - s3:DeleteObject | |
| - s3:DeleteObjectVersion | |
| Resource: !Sub "${SFTPServerS3Bucket.Arn}/*" | |
| TestUser: | |
| Type: AWS::Transfer::User | |
| Properties: | |
| ServerId: !GetAtt SFTPServer.ServerId | |
| UserName: john | |
| HomeDirectory: !Sub "/${SFTPServerS3Bucket}/home/john" | |
| Policy: > | |
| { | |
| "Version": "2012-10-17", | |
| "Statement": [ | |
| { | |
| "Sid": "AllowListingOfUserFolder", | |
| "Effect": "Allow", | |
| "Action": "s3:ListBucket", | |
| "Resource": "arn:aws:s3:::${transfer:HomeBucket}", | |
| "Condition": { | |
| "StringLike": { | |
| "s3:prefix": [ | |
| "home/${transfer:UserName}/*", | |
| "home/${transfer:UserName}" | |
| ] | |
| } | |
| } | |
| }, | |
| { | |
| "Sid": "HomeDirObjectAccess", | |
| "Effect": "Allow", | |
| "Action": [ | |
| "s3:PutObject", | |
| "s3:GetObject", | |
| "s3:GetObjectVersion", | |
| "s3:DeleteObject", | |
| "s3:DeleteObjectVersion" | |
| ], | |
| "Resource": "arn:aws:s3:::${transfer:HomeDirectory}*" | |
| } | |
| ] | |
| } | |
| Role: !GetAtt SFTPUserRole.Arn | |
| SshPublicKeys: | |
| - ssh-rsa AAAAB3NzaC1********************************cMNTZKrQTDjrpvCJ83w== [email protected] | |
| Tags: | |
| - Key: Application | |
| Value: some-sftp-server |
SFTPServerDNSRecord:
Type: AWS::Route53::RecordSet
Properties:
Name: !Ref SFTPHostnameParam
HostedZoneId: !Ref HostedZoneIdParam
Type: CNAME
Comment: SFTP Transfer custom hostname
TTL: 300
ResourceRecords:
- !Sub ${SFTPServer.ServerId}.server.transfer.${AWS::Region}.amazonaws.com
@mirwasim This will set a 'custom hostname' by using a CNAME record
Thanks @glnds, but what I meant was to update custom hostname in SFTP server. when you create from console you have an option to add a custom hostname but in template there is nothing of that sort and we do not have it in AWS documentation either.
You can use tags to do this:
Resources:
Server:
Type: AWS::Transfer::Server
Properties:
EndpointType: PUBLIC
Tags:
- Key: Name
Value: your-server-name-here
- Key: aws:transfer:customHostname
Value: sftp.YourHost.com
See https://docs.aws.amazon.com/transfer/latest/userguide/requirements-dns.html#tag-custom-hostname-cdk
How can I inject ssh-key values via AWS SecretManager in this type of configuration?
same question
"How can I inject ssh-key values via AWS SecretManager in this type of configuration?"
do you have cloud formation for FTPS server?
same question
"How can I inject ssh-key values via AWS SecretManager in this type of configuration?"
If your AWS Secret were a username/password combo and you wanted to access the password in Cloudformation then you could do something like this:
MySecretKey:
Type: AWS::KMS::Key
Properties:
KeyPolicy:
Statement:
- Sid: "Enable IAM User Permissions"
Effect: "Allow"
Principal:
AWS: !Sub arn:aws:iam::${AWS::AccountId}:root
Action: "kms:*"
Resource: "*"
MySecret:
Type: AWS::SecretsManager::Secret
Properties:
Name: !Sub "MySecret"
Description: !Sub "MySecret"
KmsKeyId: !Ref MySecretKey
GenerateSecretString:
SecretStringTemplate: !Sub '{"username":"admin"}'
GenerateStringKey: "password"
PasswordLength: 16
ExcludePunctuation: True
You can resolve the password for use elsewhere in your template using the following syntax:
!Sub "{{resolve:secretsmanager:${MySecret}::password}}"
I am not able to see how to add the custom hostname to it . is it something that is not supported by AWS CFN yet