example/hybrid-ira-cfn.yaml (98 lines of code) (raw):
AWSTemplateFormatVersion: '2010-09-09'
Description: 'Create the IAM Roles Anywhere 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'
CertAttributeTrustPolicy:
Type: String
Description: The certificate attribute to use in the condition for the IAM Roles Anywhere AssumeRole action.
Default: '${aws:PrincipalTag/x509Subject/CN}'
AllowedValues:
- '${aws:PrincipalTag/x509Subject/CN}'
- '$(aws:PrincipalTag/x509SAN/Name/CN}'
CABundleCert:
Type: String
Description: The PEM formatted CA certificate body
Resources:
IAMRATrustAnchor:
Type: AWS::RolesAnywhere::TrustAnchor
Properties:
Enabled: true
Name: !Sub '${AWS::StackName}-iamra-trust-anchor'
Source:
SourceType: CERTIFICATE_BUNDLE
SourceData:
X509CertificateData: !Ref CABundleCert
IAMRAProfile:
Type: AWS::RolesAnywhere::Profile
DependsOn: EKSHybridNodesRole
Properties:
Enabled: true
Name: !Sub '${AWS::StackName}-iamra-profile'
RoleArns:
- !GetAtt EKSHybridNodesRole.Arn
AcceptRoleSessionName: true
EKSHybridNodesRole:
Type: AWS::IAM::Role
DependsOn: IAMRATrustAnchor
Properties:
RoleName: !Ref RoleName
ManagedPolicyArns:
- arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryPullOnly
Policies:
- PolicyName: EKSDescribeCluster
PolicyDocument:
Version: '2012-10-17'
Statement:
- Effect: Allow
Action:
- 'eks:DescribeCluster'
Resource: '*'
AssumeRolePolicyDocument:
Version: 2012-10-17
Statement:
- Effect: Allow
Principal:
Service:
- rolesanywhere.amazonaws.com
Action:
- 'sts:TagSession'
- 'sts:SetSourceIdentity'
Condition:
ArnEquals:
'aws:SourceArn': !GetAtt IAMRATrustAnchor.TrustAnchorArn
- Effect: Allow
Principal:
Service:
- rolesanywhere.amazonaws.com
Action:
- 'sts:AssumeRole'
Condition:
StringEquals:
'sts:RoleSessionName': !Ref CertAttributeTrustPolicy
Outputs:
EKSHybridNodesRole:
Description: EKS Hybrid Nodes IAM role
Value: !Ref EKSHybridNodesRole
Export:
Name: EKSHybridNodesRole
EKSHybridNodesRoleARN:
Description: ARN of the EKS Hybrid Nodes IAM role
Value: !GetAtt EKSHybridNodesRole.Arn
Export:
Name: EKSHybridNodesRoleARN
IAMRATrustAnchorARN:
Description: ARN of the IAM Roles Anywhere trust anchor
Value: !GetAtt IAMRATrustAnchor.TrustAnchorArn
Export:
Name: IRATrustAnchorARN
IAMRAProfileARN:
Description: ARN of the IAM Roles Anywhere profile
Value: !GetAtt IAMRAProfile.ProfileArn
Export:
Name: IAMRAProfileARN