example/hybrid-ssm-cfn.yaml (81 lines of code) (raw):
AWSTemplateFormatVersion: '2010-09-09'
Description: 'Creates the Systems Manager resources required for EKS Hybrid Nodes and the EKS Hybrid Nodes IAM role'
Metadata:
Version:
Number: "v0.0.5"
Parameters:
RoleName:
Type: String
Description: The role name for the EKS Hybrid Nodes IAM role
Default: 'AmazonEKSHybridNodesRole'
SSMDeregisterConditionTagKey:
Type: String
Description: The resource tag Key to use in the condition for the ssm:DeregisterManagedInstance action
Default: 'EKSClusterARN'
SSMDeregisterConditionTagValue:
Type: String
Description: The resource tag Value to use in the condition for the ssm:DeregisterManagedInstance action.
Resources:
EKSHybridNodesRole:
Type: AWS::IAM::Role
Properties:
RoleName: !Ref RoleName
AssumeRolePolicyDocument:
Version: '2012-10-17'
Statement:
- Effect: Allow
Principal:
Service: ssm.amazonaws.com
Action: 'sts:AssumeRole'
Condition:
StringEquals:
'aws:SourceAccount': !Sub '${AWS::AccountId}'
ArnEquals:
'aws:SourceArn': !Sub 'arn:aws:ssm:${AWS::Region}:${AWS::AccountId}:*'
Policies:
- PolicyName: EKSHybridSSMPolicy
PolicyDocument: !Sub
- |
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "ssm:DescribeInstanceInformation",
"Resource": "*"
},
{
"Effect": "Allow",
"Action": "ssm:DeregisterManagedInstance",
"Resource": "arn:aws:ssm:${AWS::Region}:${AWS::AccountId}:managed-instance/*",
"Condition": {
"StringEquals": {
"ssm:resourceTag/${SSMDeregisterConditionTagKey}": "${SSMDeregisterConditionTagValue}"
}
}
}
]
}
- SSMDeregisterConditionTagKey: !Ref SSMDeregisterConditionTagKey
SSMDeregisterConditionTagValue: !Ref SSMDeregisterConditionTagValue
- PolicyName: EKSDescribeClusterPolicy
PolicyDocument:
Version: '2012-10-17'
Statement:
- Effect: Allow
Action: 'eks:DescribeCluster'
Resource: '*'
ManagedPolicyArns:
- arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore
- arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryPullOnly
Outputs:
EKSHybridNodesRoleName:
Description: Name of the EKS Hybrid Nodes IAM role
Value: !Ref EKSHybridNodesRole
Export:
Name: EKSHybridNodesRoleSSM
EKSHybridNodesRoleARN:
Description: ARN of the EKS Hybrid Nodes IAM role
Value: !GetAtt EKSHybridNodesRole.Arn
Export:
Name: EKSHybridNodesRoleARNSSM