Вы можете создать собственный ресурс, который будет вызывать UploadSSHPublicKey .Должно работать что-то похожее на следующее.
Не забудьте изменить значение SSHPublicKeyBody
на нужный вам ключ.
Resources:
UploadSshKeyRole:
Type: AWS::IAM::Role
Properties:
AssumeRolePolicyDocument:
Version: '2012-10-17'
Statement:
- Action: sts:AssumeRole
Effect: Allow
Principal:
Service: lambda.amazonaws.com
ManagedPolicyArns:
- arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole
Policies:
- PolicyName: UploadSSHKey
PolicyDocument:
Version: '2012-10-17'
Statement:
- Action: iam:UploadSSHPublicKey
Effect: Allow
Resource: !Sub ${ItS3User.Arn}
UploadKeyFunction:
Type: AWS::Lambda::Function
Properties:
Runtime: python3.6
Handler: index.handler
Role: !Sub ${UploadSshKeyRole.Arn}
Timeout: 60
Code:
ZipFile: |
import boto3
import cfnresponse
import traceback
def handler(event, context):
try:
response = boto3.client('iam').upload_ssh_public_key(
UserName=event['ResourceProperties']['Username'],
SSHPublicKeyBody=event['ResourceProperties']['SSHPublicKeyBody'],
)
cfnresponse.send(event, context, cfnresponse.SUCCESS, {}, "ok")
except:
traceback.print_last()
cfnresponse.send(event, context, cfnresponse.FAIL, {}, "ok")
UploadSshKey:
Type: Custom::UploadSshKey
Properties:
ServiceToken: !Sub ${UploadKeyFunction.Arn}
UserName: !Ref ItS3User
SSHPublicKeyBody: "XXX INSERT PUBLIC KEY HERE XXX"