本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 控制 CloudFormation 存取 AWS Identity and Access Management
使用 AWS Identity and Access Management (IAM),您可以建立 IAM 使用者,並控制其對 中特定資源的存取 AWS 帳戶。當您使用 IAM 時,您可以控制使用者可以使用 CloudFormation 執行的動作,例如他們可以檢視堆疊範本、建立堆疊或刪除堆疊。
除了 CloudFormation 特定的動作之外,您還可以管理每個使用者可用的 AWS 服務和資源。如此一來,您就可以控制使用者在使用 CloudFormation 時可存取的資源。例如,您可以指定哪些使用者可以建立 Amazon EC2 執行個體、終止資料庫執行個體,或更新 VPC。這些相同的許可適用於使用 CloudFormation 執行這些動作的任何時候。
使用下列各節中的資訊來控制誰可以存取 CloudFormation。我們也將探索如何在範本中授權建立 IAM 資源、為在 EC2 執行個體上執行的應用程式提供所需的許可,以及使用臨時安全登入資料來增強 AWS 環境中的安全性。
定義 CloudFormation 的 IAM 身分型政策
使用 IAM 身分型政策,您可以指定允許或拒絕的動作和資源,以及在何種條件下允許或拒絕動作。CloudFormation 支援特定動作、資源和條件索引鍵。
如果您是初次使用 IAM,請先熟悉 IAM JSON 政策的元素。如需詳細資訊,請參閱《IAM 使用者指南》中的 IAM JSON 政策元素參考。 若要了解如何建立 IAM 政策,請完成教學課程 IAM 文件中的建立和連接您的第一個客戶受管政策。
CloudFormation 的政策動作
在 IAM 政策陳述式中,您可以從任何支援 IAM 的服務指定任何 API 動作。對於 CloudFormation,請使用下列字首搭配 API 動作的名稱:cloudformation:
。例如:cloudformation:CreateStack
、cloudformation:CreateChangeSet
和 cloudformation:UpdateStack
。
若要在單一陳述式中指定多個動作,請以逗號分隔它們,如下所示:
"Action": [ "cloudformation:
action1
", "cloudformation:action2
" ]
您也可以使用萬用字元指定多個動作。例如,您可以指定名稱開頭為字詞 的所有動作Get
,如下所示:
"Action": "cloudformation:Get*"
如需 CloudFormation API 動作的完整清單,請參閱服務授權參考中的 定義的動作 AWS CloudFormation。
範例
以下顯示授予檢視 CloudFormation 堆疊許可的許可政策範例。
範例 1:授予檢視堆疊許可的範例政策
{ "Version":"2012-10-17", "Statement":[{ "Effect":"Allow", "Action":[ "cloudformation:DescribeStacks", "cloudformation:DescribeStackEvents", "cloudformation:DescribeStackResource", "cloudformation:DescribeStackResources" ], "Resource":"*" }] }
建立或刪除堆疊的使用者需要根據其堆疊範本的額外許可。例如,如果您的範本描述 Amazon SQS 佇列,使用者必須同時擁有 CloudFormation 和 Amazon SQS 動作的許可,如下列範例政策所示。
範例 2:授予建立和檢視堆疊動作和所有 Amazon SQS 動作的範例政策
{ "Version":"2012-10-17", "Statement":[{ "Effect":"Allow", "Action":[ "sqs:*", "cloudformation:CreateStack", "cloudformation:DescribeStacks", "cloudformation:DescribeStackEvents", "cloudformation:DescribeStackResources", "cloudformation:GetTemplate", "cloudformation:ValidateTemplate" ], "Resource":"*" }] }
CloudFormation 的主控台特定動作
CloudFormation 主控台的使用者需要 AWS Command Line Interface 或 CloudFormation APIs 所需的額外許可。這些額外許可支援主控台特定的功能,例如範本上傳至 Amazon S3 儲存貯體,以及 AWS特定參數類型的下拉式清單。
針對下列所有動作,將許可授予所有資源;請勿將其限制為特定堆疊或儲存貯體。
下列動作僅供 CloudFormation 主控台使用,不會記錄在 API 參考中。此動作允許使用者將範本上傳至 Amazon S3 儲存貯體。
-
cloudformation:CreateUploadBucket
當使用者上傳範本時,使用者還需要下列 Amazon S3 許可:
-
s3:PutObject
-
s3:ListBucket
-
s3:GetObject
-
s3:CreateBucket
若要查看具有 AWS特定參數類型的範本參數下拉式清單中的值,使用者需要許可才能進行對應的描述 API 呼叫。例如,當範本中使用這些參數類型時,需要下列許可:
-
ec2:DescribeKeyPairs
–AWS::EC2::KeyPair::KeyName
參數類型的必要項目。 -
ec2:DescribeSecurityGroups
–AWS::EC2::SecurityGroup::Id
參數類型的必要項目。 -
ec2:DescribeSubnets
–AWS::EC2::Subnet::Id
參數類型的必要項目。 -
ec2:DescribeVpcs
–AWS::EC2::VPC::Id
參數類型的必要項目。
如需 AWS特定參數類型的詳細資訊,請參閱使用 CloudFormation 提供的參數類型在執行時間指定現有的資源。
CloudFormation 的政策資源
在 IAM 政策陳述式中,Resource
元素指定陳述式所涵蓋的一個或多個物件。對於 CloudFormation,每個 IAM 政策陳述式都適用於您使用其 Amazon Resource Name (ARNs) 指定的資源。特定 ARN 格式取決於 資源。
如需 CloudFormation 資源類型及其 ARNs 的完整清單,請參閱服務授權參考中的 定義的資源類型 AWS CloudFormation。若要了解您可以使用每個資源的 ARN 來指定哪些動作,請參閱 定義的動作 AWS CloudFormation。
您可以指定特定堆疊的動作,如下列政策範例所示。當您提供 ARN 時,請將 取代
為您的資源特定資訊。placeholder text
範例 1:拒絕刪除和更新指定堆疊之堆疊動作的範例政策
{ "Version":"2012-10-17", "Statement":[{ "Effect":"Deny", "Action":[ "cloudformation:DeleteStack", "cloudformation:UpdateStack" ], "Resource":"arn:aws:cloudformation:
region
:account-id
:stack/MyProductionStack
/*" }] }
上述政策在堆疊名稱結尾使用萬用字元,因此刪除堆疊和更新堆疊在完整堆疊 ID (例如 arn:aws:cloudformation:
) 和堆疊名稱 (例如 ) 上都會遭到拒絕region
:account-id
:stack/MyProductionStack
/abc9dbf0-43c2-11e3-a6e8-50fa526be49c
。MyProductionStack
若要允許AWS::Serverless
轉換建立變更集,請包含arn:aws:cloudformation:
資源層級許可,如下列政策所示。region
:aws:transform/Serverless-2016-10-31
範例 2:允許為指定轉換建立變更集動作的範例政策
{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "cloudformation:CreateChangeSet" ], "Resource": "arn:aws:cloudformation:
region
:aws:transform/Serverless-2016-10-31" }] }
CloudFormation 的政策條件索引鍵
在 IAM 政策陳述式中,您可以選擇指定條件,以控制政策何時生效。例如,您可以定義一項政策,讓 使用者只能在他們指定特定範本 URL 的時候建立堆疊。您可以定義 CloudFormation 特定條件和 AWS整體條件,例如 DateLessThan
,指定政策何時停止生效。如需詳細資訊和 AWS全局條件清單,請參閱《IAM 使用者指南》中的 IAM 政策元素參考中的條件。
注意
請勿使用 aws:SourceIp
AWS全局條件。CloudFormation 會使用自己的 IP 地址佈建資源,而不是原始請求的 IP 地址。例如,當您建立堆疊時,CloudFormation 會從其 IP 地址發出請求,以啟動 Amazon EC2 執行個體或建立 Amazon S3 儲存貯體,而不是從CreateStack
呼叫或create-stack命令的 IP 地址。
下列清單說明 CloudFormation 特定的條件。這些條件只適用於使用者建立或更新堆疊時:
cloudformation:ChangeSetName
-
您要與政策建立關聯的 CloudFormation 變更集名稱。使用此條件控制 使用者可以執行或刪除的變更集。
cloudformation:ImportResourceTypes
-
您希望與政策建立關聯的範本資源類型,例如
AWS::EC2::Instance
。使用此條件來控制 使用者在將資源匯入堆疊時,能夠使用的資源類型。此條件會針對使用者在ResourcesToImport
參數中宣告的資源類型進行檢查,目前僅支援 AWS CLI 和 API 請求。使用此參數時,您必須指定您希望使用者在匯入操作期間控制的所有資源類型。如需ResourcesToImport
參數的詳細資訊,請參閱 AWS CloudFormation API 參考中的 CreateChangeSet動作。如需可能 的清單
ResourcesToImport
,請參閱 資源類型支援。使用三段式資源命名慣例,以指定使用者可使用的資源類型,範圍大至整個組織的所有資源,小至個別的資源類型。
organization
::*-
指定給定組織的所有資源類型。
organization
::
::*service_name
-
指定給定組織內特定服務的所有資源類型。
organization
::
::service_name
resource_type
-
指定特定的資源類型。
例如:
AWS::*
-
指定所有支援 AWS 的資源類型。
AWS::
service_name
::*-
指定特定 AWS 服務的所有支援資源。
AWS::
service_name
::resource_type
-
指定特定 AWS 資源類型,例如
AWS::EC2::Instance
(所有 EC2 執行個體)。
cloudformation:ResourceTypes
-
您希望與政策建立關聯的範本資源類型,例如
AWS::EC2::Instance
。使用此條件控制 使用者在建立或更新堆疊時可以使用的資源類型。此條件的檢查目標是使用者在ResourceTypes
參數中宣告的資源類型,目前僅支援 AWS CLI 和 API 請求。使用此參數時,使用者必須指定其範本中的所有資源類型。如需ResourceTypes
參數的詳細資訊,請參閱 AWS CloudFormation API 參考中的 CreateStack動作。如需資源類型的清單,請參閱 AWS 資源和屬性類型參考。
使用三段式資源命名慣例,以指定使用者可使用的資源類型,範圍大至整個組織的所有資源,小至個別的資源類型。
organization
::*-
指定給定組織的所有資源類型。
organization
::
::*service_name
-
指定給定組織內特定服務的所有資源類型。
organization
::
::service_name
resource_type
-
指定特定的資源類型。
例如:
AWS::*
-
指定所有支援 AWS 的資源類型。
AWS::
service_name
::*-
指定特定 AWS 服務的所有支援資源。
AWS::
service_name
::resource_type
-
指定特定 AWS 資源類型,例如
AWS::EC2::Instance
(所有 EC2 執行個體)。 Alexa::ASK::*
-
指定 Alexa Skill Kit 中的所有資源類型。
Alexa::ASK::Skill
-
指定個別 Alexa::ASK::Skill 資源類型。
Custom::*
-
指定所有自訂資源。
如需詳細資訊,請參閱使用自訂資源建立自訂佈建邏輯。
Custom::
resource_type
-
指定特定自訂資源類型。
如需詳細資訊,請參閱使用自訂資源建立自訂佈建邏輯。
cloudformation:RoleARN
-
您想要與政策建立關聯之 IAM 服務角色的 Amazon Resource Name (ARN)。使用此條件控制 使用者在使用堆疊或變更集時可以使用的服務角色。
cloudformation:StackPolicyUrl
-
您想要與政策建立關聯的 Amazon S3 堆疊政策 URL。使用此條件控制 使用者可在建立或更新堆疊動作期間,與堆疊建立關聯的堆疊政策。如需堆疊政策的詳細資訊,請參閱避免更新堆疊資源。
注意
為了確保使用者只能使用您上傳的堆疊政策建立或更新堆疊,請將 S3 儲存貯體設定為僅供這些使用者讀取。
cloudformation:TemplateUrl
-
您想要與政策建立關聯的 Amazon S3 範本 URL。使用此條件控制 使用者在建立或更新堆疊時可以使用的範本。
注意
為了確保使用者只能使用您上傳的範本建立或更新堆疊,請將 S3 儲存貯體設定為僅供這些使用者讀取。
注意
下列 CloudFormation 特定條件適用於相同名稱的 API 參數:
-
cloudformation:ChangeSetName
-
cloudformation:RoleARN
-
cloudformation:StackPolicyUrl
-
cloudformation:TemplateUrl
例如,
cloudformation:TemplateUrl
僅適用於CreateStack
、UpdateStack
、和CreateChangeSet
API 的TemplateUrl
參數。 -
如需使用條件金鑰控制存取的 IAM 政策範例,請參閱CloudFormation 的 IAM 身分型政策範例。
確認 CloudFormation 範本中的 IAM 資源
在建立堆疊之前,CloudFormation 會驗證您的範本。在驗證期間,CloudFormation 會檢查您的範本是否有可能建立的 IAM 資源。IAM 資源 (例如具有完全存取權的使用者) 可以存取和修改您的 AWS 帳戶中的任何資源。因此,我們建議您先檢閱與每個 IAM 資源相關聯的許可再繼續操作,以免無意中建立提升許可的資源。若要確保您已完成,您必須確認範本包含這些資源,在建立堆疊之前為 CloudFormation 提供指定的功能。
您可以使用 CloudFormation 主控台、 AWS Command Line Interface (AWS CLI) 或 API 來確認 CloudFormation 範本的功能:
-
在 CloudFormation 主控台的建立堆疊或更新堆疊精靈的設定堆疊選項頁面上,選擇我確認此範本可能會建立 IAM 資源。
-
在 中 AWS CLI,當您使用 create-stack和 update-stack命令時,請指定
--capabilities
選項的CAPABILITY_IAM
或CAPABILITY_NAMED_IAM
值。如果您的範本包含 IAM 資源,您可以指定任一功能。如果您的範本包含 IAM 資源的自訂名稱,您必須指定CAPABILITY_NAMED_IAM
。 -
在 API 中,當您使用 CreateStack和 UpdateStack動作時,請指定
Capabilities.member.1=CAPABILITY_IAM
或Capabilities.member.1=CAPABILITY_NAMED_IAM
。如果您的範本包含 IAM 資源,您可以指定任一功能。如果您的範本包含 IAM 資源的自訂名稱,您必須指定CAPABILITY_NAMED_IAM
。
重要
如果您的範本包含自訂的具名 IAM 資源,請不要重複使用相同的範本建立多個堆疊。IAM 資源在您的帳戶中必須是全域唯一的。如果您在不同的區域使用相同的範本建立多個堆疊,您的堆疊可能會共用相同的 IAM 資源,而不是一個堆疊獨有一個資源。在堆疊中共享資源可能會產生各種無法恢復的意外結果。例如,如果您刪除或更新一個堆疊中的共享 IAM 資源,您會在無意中修改其他堆疊的資源。
管理在 Amazon EC2 執行個體上執行之應用程式的登入資料
如果您有應用程式在 Amazon EC2 執行個體上執行,且需要向 AWS 資源 (例如 Amazon S3 儲存貯體或 DynamoDB 資料表) 提出請求,則此應用程式需要 AWS 安全憑證。不過,在每個您啟動的執行個體中分發和內嵌長期的安全憑證,是一項挑戰,同時可能有安全風險。與其使用像 IAM 使用者憑證的長期憑證,我們建議您在執行個體啟動時,建立與 Amazon EC2 執行個體相關聯的 IAM 角色。然後,應用程式就可以從 Amazon EC2 執行個體取得暫時的安全憑證。您不必在執行個體上內嵌長期的憑證。此外,為使管理憑證變得更輕鬆,您可以為多個 Amazon EC2 執行個體僅指定單一角色,不必為每個執行個體建立唯一的憑證。
如需示範如何使用角色啟動執行個體的範本程式碼片段,請參閱 IAM 角色範本範例。
注意
使用臨時安全登入資料的執行個體上的應用程式可以呼叫任何 CloudFormation 動作。不過,由於 CloudFormation 會與許多其他服務 AWS 互動,因此您必須驗證您想要使用的所有服務是否支援臨時安全登入資料。如需接受臨時安全登入資料的 服務清單,請參閱《AWS IAM 使用者指南》中的使用 IAM 的 服務。
授予臨時存取權 (聯合存取權)
在某些情況下,您可能想要授予沒有 AWS 憑證的使用者暫時存取您的 AWS 帳戶。與其在您想要授予臨時存取權時建立和刪除長期登入資料,而是使用 AWS Security Token Service (AWS STS)。例如,您可以使用 IAM 角色。從一個 IAM 角色,您可以透過程式設計方式建立,然後分發許多暫時安全憑證 (包括存取金鑰、私密存取金鑰和安全權杖)。這些憑證的生命週期有限,因此在過期 AWS 帳戶 後就無法用來存取您的 。您也可以建立多個 IAM 角色,以授與個別使用者不同層級的許可。IAM 角色對聯合身分和單一登入等案例很有用。
聯合身分是可以跨多個系統使用的獨特身分。對於已建立內部部署身分系統 (如 LDAP 或 Active Directory) 的企業使用者,您可用您的現場部署身分系統處理所有身分驗證。驗證完使用者身分後,您會從適當的 IAM 使用者或角色提供暫時安全憑證。例如,您可以建立管理員角色和開發人員角色,其中管理員可以完整存取 AWS 帳戶,而開發人員有權只使用 CloudFormation 堆疊。管理員經過身分驗證後,管理員有權從管理員角色取得臨時安全登入資料。不過,對於開發人員,他們只能從開發人員角色取得臨時安全登入資料。
您也可以授予聯合身分使用者對 的存取權 AWS Management Console。在使用者向您的內部部署身分系統驗證後,您可以透過程式設計方式建構暫時的 URL,藉以直接存取 AWS Management Console。當使用者使用臨時 URL 時,他們不需要登入 , AWS 因為他們已經過驗證 (單一登入)。此外,因為 URL 是從使用者的暫時安全憑證所建構,所以這些憑證可用的許可會決定使用者在 AWS Management Console中的許可。
您可以使用數個不同的 AWS STS APIs來產生臨時安全登入資料。如需要使用哪些 API 的詳細資訊,請參閱《IAM 使用者指南》中的比較 AWS STS 登入資料。
重要
當您使用 GetFederationToken
API 產生的暫時安全憑證時,您不能使用 IAM。如果您需要使用 IAM,請改用來自角色的暫時安全憑證。
CloudFormation 會與許多其他服務互動 AWS 。當您搭配 CloudFormation 使用臨時安全登入資料時,請確認您想要使用的所有服務都支援臨時安全登入資料。如需接受臨時安全登入資料的 服務清單,請參閱《AWS IAM 使用者指南》中的使用 IAM 的 服務。
如需詳細資訊,請參閱《IAM 使用者指南》中的下列相關資源: