Într-un mediu de testare pentru a simula o problemă mai mare, am un utilizator IAM cu un profil IAM direct atașat. Am încercat și cu profilul atașat unui rol IAM pe care și l-a asumat utilizatorul IAM.
Profilul permite CloudFormation să creeze un VPC cu IPv6CidrBlock și subrețea IPv6Cidr. Această stivă cloud este întotdeauna creată bine în us-east-1 și în alte regiuni. După teste ulterioare, alte regiuni eșuează întotdeauna. Crearea subrețelei IPv6 eșuează. Investigația a constatat că o acțiune suplimentară de profil IAM, „ec2:DescribeNetworkAcls” este necesară pentru unele regiuni. De exemplu, us-east-1 și eu-west-2 nu necesită acțiune suplimentară. eu-central-1 și alte câteva regiuni necesită acțiunea suplimentară a profilului IAM.
- Există vreun motiv cunoscut pentru această cerință diferită între regiuni? Există vreo setare de serviciu EC2 sau VPC care poate fi interogată pentru a vedea diferența?
- De ce CloudTrail nu înregistrează mesajul de eroare când profilului IAM lipsește acțiunea „ec2:DescribeNetworkAcls”?
- Pentru regiunile anterioare eșuate, când acțiunea este adăugată la profilul IAM, la retestare, CloudTrail nu înregistrează evenimentul de succes numit „DescribeNetworkAcls”, deși înregistrează toate celelalte evenimente asociate.
Eroarea afișată în CloudFormation, deși nu în CloudTrail:
„ResourceStatus”: „CREATE_FAILED”,
LogicalId: subrețea,
„ResourceStatusReason”:
„Imposibil de preluat atributul Ipv6CidrBlocks pentru AWS::EC2::VPC, cu mesaj de eroare Nu sunteți autorizat să efectuați această operațiune. (Serviciul: Ec2, Cod de stare: 403, ID cerere: XXX, ID cerere extins: nul). .
Când apare eroarea, adăugarea următoarei acțiuni de politică IAM rezolvă problema. Deși, totuși, acest eventName nu este niciodată înregistrat de CloudTrail:
„ec2:DescribeNetworkAcls”
Șablon de formare a norilor:
---
AWSTemplateFormatVersion: '2010-09-09'
Descriere: „Stiva de testare”
Resurse:
VPC:
Tip: AWS::EC2::VPC
Proprietăți:
CidrBlock: 172.16.0.0/16
EnableDnsSupport: adevărat
EnableDnsHostnames: adevărat
InstanceTenancy: implicit
VPCIPv6:
Tip: AWS::EC2::VPCCidrBlock
Proprietăți:
AmazonProvidedIpv6CidrBlock: adevărat
VpcId: !Ref VPC
Subrețea:
Tip: AWS::EC2::Subnet
Depinde de:
- VPCIPv6
Proprietăți:
CidrBlock: 172.16.254.0/23
Ipv6CidrBlock: !Selectați [0, !Cidr [!Selectați [0, !GetAtt 'VPC.Ipv6CidrBlocks'], 1, 64]]
MapPublicIpOnLaunch: fals
VpcId: !Ref VPC
Politica IAM
{
„Versiune”: „2012-10-17”,
"Afirmație": [
{
"Sid": "CloudFormationStackActions",
„Efect”: „Permite”,
"Acțiune": [
„cloudformation:CreateStack”,
„cloudformation:UpdateStack”,
„cloudformation:DescribeStacks”,
„cloudformation:DescribeStackEvents”,
„cloudformation:ListStackResources”
],
„Resurse”: [
"*"
]
},
{
{
„Sid”: „TESTINGVPCIPv6Subnet”,
„Efect”: „Permite”,
"Acțiune": [
"ec2:CreateVpc",
"ec2:CreateSubnet",
„ec2:AssociateVpcCidrBlock”,
„ec2:AssociateSubnetCidrBlock”,
„ec2:ModifyVpcAttribute”,
„ec2:DescribeVpcAttribute”,
„ec2:DescribeVpcs”,
„ec2:DescribeSubnets”
],
„Resurse”: [
"*"
]
}
]
}
A reproduce:
- Salvați textul de formare a norului de mai sus într-un fișier numit „a-test-stack-template.yaml”
- Setați variabila bash temporară numită
aws_cred_profile
cu numele profilului aws credentials care va fi folosit pentru comenzile aws cli. Acreditările ar trebui să fie ale utilizatorului IAM cu profilul IAM de mai sus atașat. Utilizați implicit dacă există un singur set de acreditări
aws_cred_profile=implicit
- Comenzi AWS CLI pentru a testa macheta:
aws_region=eu-central-1
# aws cli create-stack
test_env=$(aws cloudformation create-stack --region $aws_region --no-cli-pager \
--profile $aws_cred_profile --disable-rollback \
--stack-name test-$(data +%Y%b%d-%H%M%S) \
--template-body file://a-test-stack-template.yaml \
| sed -r -e 's/.*:stiva\/(.*)\/.*/\1/' | sed '1d' | sed '2d')
echo $test_env
# repetă apelurile către list-stack-resources până când crearea stivei este completă
aws cloudformation list-stack-resources --region $aws_region --no-cli-pager \
--stack-name=$test_env --max-items=3