ในสภาพแวดล้อมการทดสอบเพื่อจำลองปัญหาที่ใหญ่ขึ้น ฉันมีผู้ใช้ IAM ที่มีโปรไฟล์ IAM ที่แนบโดยตรง ฉันได้ลองกับโปรไฟล์ที่แนบมากับบทบาท IAM ซึ่งผู้ใช้ IAM ได้สันนิษฐานไว้
โปรไฟล์นี้อนุญาตให้ CloudFormation สร้าง VPC ด้วยซับเน็ต IPv6CidrBlock และ IPv6Cidr กลุ่มเมฆนี้ถูกสร้างขึ้นอย่างดีเสมอใน us-east-1 และบางภูมิภาค เมื่อทำการทดสอบเพิ่มเติม ภูมิภาคอื่นมักจะล้มเหลวเสมอ การสร้างซับเน็ต IPv6 ล้มเหลว การตรวจสอบพบว่าจำเป็นต้องมีการดำเนินการกับโปรไฟล์ IAM เพิ่มเติม "ec2:DescribeNetworkAcls" สำหรับบางภูมิภาค ตัวอย่างเช่น us-east-1 และ eu-west-2 ไม่ต้องการการดำเนินการเพิ่มเติม eu-central-1 และภูมิภาคอื่นๆ อีกหลายแห่งจำเป็นต้องมีการดำเนินการกับโปรไฟล์ IAM เพิ่มเติม
- มีเหตุผลใดที่ทราบสำหรับข้อกำหนดที่แตกต่างกันในภูมิภาคนี้หรือไม่ มีการตั้งค่าบริการ EC2 หรือ VPC ใดบ้างที่สามารถสอบถามเพื่อดูความแตกต่างได้หรือไม่
- เหตุใด CloudTrail จึงไม่บันทึกข้อความความล้มเหลวเมื่อโปรไฟล์ IAM ไม่มีการดำเนินการ "ec2:DescribeNetworkAcls"
- สำหรับภูมิภาคที่ล้มเหลวก่อนหน้านี้ เมื่อมีการเพิ่มการดำเนินการไปยังโปรไฟล์ IAM เมื่อทำการทดสอบอีกครั้ง CloudTrail จะไม่บันทึกเหตุการณ์ที่สำเร็จซึ่งมีชื่อว่า "DescribeNetworkAcls" แม้ว่ามันจะบันทึกเหตุการณ์ที่เกี่ยวข้องอื่นๆ ทั้งหมดก็ตาม
ข้อผิดพลาดที่แสดงใน CloudFormation แต่ไม่ใช่ CloudTrail:
"สถานะทรัพยากร": "CREATE_FAILED",
LogicalId: ซับเน็ต,
"ResourceStatusReason":
"ไม่สามารถเรียกแอตทริบิวต์ Ipv6CidrBlocks สำหรับ AWS::EC2::VPC โดยมีข้อความแสดงข้อผิดพลาด คุณไม่ได้รับอนุญาตให้ดำเนินการนี้ (บริการ: Ec2, รหัสสถานะ: 403, รหัสคำขอ: XXX, รหัสคำขอเพิ่มเติม: null) .
เมื่อเกิดข้อผิดพลาด การเพิ่มการดำเนินการตามนโยบาย IAM ต่อไปนี้จะช่วยแก้ปัญหาได้ แม้ว่าชื่อเหตุการณ์นี้จะไม่ถูกบันทึกโดย CloudTrail:
"ec2:DescribeNetworkAcls"
เทมเพลต Cloudformation:
---
AWSTเทมเพลตรูปแบบเวอร์ชัน: '2010-09-09'
คำอธิบาย: 'ชุดทดสอบ'
ทรัพยากร:
วีพีซี:
ประเภท: AWS::EC2::VPC
คุณสมบัติ:
CidrBlock: 172.16.0.0/16
เปิดใช้งานDnsSupport: จริง
เปิดใช้งานชื่อโฮสต์ DNS: จริง
InstanceTenancy: ค่าเริ่มต้น
VPCIPv6:
ประเภท: AWS::EC2::VPCCidrBlock
คุณสมบัติ:
AmazonProvidedIpv6CidrBlock: จริง
VpcId: !อ้างอิง VPC
เครือข่ายย่อย:
ประเภท: AWS::EC2::ซับเน็ต
ขึ้นอยู่กับ:
- วีพีซีไอพีv6
คุณสมบัติ:
CidrBlock: 172.16.254.0/23
Ipv6CidrBlock: !Select [0, !Cidr [!Select [0, !GetAtt 'VPC.Ipv6CidrBlocks'], 1, 64]]
MapPublicIpOnLaunch: เท็จ
VpcId: !อ้างอิง VPC
นโยบาย IAM
{
"เวอร์ชัน": "2012-10-17",
"คำแถลง": [
{
"ซิด": "CloudFormationStackActions",
"เอฟเฟกต์": "อนุญาต",
"หนังบู๊": [
"รูปแบบคลาวด์: CreateStack",
"รูปแบบคลาวด์: UpdateStack",
"รูปแบบคลาวด์:DescribeStacks",
"รูปแบบคลาวด์: DescribeStackEvents",
"รูปแบบคลาวด์: ListStackResources"
],
"ทรัพยากร": [
"*"
]
},
{
{
"ซิด": "TESTINGVPCIPv6Subnet",
"เอฟเฟกต์": "อนุญาต",
"หนังบู๊": [
"ec2:CreateVpc",
"ec2:CreateSubnet",
"ec2:เชื่อมโยง VpcCidrBlock",
"ec2:AssociateSubnetCidrBlock",
"ec2:ModifyVpcAttribute",
"ec2:DescribeVpcAttribute",
"ec2:DescribeVpcs",
"ec2:DescribeSubnets"
],
"ทรัพยากร": [
"*"
]
}
]
}
ในการสืบพันธุ์:
- บันทึกข้อความการก่อตัวของเมฆด้านบนลงในไฟล์ชื่อ "a-test-stack-template.yaml"
- ตั้งค่าตัวแปร bash ชั่วคราวชื่อ
aws_cred_profile
ด้วยชื่อโปรไฟล์ aws credentials ที่จะใช้สำหรับคำสั่ง aws cli เครดิตควรเป็นของผู้ใช้ IAM พร้อมแนบโปรไฟล์ IAM ด้านบน ใช้ค่าเริ่มต้นหากมีข้อมูลรับรองเพียงชุดเดียว
aws_cred_profile=ค่าเริ่มต้น
- คำสั่ง AWS CLI เพื่อทดสอบการจำลอง:
aws_region=eu-central-1
# aws cli สร้างกอง
test_env=$(aws cloudformation create-stack --region $aws_region --no-cli-เพจเจอร์ \
--profile $aws_cred_profile --disable-ย้อนกลับ \
--stack-name test-$(วันที่ +%Y%b%d-%H%M%S) \
--ไฟล์ template-body://a-test-stack-template.yaml \
| sed -r -e 's/.*:stack\/(.*)\/.*/\1/' | sed '1d' | s '2d')
สะท้อน $test_env
# โทรซ้ำไปยัง list-stack-resources จนกว่าการสร้าง stack จะเสร็จสมบูรณ์
aws cloudformation list-stack-resources --region $aws_region --no-cli-pager \
--stack-name=$test_env --max-items=3