本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 控制 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 環境中使用臨時安全登入資料來增強安全性。
定義 IAM 基於身分識別的政策
若要授予對 CloudFormation 的存取權,您需要建立和指派 IAM 政策,以授予您的 IAM 身分 (例如使用者或角色) 呼叫其所需 API 動作的許可。
使用 IAM 身分型政策,您可以指定允許或拒絕的動作和資源,以及在何種條件下允許或拒絕動作。CloudFormation 支援特定動作、資源和條件金鑰。
如果您是初次使用 IAM,請先自行熟悉 IAM JSON 政策的元素。如需詳細資訊,請參閱《IAM 使用者指南》中的 IAM JSON 政策元素參考。若要了解如何建立 IAM 政策,請完成 IAM 文件中的教學課程建立並連接您的第一個客戶管理政策。
CloudFormation 的政策動作
在 IAM 政策陳述式的 Action 元素中,您可以指定 CloudFormation 提供的任何 API 動作。必須在動作名稱前面加上小寫字串 cloudformation:。例如:cloudformation:CreateStack、cloudformation:CreateChangeSet 和 cloudformation:UpdateStack。
若要在單一陳述式中指定多個動作,請用逗號分隔,如下所示:
"Action": [ "cloudformation:action1", "cloudformation:action2" ]
您也可以使用萬用字元指定多個動作。例如,您可以指定名稱開頭為 Get 文字的所有動作,如下所示:
"Action": "cloudformation:Get*"
若要查看與 cloudformation 服務字首相關聯的動作完整清單,請參閱服務授權參考中的適用於 CloudFormation的動作、資源和條件索引鍵以及適用於 AWS 雲端控制 API的動作、資源和條件索引鍵。
範例
以下顯示授予檢視 CloudFormation 堆疊許可的許可政策範例。
範例 1: 授予檢視堆疊許可的範例政策
建立或刪除堆疊的使用者需要基於其堆疊範本的其他許可。例如,如果您的範本描述 Amazon SQS 佇列,則使用者必須同時擁有 CloudFormation 和 Amazon SQS 動作的許可,如下列範例政策所示。
範例 2: 授予建立和檢視堆疊動作及所有 Amazon SQS 動作的範例政策
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 (ARN) 指定的資源。特定 ARN 格式視資源而定。
如需 CloudFormation 資源類型及其 ARN 的完整清單,請參閱《服務授權參考》中的 CloudFormation定義的資源類型。若要了解您可以使用每個資源的 ARN 指定哪些動作,請參閱 CloudFormation定義的動作。
可以指定特定堆疊的動作,如下列政策範例所示。當您提供 ARN 時,請將 取代為您的資源特定資訊。placeholder
text
範例 1: 拒絕刪除和更新指定堆疊動作的範例政策
上例中的政策在堆疊名稱結尾處使用萬用字元,所以全堆疊 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: 允許針對指定轉換建立變更集動作的範例政策
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_nameresource_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 動作。如需資源類型的清單,請參閱 CloudFormation 範本參考指南。
使用三段式資源命名慣例,以指定使用者可使用的資源類型,範圍大至整個組織的所有資源,小至個別的資源類型。
organization::*-
指定給定組織的所有資源類型。
organization::::*service_name-
指定給定組織內特定服務的所有資源類型。
organization::::service_nameresource_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、和CreateChangeSetAPI 的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 服務互動,所以您必須確認您想要使用的所有服務,都支援暫時安全憑證。如需可接受臨時安全憑證的服務清單,請參閱《IAM 使用者指南》中的可搭配 IAM 運作的AWS 服務。
授予暫時存取 (聯合身分存取)
在某些情況下,您可能想要授予沒有 AWS 登入資料的使用者暫時存取您的 AWS 帳戶。當您想要授予暫時存取權時,不要建立和刪除長期登入資料,而是使用 AWS Security Token Service (AWS STS)。例如,您可以使用 IAM 角色。從一個 IAM 角色,您可以透過程式設計方式建立,然後分發許多暫時安全憑證 (包括存取金鑰、私密存取金鑰和安全權杖)。這些登入資料生命週期有限,因此在過期 AWS 帳戶 後就無法用來存取您的 。您也可以建立多個 IAM 角色,以授與個別使用者不同層級的許可。IAM 角色對聯合身分和單一登入等案例很有用。
聯合身分是可以跨多個系統使用的獨特身分。對於已建立內部部署身分系統 (如 LDAP 或 Active Directory) 的企業使用者,您可用您的現場部署身分系統處理所有身分驗證。驗證完使用者身分後,您會從適當的 IAM 使用者或角色提供暫時安全憑證。例如,您可以建立管理員角色和開發人員角色,其中管理員可以完整存取 AWS 帳戶,而且開發人員只能使用 CloudFormation 堆疊。驗證管理員身分後,就會授權管理員從管理員角色中取得暫時安全憑證。不過,開發人員只能從開發人員角色中取得暫時安全憑證。
您也可以授予聯合身分使用者對 的存取權 AWS 管理主控台。在使用者向您的內部部署身分系統驗證後,您可以透過程式設計方式建構暫時的 URL,藉以直接存取 AWS 管理主控台。當使用者使用暫時 URL 時,他們不需要登入 , AWS 因為他們已經過驗證 (單一登入)。此外,因為 URL 是從使用者的暫時安全憑證所建構,所以這些憑證可用的許可會決定使用者在 AWS 管理主控台中的許可。
您可以使用數個不同的 AWS STS APIs來產生臨時安全登入資料。如需有關使用何種 API 的詳細資訊,請參閱《IAM 使用者指南》中的比較 AWS STS 憑證。
重要
當您使用 GetFederationToken API 產生的暫時安全憑證時,您不能使用 IAM。如果您需要使用 IAM,請改用來自角色的暫時安全憑證。
CloudFormation 會與許多其他服務互動 AWS 。當您搭配使用暫時安全憑證與 CloudFormation 時,請確認您想要使用的所有服務都支援暫時安全憑證。如需可接受臨時安全憑證的服務清單,請參閱《IAM 使用者指南》中的可搭配 IAM 運作的AWS 服務。
如需詳細資訊,請參閱《IAM 使用者指南》中的下列相關資源: